Rでは、特異点のために係数が落ちたときにvcovHC()を使ってロバスト標準誤差を計算するにはどうすればよいですか?標準のlm関数は、実際に見積もられたすべての係数に対して正常な標準誤差を計算するように見えますが、vcovHC()は「パンのエラー%*%肉:適合しない引数」というエラーをスローします。R特異点を持つlmモデルのロバスト標準誤差(vcovHC)を計算する
(私が使用している実際のデータはもう少し複雑ですが、実際には2つの異なる固定効果を使ったモデルですが、私は単純に取り除くことができない地元の特異点に走ります。 2番目の固定効果には150レベル、2番目の固定レベルには142レベル、10ブロックでデータが収集されたことに起因する9つの特異点があります)
ここに
Call:
lm(formula = one ~ two + three + Jan + Feb + Mar + Apr + May +
Jun + Jul + Aug + Sep + Oct + Nov + Dec, data = dat)
Residuals:
Min 1Q Median 3Q Max
-130.12 -60.95 0.08 61.05 137.35
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1169.74313 57.36807 20.390 <2e-16 ***
two -0.07963 0.06720 -1.185 0.237
three -0.04053 0.06686 -0.606 0.545
Jan 8.10336 22.05552 0.367 0.714
Feb 0.44025 22.11275 0.020 0.984
Mar 19.65066 22.02454 0.892 0.373
Apr -13.19779 22.02886 -0.599 0.550
May 15.39534 22.10445 0.696 0.487
Jun -12.50227 22.07013 -0.566 0.572
Jul -20.58648 22.06772 -0.933 0.352
Aug -0.72223 22.36923 -0.032 0.974
Sep 12.42204 22.09296 0.562 0.574
Oct 25.14836 22.04324 1.141 0.255
Nov 18.13337 22.08717 0.821 0.413
Dec NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 69.63 on 226 degrees of freedom
Multiple R-squared: 0.04878, Adjusted R-squared: -0.005939
F-statistic: 0.8914 on 13 and 226 DF, p-value: 0.5629
> model$se <- vcovHC(model)
Error in bread. %*% meat. : non-conformable arguments
エラーを再現するために最小限のコードが抜粋されています。
library(sandwich)
set.seed(101)
dat<-data.frame(one=c(sample(1000:1239)),
two=c(sample(200:439)),
three=c(sample(600:839)),
Jan=c(rep(1,20),rep(0,220)),
Feb=c(rep(0,20),rep(1,20),rep(0,200)),
Mar=c(rep(0,40),rep(1,20),rep(0,180)),
Apr=c(rep(0,60),rep(1,20),rep(0,160)),
May=c(rep(0,80),rep(1,20),rep(0,140)),
Jun=c(rep(0,100),rep(1,20),rep(0,120)),
Jul=c(rep(0,120),rep(1,20),rep(0,100)),
Aug=c(rep(0,140),rep(1,20),rep(0,80)),
Sep=c(rep(0,160),rep(1,20),rep(0,60)),
Oct=c(rep(0,180),rep(1,20),rep(0,40)),
Nov=c(rep(0,200),rep(1,20),rep(0,20)),
Dec=c(rep(0,220),rep(1,20)))
model <- lm(one ~ two + three + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec, data=dat)
summary(model)
model$se <- vcovHC(model)
コードが機能しているようです。特異点を避けるために、モデルから月(またはインターセプト)の1つを明示的に削除したい場合があります。 –
それは残念ながら私の指摘です:私は特異性を取り除くことができません。これは私が投稿した単なるサンプルデータセットです。そのデータセットでは、私は同意します。単純に回帰からDecを削除して、特異点を取り除き、vcovHC()が機能するようにします。私の実際のデータでは、特異度は、複数のレベル(それぞれ150と142)の2つの固定効果に由来しています。私はそのデータの特異点を取り除く方法を見出していません。 – Chris
@Chris:このエラーはまだ発生しますか?特異点を誘導するために 'Dec'を 'c(rep(0,240)) 'に変更した後、' vcovHC(model) 'への呼び出しは、あなたが書き留めたエラーなしで成功します。サンドイッチ2.2-9の変更履歴:aliasパラメータを持つ 'lm/mlm/glmモデルは正しく処理されませんでした(サンドイッチ/ vcovHCなどのエラーにつながります)、今修正されました。 – jthetzel