【问题标题】:R: Rollapply lm regression on zoo matrix objectsR:在动物园矩阵对象上滚动应用 lm 回归
【发布时间】:2013-07-24 10:07:08
【问题描述】:

我想使用 lm 对单个动物园对象内的多对数据系列执行滚动回归。

虽然我可以通过以下代码对动物园对象中的一对数据系列执行滚动回归:

FunLm <- function(x,Param,Days) coef(lm(AAA ~ Z, data = as.data.frame(x), weights=Param*(seq(Days,1,by=-1))))
DataLmCoef <- rollapplyr(Data, Days, FunLm, Param, Days, by.column = FALSE)

具有这种结构的动物园:

                Z   AAA
2012-07-01      1   853
2012-07-04      2   864
2012-07-05      3   865
2012-07-06      4   873
2012-07-07      5   870
2012-07-08      6   874

我的问题是,如果我有以下动物园对象:

                Z   AAA BBB CCC
2012-07-01      1   853 123 65
2012-07-04      2   864 124 62
2012-07-05      3   865 126 63
2012-07-06      4   873 120 66
2012-07-07      5   870 121 68
2012-07-08      6   874 123 69

在不使用循环的情况下,如何在 Z~AAA、Z~BBB、Z~CCC、Z~DDD、...上进行类似的滚动回归,并获得两个动物园矩阵对象,一个存储截距,另一个存储斜率?

【问题讨论】:

    标签: r zoo


    【解决方案1】:

    rollapplyman page为例

    您可以在滚动功能中添加多个测试 例如

    > seat <- as.zoo(log(UKDriverDeaths))
    > time(seat) <- as.yearmon(time(seat))
    > seat <- merge(y = seat, y1 = lag(seat, k = -1),
      y12 = lag(seat, k = -12), all = FALSE)
    > fm <- rollapply(seat, width = 36,
      FUN = function(z) 
        data.frame(
            test1 = t(coef(lm(y ~ y1 + y12, data = as.data.frame(z)))),
            test3 = t(coef(lm(y ~ y12, data = as.data.frame(z))))
            ) , 
      by.column = FALSE, align = "right")
    

    结果

    > head(fm)
             test1..Intercept.   test1.y1 test1.y12 test3..Intercept. test3.y12
    דצמ 1972         0.9629793 0.15344243 0.7240740          1.530598 0.8026003
    ינו 1973         1.1336058 0.13920023 0.7155899          1.570067 0.7973688
    פבר 1973         0.9978077 0.14346100 0.7293183          1.440635 0.8145803
    מרץ 1973         0.9879002 0.12929214 0.7442218          1.375245 0.8226257
    אפר 1973         1.2281307 0.11700612 0.7250115          1.545356 0.8003661
    מאי 1973         1.4483700 0.08860055 0.7245032          1.706343 0.7792279
    

    【讨论】:

    • 感谢 haki,我必须对许多对(Z~AAA、Z~BBB、Z~CCC、...)进行回归,而不是在每一对上输入回归,这在我的情况,因为我有一千多对,有没有办法在不使用循环的情况下做到这一点?
    猜你喜欢
    • 2012-01-12
    • 2019-07-14
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多