Clustered standard errors in R using plm (with fixed effects)

后端 未结 2 1002
长发绾君心
长发绾君心 2020-12-16 07:33

I\'m trying to run a regression in R\'s plm package with fixed effects and model = \'within\', while having clustered standard errors. Using the

相关标签:
2条回答
  • 2020-12-16 07:50

    Stata uses a finite sample correction to reduce downwards bias in the errors due to the finite number of clusters. It is a multiplicative factor on the variance-covariance matrix, $c=\frac{G}{G-1} \cdot \frac{N-1}{N-K}$, where G is the number of groups, N is the number of observations, and K is the number of parameters. I think coeftest only uses $c'=\frac{N-1}{N-K}$ since if I scale R's standard error by the square of the first term in c, I get something pretty close to Stata's standard error:

    display 0.21136*(46/(46-1))^(.5)
    .21369554
    

    Here's how I would replicate what Stata is doing in R:

    require(plm)
    require(lmtest)
    data(Cigar)
    model <- plm(price ~ sales, model = 'within', data = Cigar)
    G <- length(unique(Cigar$state))
    c <- G/(G - 1)
    coeftest(model,c * vcovHC(model, type = "HC1", cluster = "group"))
    

    This yields:

    t test of coefficients:
    
           Estimate Std. Error  t value   Pr(>|t|)    
    sales -1.219563   0.213773 -5.70496 1.4319e-08 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
    

    which agrees with Stata's error of 0.2137726 and t-stat of -5.70.

    This code is probably not ideal, since the number of states in the data may be different than the number of states in the regression, but I am too lazy to figure out how to get the right number of panels.

    0 讨论(0)
  • 2020-12-16 07:52

    Stata uses a specific small-sample correction that has been implemented in plm 1.5.

    Try this:

    require(plm)
    require(lmtest)
    data(Cigar)
    model <- plm(price ~ sales + factor(state), model = 'within', data = Cigar)
    coeftest(model, function(x) vcovHC(x, type = 'sss'))
    

    Which will yield:

    t test of coefficients:
    
          Estimate Std. Error t value  Pr(>|t|)    
    sales  -1.2196     0.2137  -5.707 1.415e-08 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    

    This gives the same SE estimate up to 3 digits:

    x <- coeftest(model, function(x) vcovHC(x, type = 'sss'))
    x[ , "Std. Error"]
    ## [1] 0.2136951
    
    0 讨论(0)
提交回复
热议问题