質問

私の問題はこれです:私は堅牢な標準誤差の計算でいくつかの値を得るべきであるNAを取得します。

クラスタロバスト標準エラーで固定エフェクトパネルの回帰をしようとしています。このために、私は arai(2011)誰がp。 3が続きます在庫/ワトソン(2006)(後で Econestrica 、アクセスがある人のために。私のクラスターの数が有限で、私は不均衡なデータを持っているので、下向きバイアスに対して(M/(M-1)*(N-1)/(N-K)によって自由度を修正したいと思います。

類似の問題が 1 2 ] https:// stats:// stats .stackexchange.com /質問/ 28492 /理解 - the-plm-package - なぜARENT-MY-STANDARD-ERRORS-respond-reftration on crossvalatedの「> 3 」。

ARAI(および第1リンクの回答)は、次のコードを使用しています(私は以下のようなデータを提供しています)。

gcenter <- function(df1,group) {
    variables <- paste(
        rep("C", ncol(df1)), colnames(df1), sep=".")
    copydf <- df1
    for (i in 1:ncol(df1)) {
        copydf[,i] <- df1[,i] - ave(df1[,i], group,FUN=mean)}
    colnames(copydf) <- variables
    return(cbind(df1,copydf))}

# 1-way adjusting for clusters
clx <- function(fm, dfcw, cluster){
    # R-codes (www.r-project.org) for computing
    # clustered-standard errors. Mahmood Arai, Jan 26, 2008.
    # The arguments of the function are:
    # fitted model, cluster1 and cluster2
    # You need to install libraries `sandwich' and `lmtest'
    # reweighting the var-cov matrix for the within model
    library(sandwich);library(lmtest)
    M <- length(unique(cluster))   
    N <- length(cluster)           
    K <- fm$rank                        
    dfc <- (M/(M-1))*((N-1)/(N-K))  
    uj  <- apply(estfun(fm),2, function(x) tapply(x, cluster, sum));
    vcovCL <- dfc*sandwich(fm, meat=crossprod(uj)/N)*dfcw
    coeftest(fm, vcovCL) }
. gcenterは、平均からの偏差を計算する(固定効果)。その後、My Cluster変数を使用してDS_CODEを使用して回帰を実行します(データ「データ」の名前を付けました)。

centerdata <- gcenter(data, data$DS_CODE)
datalm <- lm(C.L1.retE1M ~ C.MCAP_SEC + C.Impact_change + C.Mom + C.BM + C.PD + C.CashGen + C.NITA + C.PE + C.PEdummy + factor(DS_CODE), data=centerdata)
M <- length(unique(data$DS_CODE))
dfcw <- datalm$df / (datalm$df - (M-1))
.

を計算したい
clx(datalm, dfcw, data$DS_CODE)
.

しかし、 uj を計算したい場合(上記の式clxを参照)。ただし、差異については、私の回帰者のためにいくつかの値、次にゼロがたくさんあります。この入力 uj が分散に使用されている場合は、NAsの結果のみです。

私のデータ

私のデータは特別な構造であるかもしれず、私は問題を理解することができないかもしれません。=!aptxlzboxcf67hs "rel=" nofollow noreferrer ">リンク Hotmailから。その理由は、他のデータ(ARAI(2011)から撮影されたもの)では、問題は発生しません。めちゃくちゃのために事前に申し訳ありませんが、それでも見ていることができれば私はとても感謝します。 ファイルは純粋にデータを含む5MBの.txtファイルです。

役に立ちましたか?

解決

しばらく遊んだ後、それは私のために働き、私に与えます:

                         Estimate  Std. Error t value  Pr(>|t|)    
(Intercept)            4.5099e-16  5.2381e-16  0.8610  0.389254    
C.MCAP_SEC            -5.9769e-07  1.2677e-07 -4.7149 2.425e-06 ***
C.Impact_change       -5.3908e-04  7.5601e-05 -7.1306 1.014e-12 ***
C.Mom                  3.7560e-04  3.3378e-03  0.1125  0.910406    
C.BM                  -1.6438e-04  1.7368e-05 -9.4645 < 2.2e-16 ***
C.PD                   6.2153e-02  3.8766e-02  1.6033  0.108885    
C.CashGen             -2.7876e-04  1.4031e-02 -0.0199  0.984149    
C.NITA                -8.1792e-02  3.2153e-02 -2.5438  0.010969 *  
C.PE                  -6.6170e-06  4.0138e-06 -1.6485  0.099248 .  
C.PEdummy              1.3143e-02  4.8864e-03  2.6897  0.007154 ** 
factor(DS_CODE)130324 -5.2497e-16  5.2683e-16 -0.9965  0.319028    
factor(DS_CODE)130409 -4.0276e-16  5.2384e-16 -0.7689  0.441986    
factor(DS_CODE)130775 -4.4113e-16  5.2424e-16 -0.8415  0.400089  
...
.

これは私たちにあなたのためではない理由を疑問に残します。私はそれがあなたのデータの形式で何があると思います。すべての数字ですか?列クラスを変換し、それは私のためにそのように見えます:

str(dat)
'data.frame':   48251 obs. of  12 variables:
 $ DS_CODE      : chr  "902172" "902172" "902172" "902172" ...
 $ DNEW         : num  2e+05 2e+05 2e+05 2e+05 2e+05 ...
 $ MCAP_SEC     : num  78122 71421 81907 80010 82462 ...
 $ NITA         : num  0.135 0.135 0.135 0.135 0.135 ...
 $ CashGen      : num  0.198 0.198 0.198 0.198 0.198 ...
 $ BM           : num  0.1074 0.1108 0.097 0.0968 0.0899 ...
 $ PE           : num  57 55.3 63.1 63.2 68 ...
 $ PEdummy      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ L1.retE1M    : num  -0.72492 0.13177 0.00122 0.07214 -0.07332 ...
 $ Mom          : num  0 0 0 0 0 ...
 $ PD           : num  5.41e-54 1.51e-66 3.16e-80 2.87e-79 4.39e-89 ...
 $ Impact_change: num  0 -10.59 -10.43 0.7 -6.97 ...
.

str(data)はあなたに何を返しますか?

他のヒント

plmパッケージは、パネル回帰のためのクラスタ化されたSESを推定できます。元のデータはもう利用できなくなりましたので、ダミーデータを使用した例です。

require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")

fpm <- plm(y ~ x, test, model='pooling', index=c('firmid', 'year'))

##Arellano clustered by *group* SEs
> coeftest(fpm, vcov=function(x) vcovHC(x, cluster="group", type="HC0"))

t test of coefficients:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.029680   0.066939  0.4434   0.6575    
x           1.034833   0.050540 20.4755   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
.


lmの代わりにplmモデルを使用している場合は、multiwayvcovパッケージが役立ちます。

library("lmtest")
library("multiwayvcov")

data(petersen)
m1 <- lm(y ~ x, data = petersen)

> coeftest(m1, vcov=function(x) cluster.vcov(x, petersen[ , c("firmid")], 
   df_correction=FALSE))

t test of coefficients:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.029680   0.066939  0.4434   0.6575    
x           1.034833   0.050540 20.4755   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
.

詳細については:

  • ファマ - マクベスとクラスタロバストR の標準誤差。

参照:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top