# [R] interpolation using R for PCR quantification

Luigi Marongiu marongiu.luigi at gmail.com
Thu Dec 24 17:12:13 CET 2015

```Dear all,
I am a newbie in interpolation using R and I would like to learn
better the procedure.
I am applying interpolation to quantify nucleic acid targets using an
assay known as PCR. To do this, I have two sets of variables: standard
of known concentrations and query for which I need to identify the
concentration.
For each variable I have the output of the assay (cyc) and an
approximation of the concentration expressed in relation to the
concentration of the standard, so 5 means 10^5 etc.
Given that the actual concentration of the standards is given in the
'con' variable, the relation is that x=log10(con) and y = cyc, as
represented in the first plot of the following example. In black are
depicted the standard and in red the query samples.

Now, to obtain interpolation the only function that i know is
approx(). The first problem is that I need to switch the x-y variables
because the values specifying where interpolation is to take place go
in the 'xout' parameter and I have y outputs. If I maintain the
original x/y orientation the output from approx() is empty. How can I
keep the original layout? I must admit, anyhow, that the construct
x=log10(con) and y = cyc is an artifact of the PCR analysis, since the
independent variable is indeed the cyc value.

The second problem I am facing -- and the most important -- is that
the output seems weird. The values I get are simply the concentration
input as such and not calculated by interpolation. In the example, the
output I obtain is:
[1]       NA 1480.600 1480.600  148.060  202.319  148.060   14.806
14.806   14.806
[10]       NA
the first and last value are OK because the cyc values are outside the
dynamic range under evaluation, but the only value that seems genuine
is 202.319, the others are just the values I placed in the 'con'
variable. For instance the second and third values have cyc = 26.992
and 26.961 and yet they are both assigned to 1480.600.
What I am getting wrong?
Thank you (and merry Christmas!)
L

>>>
dil <- c(5,    5,    5,    5,    4,    4,    4,    3,    3,    3,
3,    3,    2,    2,    2,    2,    2,    2,    1,    1,    1,    1,
1,    1,    1)
sam <- c(0,    0,    0,    1,    0,    0,    0,    0,    0,    0,
1,    1,    0,    0,    0,    1,    1,    1,    0,    0,    0,    1,
1,    1,    1)
cyc <- c(20.787,    20.494,    20.475,    20.189,    23.991,
24.084,    23.863,    26.298,    28.007,    27.413,    26.992,
26.961,    31.363,    30.979,    32.013,    31.004,    30.576,
31.195,    35.219,    34.096,    38.088,    34.934,    35.101,
35.206,    38.366)
con <- c(148060,    148060,    148060,    NA,    14806,    14806,
14806,    1480.6,    1480.6,    1480.6,    NA,    NA,    148.06,
148.06,    148.06,    NA,    NA,    NA,    14.806,    14.806,
14.806,    NA,    NA,    NA,    NA)
df <- data.frame(dil, sam, cyc, con)

std <- subset(df, sam == 0)
qry <- subset(df, sam == 1)

plot(std\$cyc ~ std\$dil)
points(qry\$dil, qry\$cyc, col ="red")

Q <- approx(x=std\$cyc, y=log10(std\$con), xout=qry\$cyc,
method="linear", rule = 1)
(10^(Q\$y))

plot(std\$cyc, y=log10(std\$con))
abline(lm(log10(df\$con) ~ df\$cyc))
abline(v=qry\$cyc, col="blue")

```