【问题标题】:Using the predict() function with 2 or more explanatory variables使用具有 2 个或更多解释变量的 predict() 函数
【发布时间】:2018-03-30 11:42:35
【问题描述】:

我使用lm() 构建了一些模型。响应变量是每月两个地点之一的物种丰度。它以百分比形式给出,精确到小数点后 6 位。必须使用百分比,因为数据是通过公民科学收集的,其中每个月记录的实际每月总数不可靠,但两个地点的总体比例 (%) 是可靠的。

最佳拟合模型有两个解释变量,即风速和风向,均为数值。我想应用predict() 函数。到目前为止,我已经能够按照帖子here 中的说明进行操作,如下所示。

model <- lm(y~ x1, data=df)
new.df <- data.frame(x1=c(0, 10, 20))
predict(model, new.df) 

这似乎适用于只有一个探索性变量的模型,但我无法添加第二个,因此它适用于我最适合的模型。

到目前为止,这是我想出的,但是,结果没有意义,因为两个是负数。

model2 <- lm(y ~ x1+x2, data=df)
new.df <- data.frame(x1=c(1, 6, 12), (x2=c(1, 10, 20)))
predict(model2, new.df)

 1          2          3 
 0.4123114 -0.3975497 -1.3014379 

如果有人能提供任何建议,我将不胜感激。

【问题讨论】:

  • lm 模型不知道您的y 不能为负数,因此给定一些似是而非的x 组合,它可以预测负数y。您最有可能寻找的是glmfamily = poisson
  • 我看不出你的代码有什么问题;如果您不提供有关 df 和/或模型拟合的详细信息,很难说更多。拟合线性模型的质量如何?请查看如何提供minimal reproducible example/attempt,包括示例数据。
  • 如果没有输入数据的一些样本,真的无能为力,但@missuse 是正确的。 lm 似乎工作正常。如果您的数据中不可能有负值,您需要指定一个更适合您的数据的 glm 链接函数。
  • 感谢您的反馈。我已经更新了我的问题,我希望它已经足够了。我从“glm”开始,但我遇到了困难,因为响应变量是小数点后 6 位的百分比。我想我可能需要寻找一种不同的方法来预测这些解释变量如何影响响​​应。

标签: r linear-regression lm predict


【解决方案1】:

如果你需要 x1 + x2 和两者的交互 (y ~ x1 +x2 +x1:x2),试试这个:

> df <- data.frame(x1=c(2, 12, 24), x2=c(2, 20, 40), y=c(1,2,3)) # example DF

> model2 <- lm(y ~ x1*x2, data=df)
> new.df <- data.frame(x1=c(1, 6, 12), (x2=c(1, 10, 20)))
> predict(model2, new.df)
  1   2   3 
1.0 1.5 2.0 

【讨论】:

  • 太完美了,谢谢。我很遗憾地承认;我在脚本中发现了一个愚蠢的错误。我的 csv 中的 x2。是小数,不是整数。我现在已经调整到 0.1、0.2 等等,它似乎正在工作。
【解决方案2】:

我发现了问题。我的响应变量已被转换以确保满足假设。因此,predict() 的输出以转换后的状态返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多