【问题标题】:rolling function to get coeff of regression from a list of dataframes滚动函数从数据框列表中获取回归系数
【发布时间】:2023-03-22 20:01:01
【问题描述】:

我想获得具有滚动周期的数据帧列表中每个数据帧的回归系数,但不知何故,我得到的结果与我正在寻找的结果截然不同。 我尝试了以下代码: 我的数据是这样的

library("zoo") ## for rollapply()
data <- list(mtcars,mtcars,mtcars)

fapplyFunction <- function(x){
coef(lm(mpg ~ drat, data=as.data.frame(x)))}

coef_list <- lapply(data, rollapply, 20, fapplyFunction, partial = FALSE, by.column = FALSE)

我希望将滚动窗口的每个元素的回归结果作为一个列表,以后可以绑定

我是R 的新手。任何帮助将不胜感激。

【问题讨论】:

  • 是的,来自 zoo 包 .@jogo
  • 最后一行引用了fapplyFunction,但你已经定义了fapplyFunction2。确保函数名称相同。
  • 是的,我在这里更正了。谢谢@G.Grothendieck
  • 代码现在给出了您要求的结果。

标签: r list dataframe lapply rollapply


【解决方案1】:

提供data.frame 作为第一个rollapply 参数会将FUN 应用于data.frame 的每一列单独。可以通过在data.frame 中的行号序列上移动滚动窗口来同时对两列中的数据进行操作。

lapply(data, function(x)
    rollapply(1:nrow(x), 20, function(i) coef(lm(mpg ~ drat, data = x[i, ]))))
#[[1]]
#      (Intercept)     drat
# [1,]   -11.70889 8.981350
# [2,]   -12.09923 9.124252
# [3,]   -11.47530 9.015324
# [4,]   -11.91551 9.124458
# [5,]   -12.51405 9.094820
# [6,]   -12.10843 8.994363
# [7,]   -15.57941 9.937651
# [8,]   -14.06719 9.511583
# [9,]   -14.42693 9.684131
#[10,]   -11.68393 8.789089
#[11,]   -12.12158 8.954089
#[12,]   -13.12850 9.243443
#[13,]   -12.81957 9.095040
# 
#[[2]]
#      (Intercept)     drat
# [1,]   -11.70889 8.981350
# [2,]   -12.09923 9.124252
# [3,]   -11.47530 9.015324
# [4,]   -11.91551 9.124458
# [5,]   -12.51405 9.094820
# [6,]   -12.10843 8.994363
# [7,]   -15.57941 9.937651
# [8,]   -14.06719 9.511583
# [9,]   -14.42693 9.684131
#[10,]   -11.68393 8.789089
#[11,]   -12.12158 8.954089
#[12,]   -13.12850 9.243443
#[13,]   -12.81957 9.095040
# 
#[[3]]
#      (Intercept)     drat
# [1,]   -11.70889 8.981350
# [2,]   -12.09923 9.124252
# [3,]   -11.47530 9.015324
# [4,]   -11.91551 9.124458
# [5,]   -12.51405 9.094820
# [6,]   -12.10843 8.994363
# [7,]   -15.57941 9.937651
# [8,]   -14.06719 9.511583
# [9,]   -14.42693 9.684131
#[10,]   -11.68393 8.789089
#[11,]   -12.12158 8.954089
#[12,]   -13.12850 9.243443
#[13,]   -12.81957 9.095040

【讨论】:

  • @G.Grothendieck 是的,你是对的,我错了;我进行了编辑以澄清。但它不会改变解决方案或方法。
  • rollapply 仅在 by.column = TRUE 时单独适用于每一列,但问题中的代码使用 by.column = FALSE。
  • @G.Grothendieck 默认情况下(在我的示例中)我们有by.column = TRUE。原始问题的目标是基于考虑两列滚动数据的线性模型提取系数。我的解决方案正是这样做的。也许您想发布一个不同的解决方案来说明另一种方法。
  • @philomath 请考虑通过在答案旁边设置绿色复选标记来关闭问题。这样,您将帮助未来的 SO 读者识别相关的问答并保持 SO 整洁。
  • @MauritsEvers 完成。我是堆栈溢出的新手。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多