This isn't a different answer from @mkt but a graph graphs in particular won't fit into a comment. I first fit a logistic curve in Stata (after logging the predictor) to all data and get this graph
EDIT: Essentially just an indicationNow I fit curves separately for each virus in the simplest scenario of techniquevirus defining an indicator variable. SeparatingHere for the two virusesrecord is, as mentioned elsewhere, a next stepStata script:
clear
input id str9 Subsample str4 Virus Genome_cov Copies_per_uL
1 S1.1_RRAV RRAV 100 92500
2 S1.2_RRAV RRAV 100 95900
3 S1.3_RRAV RRAV 100 92900
4 S2.1_RRAV RRAV 100 4049.54
5 S2.2_RRAV RRAV 96.9935 3809
6 S2.3_RRAV RRAV 94.5054 3695.06
7 S3.1_RRAV RRAV 3.7235 86.37
8 S3.2_RRAV RRAV 11.8186 84.2
9 S3.3_RRAV RRAV 11.0929 95.2
10 S4.1_RRAV RRAV 0 2.12
11 S4.2_RRAV RRAV 5.0799 2.71
12 S4.3_RRAV RRAV 0 2.39
13 S5.1_RRAV RRAV 4.9503 0.16
14 S5.2_RRAV RRAV 0 0.08
15 S5.3_RRAV RRAV 4.4147 0.08
16 S1.1_UMAV UMAV 5.7666 1.38
17 S1.2_UMAV UMAV 26.0379 1.72
18 S1.3_UMAV UMAV 7.4128 2.52
19 S2.1_UMAV UMAV 21.172 31.06
20 S2.2_UMAV UMAV 16.1663 29.87
21 S2.3_UMAV UMAV 9.121 32.82
22 S3.1_UMAV UMAV 92.903 627.24
23 S3.2_UMAV UMAV 83.0314 615.36
24 S3.3_UMAV UMAV 90.3458 632.67
25 S4.1_UMAV UMAV 98.6696 11180
26 S4.2_UMAV UMAV 98.8405 12720
27 S4.3_UMAV UMAV 98.7939 8680
28 S5.1_UMAV UMAV 98.6489 318200
29 S5.2_UMAV UMAV 99.1303 346100
30 S5.3_UMAV UMAV 98.8767 345100
end
gen log10Copies = log10(Copies)
gen Genome_cov_pr = Genome_cov / 100
encode Virus, gen(virus)
set seed 2803
fracreg logit Genome_cov_pr log10Copies i.virus, vce(bootstrap, reps(10000))
twoway function invlogit(-5.055519 + 1.961538 * x), lc(orange) ra(log10Copies) ///
|| function invlogit(-5.055519 + 1.233273 + 1.961538 * x), ra(log10Copies) lc(blue) ///
|| scatter Genome_cov_pr log10Copies if Virus == "RRAV", mc(orange) ms(Oh) ///
|| scatter Genome_cov_pr log10Copies if Virus == "UMAV", mc(blue) ms(+) ///
legend(order(4 "UMAV" 3 "RRAV") pos(11) col(1) ring(0)) ///
xla(-1 "0.1" 0 "1" 1 "10" 2 "100" 3 "10{sup:3}" 4 "10{sup:4}" 5 "10{sup:5}") ///
yla(0 .25 "25" .5 "50" .75 "75" 1 "100", ang(h)) ///
ytitle(Genome coverage (%)) xtitle(Genome copies / {&mu}L) scheme(s1color)
This is pushing hard on a tiny dataset but the P-value for virus looks supportive of fitting two curves jointly.
Fractional logistic regression Number of obs = 30
Replications = 10,000
Wald chi2(2) = 48.14
Prob > chi2 = 0.0000
Log pseudolikelihood = -6.9603063 Pseudo R2 = 0.6646
-------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
Genome_cov_pr | Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
log10Copies | 1.961538 .2893965 6.78 0.000 1.394331 2.528745
|
virus |
UMAV | 1.233273 .5557609 2.22 0.026 .1440018 2.322544
_cons | -5.055519 .8971009 -5.64 0.000 -6.813805 -3.297234
-------------------------------------------------------------------------------