[英]Time Series and Linear Regression
这似乎是一个不寻常的问题,但我真的需要你的帮助。 我对时间序列分析完全陌生,但对 OLS 回归有足够的了解。 首先,我设法将一个对象转换为具有四分之一频率的动物园对象。
na.approx(as.ts(z))
我不明白的是如何使用标准 lm 命令获得“时间序列”回归。 特别是因为当我想使用以下命令时:
lm(z$GDPGROWTH~z$APPROVALGOV)
我无法访问动物园对象(或时间序列对象),因为 $ 参数不起作用。
Fehler in z$GDPGrowth : $ operator is invalid for atomic vectors
所以我不得不求助于使用来自普通数据集对象的变量。 但这不会包含任何时间维度,对吗?
一般来说,我对时间序列以及回归分析如何与时间维度相结合感到非常困惑。 我想得到的分析结果是 GDP 增长与平均共识投票行为(“GDPGrowth”和“AverageCONS”)之间的回归。 我知道这两个变量都是通过时间维度自相关的。 但是,我不知道如何进行适当的时间序列回归。
我会发布一个 dput 和其他复制代码,让你的一切变得更容易。 感谢任何帮助!
> dput(z)
structure(c(1.2, -0.2, -0.15, -0.1, 0.4, 0.333333333333333, 0.266666666666667,
0.2, 0.5, 0.8, 1.1, 1.4, 1.3, 2, 2.7, 0.8, 0.9, 1, 0.8, 0.6,
-0.6, -0.0666666666666667, 0.466666666666667, 1, 1.6, 2.2, 1.9,
1.6, 1.7, 1.8, 1.5, 1.2, 0.8, 0.4, 0.8, 1.2, 2.1, 0.5, 1.15,
1.8, 0.65, -0.5, 0.4, 1.3, 0.3, -0.7, -0.5, -0.3, -0.15, 0, 0.6,
-0.1, 1.4, 0.3, 0.7, 0.2, -0.3, 0.8, 0.2, 0, -0.8, 1.4, 1.05,
0.7, -0.5, 1.3, 1, 0.7, 0.15, -0.4, -0.4, -0.4, 1.2, 0, 0.4,
0.8, 1.4, 0.8, 0, -0.3, 2, 0, -0.2, -0.2, -0.5, 0, 0.5, -0.2,
-1.5, -0.35, 0.8, 0.3, -0.2, 0.5, 0.2, -0.1, 0, 0, 1.17870603993396,
0.589353019966981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.61936244127144,
2.01801455396906, 0.416666666666667, 0, 2.16353957620116, 4.32707915240231,
5.98174400514746, 7.6364088578926, 0.257076257076257, 0.171384171384171,
0.0856920856920857, 0, 11.2103879729705, 22.4207759459411, 15.2347455885415,
8.04871523114194, 11.3521305960255, 14.6555459609091, 15.4403121270985,
16.2250782932878, 8.6979606817534, 1.17084307021898, 3.97895588789713,
6.78706870557528, 0, 0, 4.87695592673415, 9.7539118534683, 4.87695592673415,
0, 0, 0, 0, 0, 0.0201047586252623, 0.0402095172505245, 0.0201047586252623,
0, 0, 0.0636265006342972, 0, 0.171974252305606, 0, 5.57623701563216,
11.1524740312643, 2.68040672020172, 6.2111801242236, 3.24760735460988,
28.2976799963101, 0, 3.7866135488981, 7.5732270977962, 0, 0,
0.747061391598759, 1.49412278319752, 35.8503062293569, 70.2064896755162,
52.105350122636, 34.0042105697558, 18.5823772614653, 18.0896275972026,
13.25206168539, 8.41449577357745, 10, 0, 0, 34.7491138493683,
8.36236933797909, 39.6563615833003, 74.4262295081967, 22.3611248302746,
10, 16.455880420063, 22.911760840126, 0, 0.0666722800439236,
0.0333361400219618, 0, 50.3843726943174, 0, 0, 0.864549845643277,
1.72909969128655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.75,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 7.88127469343306, 7.67671239967451, 7.50492078119126,
7.33312916270801, 7.26681550104175, 7.37045715962304, 7.47409881820433,
7.57774047678561, 7.54440688341081, 7.511073290036, 7.47773969666119,
7.44440610328638, 7.51950710910292, 7.47703037780537, 7.43455364650782,
7.21735906430465, 7.07654252150171, 6.93572597869877, 7.13426907080346,
7.33281216290814, 7.34110311728404, 7.50058012443653, 7.66005713158903,
7.81953413874152, 7.80295976635758, 7.78638539397364, 7.67221491798127,
7.5580444419889, 7.13119115282123, 6.70433786365357, 6.73565901224693,
6.76698016084029, 6.8801068632748, 6.9932335657093, 7.44235686960608,
7.89148017350285, 8.24705859843768, 8.20161269191644, 7.1659119101912,
6.13021112846596, 6.7880423795211, 7.44587363057623, 7.46757903053749,
7.48928443049876, 7.07702561011456, 6.66476678973035, 6.57551271762131,
6.48625864551226, 6.31270117005075, 6.13914369458924, 6.05634679973895,
5.9702909369734, 6.19216550005443, 6.87967122943963, 7.49940214266322,
7.29465702788788, 7.08991191311255, 7.3351806925688, 7.46762039999888,
7.22336518577119, 6.75192112299076, 6.61614229895973, 6.50505157543993,
6.39396085192013, 6.09682321355397, 5.99711627005931, 5.97786567725074,
5.95861508444216, 6.13656719089965, 6.31451929735713, 6.19389219496854,
6.07326509257996, 7.58677238161551, 7.24041796080827, 6.96794618067372,
6.69547440053917, 7.72437292977251, 7.61985191697131, 7.85861327446016,
7.78974162557168, 8.00182694049075, 7.82019060836613, 7.58946475073855,
7.89751118735182, 7.14978411180804, 7.30379876152907, 7.4578134112501,
6.24455242517448, 5.8823776113788, 5.98170501192132, 6.08103241246385,
5.73879250743035, 5.68128370028589, 5.83312282222293, 6.1665241256249,
6.49992542902688, 6.45920800878159), .Dim = c(97L, 4L), .Dimnames = list(
NULL, c("GDPGrowth", "AverageCONS", "BRGOVMEHR", "ApprovalGOV"
)), .Tsp = c(2482, 2506, 4), class = c("mts", "ts", "matrix"
))
“最终”是我想从中进行时间序列分析的整体聚合数据框。
> dput(FINAL)
structure(list(Quarter.y = c(1981.1, 1981.2, 1981.4, 1982.1,
1982.4, 1983.4, 1984.1, 1984.3, 1984.4, 1985.2, 1985.4, 1986.1,
1986.4, 1987.2, 1987.4, 1988.2, 1988.4, 1989.2, 1989.4, 1990.1,
1990.2, 1990.4, 1991.2, 1991.4, 1992.2, 1992.4, 1993.2, 1993.3,
1993.4, 1994.1, 1994.2, 1994.3, 1995.1, 1995.2, 1995.3, 1995.4,
1996.1, 1996.2, 1996.4, 1997.1, 1997.2, 1997.4, 1998.2, 1998.4,
1999.1, 1999.2, 1999.4, 2000.1, 2000.2, 2000.3, 2000.4, 2001.1,
2001.2, 2001.3, 2001.4, 2002.1, 2002.3, 2002.4, 2003.1, 2003.3,
2003.4, 2004.1, 2004.2, 2004.4, 2005.1), GDPGrowth = c(1.2, -0.2,
-0.1, 0.4, 0.2, 1.4, 1.3, 2.7, 0.8, 1, 0.6, -0.6, 1, 2.2, 1.6,
1.8, 1.2, 0.4, 1.2, 2.1, 0.5, 1.8, -0.5, 1.3, -0.7, -0.3, 0,
0.6, -0.1, 1.4, 0.3, 0.7, -0.3, 0.8, 0.2, 0, -0.8, 1.4, 0.7,
-0.5, 1.3, 0.7, -0.4, -0.4, 1.2, 0, 0.8, 1.4, 0.8, 0, -0.3, 2,
0, -0.2, -0.2, -0.5, 0.5, -0.2, -1.5, 0.8, 0.3, -0.2, 0.5, -0.1,
0), AverageCONS = c(0, 1.17870603993396, 0, 0, 0, 0, 3.61936244127144,
0.416666666666667, 0, 4.32707915240231, 7.6364088578926, 0.257076257076257,
0, 22.4207759459411, 8.04871523114194, 14.6555459609091, 16.2250782932878,
1.17084307021898, 6.78706870557528, 0, 0, 9.7539118534683, 0,
0, 0, 0.0402095172505245, 0, 0, 0.0636265006342972, 0, 0.171974252305606,
0, 11.1524740312643, 2.68040672020172, 6.2111801242236, 3.24760735460988,
28.2976799963101, 0, 7.5732270977962, 0, 0, 1.49412278319752,
70.2064896755162, 34.0042105697558, 18.5823772614653, 18.0896275972026,
8.41449577357745, 10, 0, 0, 34.7491138493683, 8.36236933797909,
39.6563615833003, 74.4262295081967, 22.3611248302746, 10, 22.911760840126,
0, 0.0666722800439236, 0, 50.3843726943174, 0, 0, 1.72909969128655,
0), BRGOVMEHR = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0), ApprovalGOV = c(7.88127469343306, 7.67671239967451,
7.33312916270801, 7.26681550104175, 7.57774047678561, 7.44440610328638,
7.51950710910292, 7.43455364650782, 7.21735906430465, 6.93572597869877,
7.33281216290814, 7.34110311728404, 7.81953413874152, 7.78638539397364,
7.5580444419889, 6.70433786365357, 6.76698016084029, 6.9932335657093,
7.89148017350285, 8.24705859843768, 8.20161269191644, 6.13021112846596,
7.44587363057623, 7.48928443049876, 6.66476678973035, 6.48625864551226,
6.13914369458924, 6.05634679973895, 5.9702909369734, 6.19216550005443,
6.87967122943963, 7.49940214266322, 7.08991191311255, 7.3351806925688,
7.46762039999888, 7.22336518577119, 6.75192112299076, 6.61614229895973,
6.39396085192013, 6.09682321355397, 5.99711627005931, 5.95861508444216,
6.31451929735713, 6.07326509257996, 7.58677238161551, 7.24041796080827,
6.69547440053917, 7.72437292977251, 7.61985191697131, 7.85861327446016,
7.78974162557168, 8.00182694049075, 7.82019060836613, 7.58946475073855,
7.89751118735182, 7.14978411180804, 7.4578134112501, 6.24455242517448,
5.8823776113788, 6.08103241246385, 5.73879250743035, 5.68128370028589,
5.83312282222293, 6.49992542902688, 6.45920800878159)), row.names = c(NA,
-65L), class = c("tbl_df", "tbl", "data.frame"))
不能使用$
的原因是问题中显示的z
对象不是动物园对象。 它是一个ts
对象。 您可以使用class(z)
、 str(z)
和dput(z)
来确定您拥有什么。 另外, $
对zoo
对象有效,但对ts
对象无效。 将其转换为zoo
,然后$
将起作用。
library(zoo) zz <- zoo(z, as.yearqtr(time(z))) zz$GDPGrowth ## 2482 Q1 2482 Q2 2482 Q3 2482 Q4 2483 Q1 2483 Q2 ## 1.20000000 -0.20000000 -0.15000000 -0.10000000 0.40000000 0.33333333 ## 2483 Q3 2483 Q4 2484 Q1 2484 Q2 2484 Q3 2484 Q4 ## 0.26666667 0.20000000 0.50000000 0.80000000 1.10000000 1.40000000 ## # ... snip ...
您对象中的时间是未来,但除非我们知道您是如何创建它们的,否则我们无法知道那是如何发生的。 您可能正在使用Date
对象并在将它们转换为ts
犯了一些错误。
您有季度数据,0、0.25、0.5 和 0.75 是ts
对象在内部表示 4 个季度的方式。 如果这是指不想将na.approx
应用于某些列,那么如果ix
是要转换的列名或数字的向量,则zz[, ix] <- na.approx(zz[, ix])
应用na.approx
只到那些列。
ts
和zoo
经由代表索引tsp
和index
所以它们仍然存在分别属性。 time(z)
和time(zz)
将检索索引。
如果要进行统计检验、计算置信区间等,则需要考虑相关性; 但是,如果您只想获得点估计值,则无需担心。 dyn 包(也是 dynlm 包)可用于促进lm
与 zoo 对象一起运行。
library(dyn) fm <- dyn$lm(GDPGrowth ~ ApprovalGOV, zz) fm ## Call: ## lm(formula = dyn(GDPGrowth ~ ApprovalGOV), data = zz) ## ## Coefficients: ## (Intercept) ApprovalGOV ## -1.9717 0.3575
它们中的任何一个也可以使用with.zoo
和fortify.zoo
。
with(zz, lm(GDPGrowth ~ ApprovalGOV)) lm(GDPGrowth ~ ApprovalGOV, fortify.zoo(zz))
要绘制点并绘制回归线:
plot(formula(fm), zz) abline(fm)
其他要点是:
R是大小写敏感所以GDPGrowth
是不一样的GDPGROWTH
。
不要在没有首先阅读所使用的每个函数的帮助文件的情况下使用您在网上找到的随机代码片段,以便您知道它是否对您的问题有意义。 还要阅读您正在使用的每个包的所有小插图(pdf 或 html 文档)。 特别是,动物园包有 5 个小插曲和一个参考手册。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.