【问题标题】:using predict with averages of coefficients使用带有系数平均值的预测
【发布时间】:2015-03-04 06:05:38
【问题描述】:

我有一个时间序列数据集,正在对过去 2 年的系数进行滚动平均,并将其应用于当年的变量。我创建了一个应用平均值的方法,但我想知道是否可以使用 predict 之类的函数来执行此操作,这样我就不必单独写出每个变量。

我的代码的简化版本是这样的:

formula <- as.formula( a ~ b + c)
subset <- which(data$year == 2009)
fm1 <- lm(formula, data[subset,])

subset2 <- which(data$year == 2010)
fm2 <- lm(formula, data[subset,])

#Take average of coefficients from these two regression
avg_coeff <-  (fm1$coeff + fm2$coeff)/2   

#Apply average coefficients to current year data
subset3 <- which(data$year == 2011)
subset_data <- data[subset,]

a_hat <- avg_coeff[1] + avg_coeff[2] * subset_data$b + avg_coeff[3] * subset_data$c

此方法有效,但我想保留 lm 对象,以便我可以使用 predict 方法并执行以下操作:

a_hat <- predict(fm, subset_data)

其中fm$coefficient 包含avg_coeff。我试过了

fm2$coeff <- avg_coeff

但这确实改变了fm2$coeff,但是当我使用fm2 运行预测时,它使用原始系数。

【问题讨论】:

  • 应该是fm2$coefficients,而不是fm2$coeff
  • 哦,这似乎解决了它。你知道为什么我运行 fm$coeff 时,它仍然会吐出系数吗?
  • 您在列表fm 中添加了一个新组件coeff。但是predict 使用的是object$coefficients
  • $ 函数存在部分匹配,但与$&lt;- 函数不匹配。更仔细地阅读?Extract 帮助页面。一般至少需要阅读 10 次,需要几个月的时间才能获得 90% 的内容。

标签: r regression lm predict


【解决方案1】:

如果你想每年都这样做,也许你可以这样做

require(plyr)
formula <- as.formula( a ~ b + c)
fn <- function(X){  
    fm <- lm(formula, X)
    out <- fm$coefficients   
}
coeffs <- dlply(dta, .(year), fn)
avg_coeffs <- sapply(coeffs, mean)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多