gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:09:25 25 4
gpt4 key购买 nike

我正在尝试根据已建立的线性模型和标准曲线将吸光度 (Abs) 值转换为浓度 (ng/mL)。我计划通过使用 predict() 函数来做到这一点。我无法让 predict() 返回所需的结果。这是我的代码示例:

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

运行最后几行给出了这个输出:
> 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 上找到的网页以及所有帮助文件,我一生都无法理解此功能发生了什么。任何帮助将不胜感激,谢谢。

最佳答案

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

你有两个错误:

  • 您没有在 newdata 中使用变量与用于拟合模型的协变量同名,以及
  • 由于您滥用公式界面,您使问题更难解决。

  • 不要像这样适合您的模型:
    mod <- lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']])

    像这样适合你的模型
    mod <- lm(log(Abs550nm) ~ ng_mL, data = standards)

    这不是更具可读性吗?

    要预测您需要一个带有变量 ng_mL 的数据框:
    predict(mod, newdata = data.frame(ng_mL = c(0.5, 1.2)))

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

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

    这让我觉得你有公式回到前面。你的意思是:
    mod2 <- lm(ng_mL ~ log(Abs550nm), data = standards)

    ??在这种情况下,你需要
    predict(mod2, newdata = data.frame(Abs550nm = c(1.7812,1.7309)))

    说。请注意,您不需要包含 log()有点名。 R 将其识别为函数并应用于变量 Abs550nm为你。

    如果型号真的是 log(Abs550nm) ~ ng_mL并且您想找到 ng_mL 的值对于 Abs550nm 的新值您需要以某种方式反转拟合模型。

    关于R predict() 函数返回错误/太多值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130241/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com