我首先使用lm
,然后使用dynlm
(来自包dynlm
)进行了回归。这是我所做的lm
:
Euribor3t <- ts(diff(Euribor3))
OIS3t <- ts(diff(Ois3))
x <- ts(diff(Eurepo3-Ois3))
Vstoxxt <- ts(diff(Vstoxx))
CDSt <- ts(diff(CDS))
omo2 <- ts(diff(log(Open.Market.Operations)))
l1 <- (lag(Euribor3t, k=-1))
axx <- ts.intersect(Euribor3t, OIS3t, x, Vstoxxt, CDSt, omo2, l1)
reg1 <- lm(Euribor3t~OIS3t+CDSt+x+Vstoxxt+omo2+l1, data=axx)
summary(reg1)
和为dynlm
:
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Eurepo3-Ois3)+d(Vstoxx)+d(log(Open.Market.Operations))+d(L(Euribor3, 1)), data=zooX)
summary(lmx)
这两种方法给我完全相同的输出。但是,如果我在从1到24的两个回归中都添加了一个子集(所有其他条件都相等):
Euribor3t <- ts(diff(Euribor3))
OIS3t <- ts(diff(Ois3))
x <- ts(diff(Eurepo3-Ois3))
Vstoxxt <- ts(diff(Vstoxx))
CDSt <- ts(diff(CDS))
omo2 <- ts(diff(log(Open.Market.Operations)))
l1 <- (lag(Euribor3t, k=-1))
axx <- ts.intersect(Euribor3t, OIS3t, x, Vstoxxt, CDSt, omo2, l1)
reg1 <- lm(Euribor3t~OIS3t+CDSt+x+Vstoxxt+omo2+l1, data=axx, subset=1:24)
summary(reg1)
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Eurepo3-Ois3)+d(Vstoxx)+d(log(Open.Market.Operations))+d(L(Euribor3, 1)), data=zooX[1:24])
summary(lmx)
两个输出互不相同。导致我的回归输出出现偏差的问题可能是什么?
这是我尝试过的数据样本:
Date Euribor3 Ois3 Eurepo3 Vstoxx CDS Open.Market.Operations
1 03.01.2005 2.154 2.089 2.09 14.47 17.938 344999
2 04.01.2005 2.151 2.084 2.09 14.51 17.886 344999
3 05.01.2005 2.151 2.087 2.08 14.42 17.950 333998
4 06.01.2005 2.150 2.085 2.08 13.80 17.950 333998
5 07.01.2005 2.146 2.086 2.08 13.57 17.913 333998
6 10.01.2005 2.146 2.087 2.08 12.92 17.958 333998
7 11.01.2005 2.146 2.089 2.08 13.68 17.962 333998
8 12.01.2005 2.145 2.085 2.08 14.05 17.886 339999
9 13.01.2005 2.144 2.084 2.08 13.64 17.568 339999
10 14.01.2005 2.144 2.085 2.08 13.57 17.471 339999
11 17.01.2005 2.143 2.085 2.08 13.20 17.365 339999
12 18.01.2005 2.144 2.085 2.08 13.17 17.214 347999
13 19.01.2005 2.143 2.086 2.08 13.63 17.143 354499
14 20.01.2005 2.144 2.087 2.08 14.17 17.125 354499
15 21.01.2005 2.143 2.087 2.08 13.96 17.193 354499
16 24.01.2005 2.143 2.086 2.08 14.11 17.283 354499
17 25.01.2005 2.144 2.086 2.08 13.63 17.083 354499
18 26.01.2005 2.143 2.086 2.08 13.32 17.348 347999
19 27.01.2005 2.144 2.085 2.08 12.46 17.295 352998
20 28.01.2005 2.144 2.084 2.08 12.81 17.219 352998
21 31.01.2005 2.142 2.084 2.08 12.72 17.143 352998
22 01.02.2005 2.142 2.083 2.08 12.36 17.125 352998
23 02.02.2005 2.141 2.083 2.08 12.25 17.000 357499
24 03.02.2005 2.144 2.088 2.08 12.38 16.808 357499
25 04.02.2005 2.142 2.084 2.08 11.60 16.817 357499
26 07.02.2005 2.142 2.084 2.08 11.99 16.798 359999
27 08.02.2005 2.141 2.083 2.08 11.92 16.804 355500
28 09.02.2005 2.142 2.080 2.08 12.19 16.589 355500
29 10.02.2005 2.140 2.080 2.08 12.04 16.500 355500
30 11.02.2005 2.140 2.078 2.08 11.99 16.429 355500
31 14.02.2005 2.139 2.078 2.08 12.52 16.042 355500
您不允许dynlm
使用与中相同数量的数据lm
。后一个模型包含较少的两个观测值。
dim(model.frame(reg1))
# [1] 24 7
dim(model.frame(lmx))
# [1] 22 7
原因是lm
您要使用整个数据集(31个观测值)来转换变量(差分),而dynlm
您只传递24个观测值,因此dynlm
将对24个观测值进行差分。由于差异之后丢失了观测值,因此两种情况下所得的行数都不相同。
在dylm
你应该使用data=zooX[1:26]
。这样,使用相同的子集并获得相同的结果:
reg1 <- lm(Euribor3t~OIS3t+CDSt+x+Vstoxxt+omo2+l1, data=axx, subset=1:24)
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Eurepo3-Ois3)+d(Vstoxx)+
d(log(Open.Market.Operations))+d(L(Euribor3, 1)), data=zooX[1:26])
all.equal(as.vector(fitted(reg1)), as.vector(fitted(lmx)))
# [1] TRUE
all.equal(coef(reg1), coef(lmx), check.attributes=FALSE)
# [1] TRUE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句