【问题标题】:using fitted() on output from lm with dummy variables在带有虚拟变量的 lm 输出上使用 fit()
【发布时间】:2014-09-10 02:31:59
【问题描述】:
reg_ss <- predict(lm(stem_d~stand_id*yr,ss))
fitted.values(reg_ss)

#Error: $ operator is invalid for atomic vectors

我已经用fitted()fitted.values() 尝试过这个并收到同样的错误。

stand_id 是一个具有 300 多个级别的因子,yr 是一个整数 1-19,但两者都是数字。

我有 20 年中每 2-3 年收集一次的树干密度数据。我想运行线性回归并预测采样之间年份的茎密度,即使用第 1 年和第 3 年的数据来预测第 2 年的茎密度。

任何关于如何使用fitted() 或任何其他方法获得预测值的建议将不胜感激。我怀疑它与分配给类别的虚拟变量有关,但似乎找不到任何有关解决方案的信息。

提前致谢!

【问题讨论】:

  • 你的问题是如何得到预测值?
  • 是的,我只需要我们未采样的林分年份组合的茎密度预测值。
  • 然后看看 MrFlick 的回答,或者如果它不起作用,说为什么不:)

标签: r linear-regression prediction


【解决方案1】:

如果你想要拟合值,你不应该先调用predict()

reg_ss <- lm(stem_d~stand_id*yr,ss)
predict(reg_ss)
fitted(reg_ss)

当您不传递新数据进行预测时,它基本上与fitted 做相同的事情,因此您得到的值基本相同。 fittedpredict 都将返回一个简单的命名向量。您不能在命名向量上使用fitted(因此出现错误消息)。

如果要预测未观察到的值,则需要将newdata= 参数传递给predict()。您应该传入一个 data.frame,其中包含名为“stand_id”和“yr”的列,就像ss 一样。确保也匹配因子水平。

【讨论】:

  • 非常感谢您的帮助!所以predicted() 和fitted() 都只返回错误信息。 “#Error: $ 运算符对原子向量无效” - 所以我没有得到任何结果。我将尝试按照描述创建 newdata = 但如何匹配因子水平?这些因素的独特组合的组合数以千计。我是否应该使用类似 expand.grid 的东西来创建一个包含所有可能组合的数据框,然后将其作为 newdata = 传递?
  • 那么请包含一个reproducible example,它会重新创建相同的错误消息。如果我定义ss&lt;-data.frame(stand_id=runif(10),stem_d=rnorm(10), yr=1:10),这对我来说运行得很好
  • 如果我了解您创建的 ss,它具有 stand_id 和 yr 的连续变量,其中我的数据将 stand_id 作为一个因子,yr 是一个整数。这会导致错误吗?
  • 它也适用于ss&lt;-data.frame(stand_id=factor(sample(1:3, 10, replace=T)),stem_d=rnorm(10), yr=1L:10L)。我需要给你一个可重复的例子,但它不起作用,因为我想出的一切都很好。
  • 所以我想出了如何传入新数据,它现在可以工作了。感谢您的所有帮助。
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多