Could it be that my newdata object needs to include a column for the concn term even though I'm asking for concn to be predicted? If so, what numbers would I fill it with? Or should my newdata object include the original data, too? Is there another mailing list I can ask? Thanks, -John
On Wed, Aug 29, 2012 at 9:16 AM, John Thaden <johntha...@gmail.com> wrote: > I think I may be misreading the help pages, too, but misreading how? > > I agree that inverting the fitted model is simpler, but I worry that I'm > misusing ordinary least squares regression by treating my response, with its > error distribution, as a predictor with no such error. In practice, with my > real data that includes about six independent peak area measurements per > known concentration level, the diagnostic plots from plot.lm(inv.model) look > very strange and worrisome. > > Certainly predict.lm(..., type = "terms") must be able to do what I need. > > -John > > On Wed, Aug 29, 2012 at 6:50 AM, Rui Barradas <ruipbarra...@sapo.pt> wrote: >> >> Hello, >> >> You seem to be misreading the help pages for lm and predict.lm, argument >> 'terms'. >> A much simpler way of solving your problem should be to invert the fitted >> model using lm(): >> >> >> model <- lm(area ~ concn, data) # Your original model >> inv.model <- lm(concn ~ area, data = data) # Your problem's model. >> >> # predicts from original data >> pred1 <- predict(inv.model) >> # predict from new data >> pred2 <- predict(inv.model, newdata = new) >> >> # Let's see it. >> plot(concn ~ area, data = data) >> abline(inv.model) >> points(data$area, pred1, col="blue", pch="+") >> points(new$area, pred2, col="red", pch=16) >> >> >> Also, 'data' is a really bad variable name, it's already an R function. >> >> Hope this helps, >> >> Rui Barradas >> >> Em 28-08-2012 23:30, John Thaden escreveu: >>> >>> Hello all, >>> >>> How do I actually use the output of predict.lm(..., type="terms") to >>> predict new term values from new response values? >>> >>> I'm a chromatographer trying to use R (2.15.1) for one of the most >>> common calculations in that business: >>> >>> - Given several chromatographic peak areas measured for control >>> samples containing a molecule at known (increasing) concentrations, >>> first derive a linear regression model relating the known >>> concentration (predictor) to the observed peak area (response) >>> - Then, given peak areas from new (real) samples containing >>> unknown amounts of the molecule, use the model to predict >>> concentrations of the >>> molecule in the unknowns. >>> >>> In other words, given y = mx +b, I need to solve x' = (y'-b)/m for new >>> data y' >>> >>> and in R, I'm trying something like this >>> >>> require(stats) >>> data <- data.frame(area = c(4875, 8172, 18065, 34555), concn = c(25, >>> 50, 125, 250)) >>> new <- data.frame(area = c(8172, 10220, 11570, 24150)) >>> model <- lm(area ~ concn, data) >>> pred <- predict(model, type = "terms") >>> #predicts from original data >>> pred <- predict(model, type = "terms", newdata = new) >>> #error >>> pred <- predict(model, type = "terms", newdata = new, se.fit = TRUE) >>> #error >>> pred <- predict(model, type = "terms", newdata = new, interval = >>> "prediction") #error >>> new2 <- data.frame(area = c(8172, 10220, 11570, 24150), concn = 0) >>> new2 >>> pred <- predict(model, type = "terms", newdata = new2) >>> #wrong results >>> >>> Can someone please show me what I'm doing wrong? >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list >>> 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. >> >> > ______________________________________________ R-help@r-project.org mailing list 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.