当我想在像plm这样的回归命令中指定我自己的强大标准错误时,如何在不运行多个函数的情况下直接执行此操作?
library("plm")
library("lmtest")
Data <- iris
Data$time <- as.numeric(rep(1951:2000,3))
这是我将在plm中运行的内容:
regression <- plm(Sepal.Length ~ Sepal.Width + Petal.Length,
data = Data,
index = c("Species", "time"),
model = "within",
effect = "twoways")
现在说我喜欢在个体(物种层面)聚集的协方差矩阵:
results <- coeftest(regression,vcov=vcovHC(regression,type="HC0",cluster="group"))
我的问题是我如何直接在plm
中包含这些标准错误,而不必先运行它。这不是什么大问题,因为协方差矩阵无论如何都是在一个单独的步骤中计算出来的,但会感觉更优雅。
答案 0 :(得分:2)
在plm-world中,协方差矩阵总是作为附加参数传递,例如:到regression$vcov <- vcovHC(regression, type="HC0", cluster="group")
。但您可以尝试以下方法:
在plm对象中,覆盖已存在的vcov:
summary.plm
但是,如果稍后将各种函数应用于plm对象,则无法保证不会破坏其他任何内容。
您可能还想查看由summary.plm
创建的res <- summary(regression, vcov = vcovHC(regression, type="HC0", cluster="group"))
对象,例如
?summary.plm
此外,您可能希望查看vcov
(doc for summary.plm)如何将summary
函数传递给{{1}}(上面的示例传递函数创建的矩阵)
答案 1 :(得分:1)
如果这是一个关于优雅的问题,请尝试使用dplyr
,(或pipeR
或magrittr
)包来获取“&#39; pipe&#39;运营商。撰写functionA(functionB((x)
或
y <- functionB(x)
z <- functionA(y)
你可以使用一个很好的选择:
z <- x %>% functionB %>% functionA
在您的情况下,这将使:
results <-
plm(Sepal.Length ~ Sepal.Width + Petal.Length,
data = Data,
index = c("Species", "time"),
model = "within",
effect = "twoways") %>%
coeftest(., vcov=vcovHC(.,type="HC0",cluster="group"))
您使用.
明确标记您正在输入%>%
管道运营商之前的内容。