zoo:rollapply() 上的 lm() 给出奇怪的结果
lm() on zoo:rollapply() gives odd result
我有一些数据:
> xt2
# A tibble: 5 x 3
# Groups: symbol [1]
symbol wavgd1 rowNo
<chr> <dbl> <int>
1 REGI 4.84 2220
2 REGI 0.493 2221
3 REGI -0.0890 2222
4 REGI 0.190 2223
5 REGI -1.93 2224
当我用 lm() 处理它时:
xt2t = lm( formula=wavgd1~rowNo, data=as.data.frame(xt2) )
给出了预期的结果(fitted.values[5]是这里的测试):
> summary(xt2t)
Call:
lm(formula = wavgd1 ~ rowNo, data = as.data.frame(xt2))
Residuals:
1 2 3 4 5
1.3723 -1.5937 -0.7907 0.8733 0.1388
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3078.1707 979.5475 3.142 0.0516 .
rowNo -1.3850 0.4408 -3.142 0.0516 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.394 on 3 degrees of freedom
Multiple R-squared: 0.7669, Adjusted R-squared: 0.6892
F-statistic: 9.87 on 1 and 3 DF, p-value: 0.05159
但是当我使用 rollapply 处理它时:
xl = zoo::rollapply(xt2,
width=5,
FUN = function(Z)
{
print( as.data.frame(Z) )
t = lm( formula=wavgd1~rowNo, data=as.data.frame(Z) )
print( summary(t) )
return( t$fitted.values[[5]] )
},
by.column=FALSE,
align="right",
fill=NA)
它returns我的输入数据:
[1] NA NA NA NA -1.929501
Call:
lm(formula = wavgd1 ~ rowNo, data = as.data.frame(Z))
Residuals:
ALL 5 residuals are 0: no residual degrees of freedom!
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.844 NA NA NA
rowNo2221 -4.351 NA NA NA
rowNo2222 -4.933 NA NA NA
rowNo2223 -4.654 NA NA NA
rowNo2224 -6.773 NA NA NA
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: NaN
F-statistic: NaN on 4 and 0 DF, p-value: NA
在 rollapply() 案例中,每一行似乎都作为一个单独的案例处理,而不是整体处理?
不知道为什么 rollapply() 在这里很任性,但我改用 slide:: 一切都很好:
f5 = function(x) {
r = lm( formula=wavgd1~rowNo, x )
return( r$fitted.values[[length(r$fitted.values)]] )
}
mutate( xt, rval=slide_dbl(xt, ~f5(.x), .before = 4, .complete=TRUE) )
我有一些数据:
> xt2
# A tibble: 5 x 3
# Groups: symbol [1]
symbol wavgd1 rowNo
<chr> <dbl> <int>
1 REGI 4.84 2220
2 REGI 0.493 2221
3 REGI -0.0890 2222
4 REGI 0.190 2223
5 REGI -1.93 2224
当我用 lm() 处理它时:
xt2t = lm( formula=wavgd1~rowNo, data=as.data.frame(xt2) )
给出了预期的结果(fitted.values[5]是这里的测试):
> summary(xt2t)
Call:
lm(formula = wavgd1 ~ rowNo, data = as.data.frame(xt2))
Residuals:
1 2 3 4 5
1.3723 -1.5937 -0.7907 0.8733 0.1388
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3078.1707 979.5475 3.142 0.0516 .
rowNo -1.3850 0.4408 -3.142 0.0516 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.394 on 3 degrees of freedom
Multiple R-squared: 0.7669, Adjusted R-squared: 0.6892
F-statistic: 9.87 on 1 and 3 DF, p-value: 0.05159
但是当我使用 rollapply 处理它时:
xl = zoo::rollapply(xt2,
width=5,
FUN = function(Z)
{
print( as.data.frame(Z) )
t = lm( formula=wavgd1~rowNo, data=as.data.frame(Z) )
print( summary(t) )
return( t$fitted.values[[5]] )
},
by.column=FALSE,
align="right",
fill=NA)
它returns我的输入数据:
[1] NA NA NA NA -1.929501
Call:
lm(formula = wavgd1 ~ rowNo, data = as.data.frame(Z))
Residuals:
ALL 5 residuals are 0: no residual degrees of freedom!
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.844 NA NA NA
rowNo2221 -4.351 NA NA NA
rowNo2222 -4.933 NA NA NA
rowNo2223 -4.654 NA NA NA
rowNo2224 -6.773 NA NA NA
Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: NaN
F-statistic: NaN on 4 and 0 DF, p-value: NA
在 rollapply() 案例中,每一行似乎都作为一个单独的案例处理,而不是整体处理?
不知道为什么 rollapply() 在这里很任性,但我改用 slide:: 一切都很好:
f5 = function(x) {
r = lm( formula=wavgd1~rowNo, x )
return( r$fitted.values[[length(r$fitted.values)]] )
}
mutate( xt, rval=slide_dbl(xt, ~f5(.x), .before = 4, .complete=TRUE) )