線形モデルのリストを反復処理し、関数を使用して各モデルに「クラスター化された」標準誤差を適用したいと考えていvcovCL
ます。私の目標は、これを可能な限り効率的に行うことです (データフレームの多くの列で線形モデルを実行しています)。私の問題は、無名関数内で追加の引数を指定しようとしていることです。以下に、いくつかの偽のデータをシミュレートします。境内は私の横断的な次元を表しています。月は私の時間ディメンションを表します (4 か月間で 5 単位が観察されます)。変数int
は、いつ介入が行われるかについてのダミーです。
df <- data.frame(
precinct = c( rep(1, 4), rep(2, 4), rep(3, 4), rep(4, 4), rep(5, 4) ),
month = rep(1:4, 5),
crime = rnorm(20, 10, 5),
int = c(c(0, 1, 1, 0), rep(0, 4), rep(0, 4), c(1, 1, 1, 0), rep(0, 4))
)
df[1:10, ]
outcome <- df[3]
est <- lapply(outcome, FUN = function(x) { lm(x ~ as.factor(precinct) + as.factor(month) + int, data = df) })
se <- lapply(est, function(x) { sqrt(diag(vcovCL(x, cluster = ~ precinct + month))) })
cluster
関数内に引数を追加すると、次のエラー メッセージが表示されvcovCL
ます。
Error in eval(expr, envir, enclos) : object 'x' not found
私の推定では、それを回避する唯一の方法は、データフレーム、つまり にインデックスを付けてからdf$
、「クラスタリング」変数を指定することです。df
これは、関数呼び出しの内部に追加の引数を指定することで実現できますか? このコードは効率的ですか?
おそらく、モデル方程式を定式的に指定する方が良い方法だと思います。
どんな考え/コメントも常に役に立ちます:)