さまざまなソースを使用して、線形回帰モデルの後にグループ変数「クラスター」に従ってクラスター化された標準誤差、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} を使用せず、線形モデルのすべての可能な仕様を受け入れる方法で関数を改善する方法についてのアイデアはありますか?