首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R predict()函数返回错误的值/值太多

R predict()函数返回错误的值/值太多
EN

Stack Overflow用户
提问于 2014-10-01 05:15:11
回答 1查看 33K关注 0票数 7

我正在尝试将吸光度(Abs)值转换为浓度(ng/mL),基于已建立的线性模型和标准曲线。我计划通过使用predict()函数来实现这一点。我在获取predict()以返回期望的结果时遇到了麻烦。下面是我的代码示例:

代码语言:javascript
运行
复制
Standards<-data.frame(ng_mL=c(0,0.4,1,4),
                      Abs550nm=c(1.7535,1.5896,1.4285,0.9362))
LM.2<-lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']])
Abs<-c(1.7812,1.7309,1.3537,1.6757,1.7409,1.7875,1.7533,1.8169,1.753,1.6721,1.7036,1.6707,
       0.3903,0.3362,0.2886,0.281,0.3596,0.4122,0.218,0.2331,1.3292,1.2734)


predict(object=LM.2,
        newdata=data.frame(Concentration=Abs[1]))#using Abs[1] as an example, but I eventually want predictions for all values in Abs

运行最后几行代码会得到以下输出:

代码语言:javascript
运行
复制
> predict(object=LM.2,
+         newdata=data.frame(Concentration=Abs[1]))
         1          2          3          4 
 0.5338437  0.4731341  0.3820697 -0.0732525 
Warning message:
'newdata' had 1 row but variables found have 4 rows 

这似乎不是我想要的输出。我正在尝试获得每个吸光度(Abs)条目的单个预测浓度值。如果能够一次预测所有条目并将它们添加到现有的数据框中,那就太好了,但我甚至不能让它正确地给出一个值。我在这里读了很多帖子,在Google上找到的网页,以及所有的帮助文件,我都不能理解这个函数到底是怎么回事。任何帮助都会很感谢,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 05:29:15

必须在newdata中有一个变量,该变量与最初用于拟合模型的模型公式中使用的名称相同。

您有两个错误:

  1. 您不能在newdata中使用与用于拟合模型的协变量同名的变量,
  2. 您会因为滥用公式接口而使问题更加难以解决。

不要这样拟合你的模型:

代码语言:javascript
运行
复制
mod <- lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']])

像这样拟合你的模型

代码语言:javascript
运行
复制
mod <- lm(log(Abs550nm) ~ ng_mL, data = standards)

这不是更具可读性吗?

要进行预测,您需要一个具有变量ng_mL的数据框

代码语言:javascript
运行
复制
predict(mod, newdata = data.frame(ng_mL = c(0.5, 1.2)))

现在你可能会有第三个错误。你似乎试图用新的吸光度进行预测,但你拟合模型的方式,吸光度是响应变量。您需要为ng_mL提供新值。

您看到的行为是当R在newdata中找不到命名正确的变量时发生的情况;它返回模型中的拟合值或观测数据的预测值。

这让我觉得你把公式倒过来了。你的意思是:

代码语言:javascript
运行
复制
mod2 <- lm(ng_mL ~ log(Abs550nm), data = standards)

??在这种情况下,您需要

代码语言:javascript
运行
复制
predict(mod2, newdata = data.frame(Abs550nm = c(1.7812,1.7309)))

说。注您不需要在名称中包含log()位。R将其识别为一个函数,并将其应用于变量Abs550nm

如果模型确实是log(Abs550nm) ~ ng_mL的,并且您想要找到ng_mL的值作为Abs550nm的新值,那么您需要以某种方式反转拟合的模型。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26130241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档