这个问题建立在上一个问题的基础上,在这里我得到了很好的回答。
R:使用 rollapply 和 ddply 进行分组滚动窗口线性回归
难道你不知道当扩展到真实数据而不是示例数据时,代码不能很好地工作吗?
我有一个有点大的数据集,具有以下特征。
str(T0_satData_reduced)
'data.frame': 45537 obs. of 5 variables:
$ date : POSIXct, format: "2014-11-17 08:47:35" "2014-11-17 08:47:36" "2014-11-17 08:47:37" ...
$ trial : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
$ vial : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
$ O2sat : num 95.1 95.1 95.1 95.1 95 95.1 95.1 95.2 95.1 95 ...
$ elapsed: num 20 20 20.1 20.1 20.1 ...
上一个问题涉及应用滚动回归O2sat
作为 的函数的愿望,但按因子和elapsed
对回归进行分组。trial
vial
以下代码摘自我上一个问题的答案(仅针对完整数据集进行修改,而不是练习)
rolled <- function(df) {
rollapplyr(df, width = 600, function(m) {
coef(lm(formula = O2sat ~ elapsed, data = as.data.frame(m)))
}, by = 60, by.column = FALSE)
}
T0_slopes <- ddply(T0_satData_reduced, .(trial,vial), function(d) rolled(d))
但是,当我运行此代码时,我会收到一系列错误或警告(这里是前两个)。
Warning messages:
1: In model.response(mf, "numeric") :
using type = "numeric" with a factor response will be ignored
2: In Ops.factor(y, z$residuals) : - not meaningful for factors
我不确定这个错误来自哪里,因为我已经展示了两者elapsed
并且O2sat
是数字,所以我没有回归因素。但是,如果我在上面的函数中强制它们都是数字rolled
,就像这样。
...
coef(lm(formula = as.numeric(O2sat) ~ as.numeric(elapsed), data = as.data.frame(m)))
...
我不再收到错误,但是,我不知道为什么这会解决错误。此外,由此产生的回归似乎是可疑的,因为截距项似乎太小了。
关于我为什么会收到这些错误以及为什么使用as.numeric
似乎可以消除错误(如果可能仍然提供不适当的回归项)的任何想法?
谢谢