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") ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.