我正在尝试创建一个能够提供集群稳健标准错误的函数。 我已经安装了一个模型
gnuplot> s = sprintf("%.1g", 0.00230354); print s
0.002
gnuplot> s = sprintf("%.1g", 0.000000230354); print s
2e-07
gnuplot> s = sprintf("%.1g", 0.000000260354); print s
3e-07
并且没有将以下语句包含在我设法运行的函数中
library(readstata13)
library(multiwayvcov)
library(lmtest)
df = read.dta13("http://www.stata-press.com/data/r13/auto.dta")
fit= lm(price ~ mpg + rep78 + weight + factor(foreign) , data= df)
但是,当我尝试将它放在一个函数中时,它不再起作用了!为什么呢?
#this one works
a<-cluster.vcov(fit, ~ foreign)
coeftest(fit, a)
我得到的错误是
eval中的错误(predvars,data,env):找不到对象'clusterby'
答案 0 :(得分:2)
因为它试图找到clusterby
而不是foreign
。您可以使用substitute
和eval
来执行此操作。你可以在你的函数中做这样的事情:
clu<- function(fitmodel,clusterby ) {
require(multiwayvcov, quietly = TRUE)
require(lmtest, quietly = TRUE)
a <- eval(substitute(cluster.vcov(fitmodel, ~ i), list(i = as.name(clusterby))))
# a<-cluster.vcov(fitmodel, ~ clusterby)
coeftest(fitmodel, a)
}
此外,由于foreign
不是对象,因此您的函数调用应如下所示:
clu(fit,"foreign")