在下面的例子中,我使用vcovHC选项为标准线性模型生成稳健的标准误差。在同一个例子中,我尝试使用Fstats()函数生成具有稳健标准误差的F统计量的分布。问题是Fstats内部使用了vcovHC,如下面代码的最后一行所示(我从Fstats函数中提取)。
else {
allX <- cbind(X1, matrix(rep(0, point[i]*k), ncol=k))
allX <- rbind(allX, cbind(X2, X2))
fm2 <- lm(y ~ 0 + allX)
beta2 <- coef(fm2)[-(1:k)]
V <- vcov.(fm2)
我不知道如何在使用Fstats()函数时指定vcovHC选项。我所做的尝试(见下文)不起作用。谢谢你的帮助。
rm(list = ls())
>
> library(lmtest)
> library(sandwich)
> library(strucchange)
>
> y <- as.ts(c(4,3,-2,1,-4,0,1,-2,-3,2,0,1,-2,2,4,1,3,5,2,2,3,4))
> X <- as.ts(rep(1,22))
>
> # lm model with robust standard errors
> model<- lm(y ~ X - 1)
> coeftest(model, vcov = vcovHC(model, type = "HC0"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
X 1.13636 0.51545 2.2046 0.03877 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> # Fstats model with regular standard errors
> model2 <- Fstats(y ~ X - 1, from = 3, to = 18)
> model2$Fstats
Time Series:
Start = 3
End = 18
Frequency = 1
[1] 0.1530982 0.1010540 0.5609994 0.8631524 0.8332749 2.2221599 5.5956726
[8] 4.5129612 5.6715064 5.8951319 11.4357216 10.2821317 6.1921347 7.1910292
[15] 5.4546513 2.1974238
>
# Fstats model with robust standard errors
> model3 <- Fstats(y ~ X - 1, from = 3, to = 18, vcovHC(.,type = "HC0"))
Error in vcovHC(., type = "HC0") : object '.' not found
1条答案
按热度按时间9lowa7mx1#
Fstats()
中的vcov
参数需要是一个函数(参见?Fstats
),因为它必须应用于拟合数据子集的不同线性模型的整个范围。这与coeftest()
相反,coeftest()
中的vcov
参数可以是一个函数,也可以是一个矩阵,因为它只与一个单一模型组合。在
durab
数据集中有一个示例,提供了工业生产指数的增长率与制造业/耐用品部门每周平均劳动时间的比值,该示例取自汉森(2001),使用了一个简单的AR(1)模型:还应注意,对于经典的HC三明治估计量,可以使用
sandwich()
而不是vcovHC(..., type = "HC0")
。因此,在上面的代码中使用vcov = sandwich
比动态设置新函数更简单。