Frage

mein Problem ist folgendes:Ich bekomme NA wo ich einige Werte bei der Berechnung robuster Standardfehler erhalten sollte.

Ich versuche, eine Panel-Regression mit festem Effekt und Cluster-robusten Standardfehlern durchzuführen.Dafür folge ich Arai (2011) Wer auf S.3 folgt Stock/Watson (2006) (später veröffentlicht in Ökonometrie, für diejenigen, die Zugang haben).Ich möchte die Freiheitsgrade korrigieren um (M/(M-1)*(N-1)/(N-K) gegen eine Abwärtstendenz, da meine Anzahl an Clustern endlich ist und ich unausgeglichene Daten habe.

Ähnliche Probleme wurden schon einmal gepostet [1, 2] über StackOverflow und verwandte Probleme [3] auf CrossValidated.

Arai (und die Antwort im ersten Link) verwendet den folgenden Code für Funktionen (Ich stelle meine Daten unten mit einigen weiteren Kommentaren zur Verfügung):

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) }

,bei dem die gcenter berechnet Abweichungen vom Mittelwert (fester Effekt).Ich mache dann weiter und mache die Regression mit DS_CODEist meine Clustervariable (ich habe meine Daten „Daten“ genannt).

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))

und rechnen wollen

clx(datalm, dfcw, data$DS_CODE)

Allerdings, wenn ich rechnen möchte uj (siehe Formel clx oben) für die Varianz erhalte ich nur am Anfang einige Werte für meine Regressoren, dann viele Nullen.Wenn dieser Eingang uj wird nur für die Varianz verwendet NAs Ergebnis.

Meine Daten

Da meine Daten möglicherweise eine spezielle Struktur haben und ich das Problem nicht herausfinden kann, poste ich das Ganze als Verknüpfung von Hotmail.Der Grund dafür ist, dass mein Problem bei anderen Daten (aus Arai (2011)) nicht auftritt.Entschuldigen Sie im Voraus die Unordnung, aber ich wäre Ihnen sehr dankbar, wenn Sie es sich trotzdem ansehen könnten.Die Datei ist eine 5 MB große TXT-Datei, die reine Daten enthält.

War es hilfreich?

Lösung

Nach einiger Zeit des Herumprobierens funktioniert es bei mir und gibt mir:

                         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  
...

Da stellen wir uns die Frage, warum das bei Ihnen nicht der Fall ist.Ich vermute, dass es etwas mit dem Format Ihrer Daten zu tun hat.Ist alles numerisch?Ich habe die Spaltenklassen konvertiert und bei mir sieht es so aus:

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 ...

Was macht str(data) für dich zurückkommen?

Andere Tipps

Der plm Das Paket kann geclusterte SEs für Panel-Regressionen schätzen.Die Originaldaten sind nicht mehr verfügbar, daher hier ein Beispiel mit Dummy-Daten.

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

Wenn Sie verwenden lm Modelle (statt plm), dann ist die multiwayvcov Paket kann helfen.

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

Weitere Einzelheiten finden Sie unter:

Siehe auch:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top