我使用不同的来源编写了一个小函数,该函数创建了一个表,该表包含线性回归模型后根据组变量“集群”聚集的标准误差,t统计量和标准误差。代码如下
cl1 <- function(modl,clust) {
# model is the regression model
# clust is the clustervariable
# id is a unique identifier in ids
library(plm)
library(lmtest)
# Get Formula
form <- formula(modl$call)
# Get Data frame
dat <- eval(modl$call$data)
dat$row <- rownames(dat)
dat$id <- ave(dat$row, dat[[deparse(substitute(clust))]], FUN =seq_along)
pdat <- pdata.frame(dat,
index=c("id", deparse(substitute(clust)))
, drop.index= F, row.names= T)
# # Regression
reg <- plm(form, data=pdat, model="pooling")
# # Adjustments
G <- length(unique(dat[, deparse(substitute(clust))]))
N <- length(dat[,deparse(substitute(clust))])
# # Resid degrees of freedom, adjusted
dfa <- (G/(G-1))*(N-1)/reg$df.residual
d.vcov <- dfa* vcovHC(reg, type="HC0", cluster="group", adjust=T)
table <- coeftest(reg, vcov=d.vcov)
# # Output: se, t-stat and p-val
cl1out <- data.frame(table[, 2:4])
names(cl1out) <- c("se", "tstat", "pval")
# # Cluster VCE
return(cl1out)
}
对于像这样的回归reg1 <- lm (y ~ x1 + x2 , data= df)
,调用函数cl1(reg1, cluster)
就可以了。
但是,如果我使用的模型reg2 <- lm(y ~ . , data=df)
,则会收到错误消息:
Error in terms.formula(object) : '.' in formula and no 'data' argument
经过一些测试,我猜测我不能使用“。” 为{plm}发出信号“使用数据帧中的所有变量”。我可以用{plm}做到这一点吗?否则,关于如何不使用{plm}并接受线性模型的所有可能规格的方式改善功能的任何想法吗?
实际上,您不能.
在plm
pacakge中为公式使用符号。
data("Produc", package = "plm")
plm(gsp ~ .,data=Produc)
Error in terms.formula(object) : '.' in formula and no 'data' argument
一个想法是当您拥有一个时扩展公式.
。这是完成此任务的自定义函数(肯定在其他软件包中完成):
expand_formula <-
function(form="A ~.",varNames=c("A","B","C")){
has_dot <- any(grepl('.',form,fixed=TRUE))
if(has_dot){
ii <- intersect(as.character(as.formula(form)),
varNames)
varNames <- varNames[!grepl(paste0(ii,collapse='|'),varNames)]
exp <- paste0(varNames,collapse='+')
as.formula(gsub('.',exp,form,fixed=TRUE))
}
else as.formula(form)
}
现在测试一下:
(eform = expand_formula("gsp ~ .",names(Produc)))
# gsp ~ state + year + pcap + hwy + water + util + pc + emp + unemp
plm(eform,data=Produc)
# Model Formula: gsp ~ state + year + pcap + hwy + water + util + pc + emp + unemp
# <environment: 0x0000000014c3f3c0>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句