R:使用 dynlm 处理子集
R: Handling subsets using dynlm
我想使用 R 计算以下两个回归:
library("dynlm")
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Vstoxx)+d(log(omo))+d(L(Euribor3, 1)), data=zooX[1:16])
summary(lmx)
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Vstoxx)+d(log(omo))+d(L(Euribor3, 1)), data=zooX[17:31])
summary(lmx)
这两个模型之间的唯一区别是子集(第一个 [1:16] 和第二个 [17:31])。现在这两个模型给我以下输出:
Time series regression with "zoo" data:
Start = 3, End = 16
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[1:16])
和
Time series regression with "zoo" data:
Start = 19, End = 31
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[17:31])
正如您从输出中看到的(未报告系数、t 值等),第一个模型使用观测值 [3:16](因为变量差分和第一个滞后导致两个丢失因变量)。第二个模型使用 [19:31] 的观察结果(同样丢失了两个观察结果)。由于变量的转换,两个子集之间出现了差距,即第一个模型的 End=16 而第二个模型的 Start=19,这意味着在回归中观察值 17 和 18 不是 "included".现在我的问题是什么更有意义?要么让模型中的子集保持原样,要么将第二个模型的子集移回两个观察值(即 [15:31]),以缩小差距?然后输出将变为:
Time series regression with "zoo" data:
Start = 17, End = 31
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[15:31])
如您所见,第一个模型的 End=16,第二个模型现在的 Start=17。
非常感谢!
这是我的数据集:
Date Euribor3 Ois3 Vstoxx CDS omo
03.01.2005 2.154 2.089 14.47 17.938 344999
04.01.2005 2.151 2.084 14.51 17.886 344999
05.01.2005 2.151 2.087 14.42 17.95 333998
06.01.2005 2.15 2.085 13.8 17.95 333998
07.01.2005 2.146 2.086 13.57 17.913 333998
10.01.2005 2.146 2.087 12.92 17.958 333998
11.01.2005 2.146 2.089 13.68 17.962 333998
12.01.2005 2.145 2.085 14.05 17.886 339999
13.01.2005 2.144 2.084 13.64 17.568 339999
14.01.2005 2.144 2.085 13.57 17.471 339999
17.01.2005 2.143 2.085 13.2 17.365 339999
18.01.2005 2.144 2.085 13.17 17.214 347999
19.01.2005 2.143 2.086 13.63 17.143 354499
20.01.2005 2.144 2.087 14.17 17.125 354499
21.01.2005 2.143 2.087 13.96 17.193 354499
24.01.2005 2.143 2.086 14.11 17.283 354499
25.01.2005 2.144 2.086 13.63 17.083 354499
26.01.2005 2.143 2.086 13.32 17.348 347999
27.01.2005 2.144 2.085 12.46 17.295 352998
28.01.2005 2.144 2.084 12.81 17.219 352998
31.01.2005 2.142 2.084 12.72 17.143 352998
01.02.2005 2.142 2.083 12.36 17.125 352998
02.02.2005 2.141 2.083 12.25 17 357499
03.02.2005 2.144 2.088 12.38 16.808 357499
04.02.2005 2.142 2.084 11.6 16.817 357499
07.02.2005 2.142 2.084 11.99 16.798 359999
08.02.2005 2.141 2.083 11.92 16.804 355500
09.02.2005 2.142 2.08 12.19 16.589 355500
10.02.2005 2.14 2.08 12.04 16.5 355500
11.02.2005 2.14 2.078 11.99 16.429 355500
14.02.2005 2.139 2.078 12.52 16.042 355500
如果您通过 data = zooX[...,]
自己进行子集化,则 dynlm()
看不到完整样本,因此必须丢失两个观察值。如果你提供完整的data = zooX
,然后分别设置end = 14
和start = 15
,那么dynlm()
可以先将完整的模型框架与所有lags/differences等放在一起,并且随后选择所需的子集。在下面的示例中,我这样做了,但使用了您的数据中可用的正确日期索引。
首先,我们将数据读入具有适当 Date
索引的 zoo
系列:
library("dynlm")
zooX <- read.zoo(textConnection("Date Euribor3 Ois3 Vstoxx CDS omo
03.01.2005 2.154 2.089 14.47 17.938 344999
04.01.2005 2.151 2.084 14.51 17.886 344999
05.01.2005 2.151 2.087 14.42 17.95 333998
06.01.2005 2.15 2.085 13.8 17.95 333998
07.01.2005 2.146 2.086 13.57 17.913 333998
10.01.2005 2.146 2.087 12.92 17.958 333998
11.01.2005 2.146 2.089 13.68 17.962 333998
12.01.2005 2.145 2.085 14.05 17.886 339999
13.01.2005 2.144 2.084 13.64 17.568 339999
14.01.2005 2.144 2.085 13.57 17.471 339999
17.01.2005 2.143 2.085 13.2 17.365 339999
18.01.2005 2.144 2.085 13.17 17.214 347999
19.01.2005 2.143 2.086 13.63 17.143 354499
20.01.2005 2.144 2.087 14.17 17.125 354499
21.01.2005 2.143 2.087 13.96 17.193 354499
24.01.2005 2.143 2.086 14.11 17.283 354499
25.01.2005 2.144 2.086 13.63 17.083 354499
26.01.2005 2.143 2.086 13.32 17.348 347999
27.01.2005 2.144 2.085 12.46 17.295 352998
28.01.2005 2.144 2.084 12.81 17.219 352998
31.01.2005 2.142 2.084 12.72 17.143 352998
01.02.2005 2.142 2.083 12.36 17.125 352998
02.02.2005 2.141 2.083 12.25 17 357499
03.02.2005 2.144 2.088 12.38 16.808 357499
04.02.2005 2.142 2.084 11.6 16.817 357499
07.02.2005 2.142 2.084 11.99 16.798 359999
08.02.2005 2.141 2.083 11.92 16.804 355500
09.02.2005 2.142 2.08 12.19 16.589 355500
10.02.2005 2.14 2.08 12.04 16.5 355500
11.02.2005 2.14 2.078 11.99 16.429 355500
14.02.2005 2.139 2.078 12.52 16.042 355500
"), header = TRUE, format = "%d.%m.%Y")
然后,我们select中间观察的时间索引。您可以手动执行此操作,也可以根据 zooX
系列执行此操作:
mid <- as.Date("2005-01-24")
mid <- time(zooX)[ceiling(nrow(zooX)/2)]
无论哪种情况,mid
现在都表示中间时间索引 2005-01-24。然后我们可以设置我们的模型:
f <- d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) + d(log(omo)) + d(L(Euribor3))
m1 <- dynlm(f, data = zooX, end = mid)
m2 <- dynlm(f, data = zooX, start = mid + 1)
第一个现在运行到 2005-01-24:
Time series regression with "zoo" data:
Start = 2005-01-05, End = 2005-01-24
Call:
dynlm(formula = f, data = zooX, end = mid)
Coefficients:
(Intercept) d(Ois3) d(CDS) d(Vstoxx) d(log(omo))
-0.0008859 -0.0125676 0.0001073 0.0012116 0.0124502
d(L(Euribor3))
-0.4217354
第二个开始于 2005-01-25:
Time series regression with "zoo" data:
Start = 2005-01-25, End = 2005-02-14
Call:
dynlm(formula = f, data = zooX, start = mid + 1)
Coefficients:
(Intercept) d(Ois3) d(CDS) d(Vstoxx) d(log(omo))
-0.0005556 0.2565964 -0.0027670 -0.0009140 -0.0152427
d(L(Euribor3))
-0.5143080
但是,我不确定我是否会建议将具有 6 个回归系数的模型拟合到仅 14 或 15 个观测值...
我想使用 R 计算以下两个回归:
library("dynlm")
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Vstoxx)+d(log(omo))+d(L(Euribor3, 1)), data=zooX[1:16])
summary(lmx)
zooX = zoo(test[, -1])
lmx <- dynlm(d(Euribor3)~d(Ois3)+d(CDS)+d(Vstoxx)+d(log(omo))+d(L(Euribor3, 1)), data=zooX[17:31])
summary(lmx)
这两个模型之间的唯一区别是子集(第一个 [1:16] 和第二个 [17:31])。现在这两个模型给我以下输出:
Time series regression with "zoo" data:
Start = 3, End = 16
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[1:16])
和
Time series regression with "zoo" data:
Start = 19, End = 31
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[17:31])
正如您从输出中看到的(未报告系数、t 值等),第一个模型使用观测值 [3:16](因为变量差分和第一个滞后导致两个丢失因变量)。第二个模型使用 [19:31] 的观察结果(同样丢失了两个观察结果)。由于变量的转换,两个子集之间出现了差距,即第一个模型的 End=16 而第二个模型的 Start=19,这意味着在回归中观察值 17 和 18 不是 "included".现在我的问题是什么更有意义?要么让模型中的子集保持原样,要么将第二个模型的子集移回两个观察值(即 [15:31]),以缩小差距?然后输出将变为:
Time series regression with "zoo" data:
Start = 17, End = 31
Call:
dynlm(formula = d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) +
d(log(omo)) + d(L(Euribor3, 1)), data = zooX[15:31])
如您所见,第一个模型的 End=16,第二个模型现在的 Start=17。 非常感谢!
这是我的数据集:
Date Euribor3 Ois3 Vstoxx CDS omo
03.01.2005 2.154 2.089 14.47 17.938 344999
04.01.2005 2.151 2.084 14.51 17.886 344999
05.01.2005 2.151 2.087 14.42 17.95 333998
06.01.2005 2.15 2.085 13.8 17.95 333998
07.01.2005 2.146 2.086 13.57 17.913 333998
10.01.2005 2.146 2.087 12.92 17.958 333998
11.01.2005 2.146 2.089 13.68 17.962 333998
12.01.2005 2.145 2.085 14.05 17.886 339999
13.01.2005 2.144 2.084 13.64 17.568 339999
14.01.2005 2.144 2.085 13.57 17.471 339999
17.01.2005 2.143 2.085 13.2 17.365 339999
18.01.2005 2.144 2.085 13.17 17.214 347999
19.01.2005 2.143 2.086 13.63 17.143 354499
20.01.2005 2.144 2.087 14.17 17.125 354499
21.01.2005 2.143 2.087 13.96 17.193 354499
24.01.2005 2.143 2.086 14.11 17.283 354499
25.01.2005 2.144 2.086 13.63 17.083 354499
26.01.2005 2.143 2.086 13.32 17.348 347999
27.01.2005 2.144 2.085 12.46 17.295 352998
28.01.2005 2.144 2.084 12.81 17.219 352998
31.01.2005 2.142 2.084 12.72 17.143 352998
01.02.2005 2.142 2.083 12.36 17.125 352998
02.02.2005 2.141 2.083 12.25 17 357499
03.02.2005 2.144 2.088 12.38 16.808 357499
04.02.2005 2.142 2.084 11.6 16.817 357499
07.02.2005 2.142 2.084 11.99 16.798 359999
08.02.2005 2.141 2.083 11.92 16.804 355500
09.02.2005 2.142 2.08 12.19 16.589 355500
10.02.2005 2.14 2.08 12.04 16.5 355500
11.02.2005 2.14 2.078 11.99 16.429 355500
14.02.2005 2.139 2.078 12.52 16.042 355500
如果您通过 data = zooX[...,]
自己进行子集化,则 dynlm()
看不到完整样本,因此必须丢失两个观察值。如果你提供完整的data = zooX
,然后分别设置end = 14
和start = 15
,那么dynlm()
可以先将完整的模型框架与所有lags/differences等放在一起,并且随后选择所需的子集。在下面的示例中,我这样做了,但使用了您的数据中可用的正确日期索引。
首先,我们将数据读入具有适当 Date
索引的 zoo
系列:
library("dynlm")
zooX <- read.zoo(textConnection("Date Euribor3 Ois3 Vstoxx CDS omo
03.01.2005 2.154 2.089 14.47 17.938 344999
04.01.2005 2.151 2.084 14.51 17.886 344999
05.01.2005 2.151 2.087 14.42 17.95 333998
06.01.2005 2.15 2.085 13.8 17.95 333998
07.01.2005 2.146 2.086 13.57 17.913 333998
10.01.2005 2.146 2.087 12.92 17.958 333998
11.01.2005 2.146 2.089 13.68 17.962 333998
12.01.2005 2.145 2.085 14.05 17.886 339999
13.01.2005 2.144 2.084 13.64 17.568 339999
14.01.2005 2.144 2.085 13.57 17.471 339999
17.01.2005 2.143 2.085 13.2 17.365 339999
18.01.2005 2.144 2.085 13.17 17.214 347999
19.01.2005 2.143 2.086 13.63 17.143 354499
20.01.2005 2.144 2.087 14.17 17.125 354499
21.01.2005 2.143 2.087 13.96 17.193 354499
24.01.2005 2.143 2.086 14.11 17.283 354499
25.01.2005 2.144 2.086 13.63 17.083 354499
26.01.2005 2.143 2.086 13.32 17.348 347999
27.01.2005 2.144 2.085 12.46 17.295 352998
28.01.2005 2.144 2.084 12.81 17.219 352998
31.01.2005 2.142 2.084 12.72 17.143 352998
01.02.2005 2.142 2.083 12.36 17.125 352998
02.02.2005 2.141 2.083 12.25 17 357499
03.02.2005 2.144 2.088 12.38 16.808 357499
04.02.2005 2.142 2.084 11.6 16.817 357499
07.02.2005 2.142 2.084 11.99 16.798 359999
08.02.2005 2.141 2.083 11.92 16.804 355500
09.02.2005 2.142 2.08 12.19 16.589 355500
10.02.2005 2.14 2.08 12.04 16.5 355500
11.02.2005 2.14 2.078 11.99 16.429 355500
14.02.2005 2.139 2.078 12.52 16.042 355500
"), header = TRUE, format = "%d.%m.%Y")
然后,我们select中间观察的时间索引。您可以手动执行此操作,也可以根据 zooX
系列执行此操作:
mid <- as.Date("2005-01-24")
mid <- time(zooX)[ceiling(nrow(zooX)/2)]
无论哪种情况,mid
现在都表示中间时间索引 2005-01-24。然后我们可以设置我们的模型:
f <- d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) + d(log(omo)) + d(L(Euribor3))
m1 <- dynlm(f, data = zooX, end = mid)
m2 <- dynlm(f, data = zooX, start = mid + 1)
第一个现在运行到 2005-01-24:
Time series regression with "zoo" data:
Start = 2005-01-05, End = 2005-01-24
Call:
dynlm(formula = f, data = zooX, end = mid)
Coefficients:
(Intercept) d(Ois3) d(CDS) d(Vstoxx) d(log(omo))
-0.0008859 -0.0125676 0.0001073 0.0012116 0.0124502
d(L(Euribor3))
-0.4217354
第二个开始于 2005-01-25:
Time series regression with "zoo" data:
Start = 2005-01-25, End = 2005-02-14
Call:
dynlm(formula = f, data = zooX, start = mid + 1)
Coefficients:
(Intercept) d(Ois3) d(CDS) d(Vstoxx) d(log(omo))
-0.0005556 0.2565964 -0.0027670 -0.0009140 -0.0152427
d(L(Euribor3))
-0.5143080
但是,我不确定我是否会建议将具有 6 个回归系数的模型拟合到仅 14 或 15 个观测值...