8 votos

Cálculo del modelo de gravedad en el software R y Stata: ¿por qué son coeficientes iguales pero diferentes errores de estándar?

Se realizó el cálculo del modelo de gravedad en R y del programa Stata.

Para los cálculos se utilizó el paquete estándar glmm R (con el parámetro family = quasipoisson), y ppml en Stata.

Llame el procedimiento de cálculo en R:

summary(glmm<-glm(formula=exports ~ ln_GDPimporter + ln_GDPexporter + 
    ln_GDPimppc + ln_GDPexppc + ln_Distance + ln_Tariff + ln_ExchangeRate +
    Contig + Comlang + Colony_CIS + EAEU_CIS + EU_European_Union, 
    family=quasipoisson(link="log"),data=data_pua))

Los resultados en I fueron:

The results of the calculations in R

En los mismos datos, se realizaron los cálculos en el programa Stata, usando ppml procedimiento:

ppml exports ln_gdpimporter ln_gdpexporter ln_gdpimppc ln_gdpexppc ln_distance ln_tariff ln_exchangerate contig comlang colony_cis eaeu_cis eu_european_union

Los resultados de los cálculos en el programa Stata fueron los siguientes:

The results of the calculations in Stata

Como se puede ver, el modelo de coeficientes (segunda columna de la tabla de resultados) son los mismos, al menos hasta el 4 de marca decimal.

Sin embargo, otros resultados (a partir de la tercera columna de la tabla de resultados) no son las mismas.

  • Podrían explicar las diferencias en los resultados?

  • En particular, ¿por qué son los coeficientes de la misma (la primera de las columnas de la tabla), pero los errores estándar no?

7voto

Loren Pechtel Puntos 2212

Tomo nota de que el programa Stata coeficiente de la tabla mencionada "Robust Std. Err.", mientras glmm probablemente no robustos mediante el uso de errores. Eso explicaría SE diferencias.

También, ppml parece realmente drop "no significativo" regresores, y R quasipoisson familia permite a través de la dispersión de una manera que es diferente de, digamos, de regresión binomial negativa, que es tal vez diferente de la ppml.

Me di cuenta de que usted le pidió en un par de lugares acerca de lo que R paquete de obtener resultados equivalentes a ppml (economía) modelos de gravedad, y no obtuvo respuestas. Lamento ver que y me gustaría poder dar más informado a la recomendación. Parece que lo que necesitas es una regresión de Poisson con errores estándar robustos, que se encarga de los valores cero. No estoy seguro de lo R de los paquetes de apoyo que. (No estoy seguro si ppml maneja más de dispersión o no).

Bayesiano de regresión paquetes como rstanarm podría manejar heterocedasticidad de manera más sólida, pero no estoy seguro. Me gustaría tienden a usar algo como un student_t familia para que, pero usted tiene que utilizar poisson así que no estoy seguro de la respuesta. Usted puede tratar de la binomial negativa de la familia (neg_binomial_2 en rstanarm's stan_glm), que también se encarga de la sobre-dispersión y puede ser más robusto que quasipoisson.

Ver también: Cuando el uso de errores estándar robustos de regresión de Poisson?

6voto

Neal Puntos 316

Para ampliar sobre Wayne excelente respuesta, ppml utiliza un robusto (heterocedasticidad) varianza-covarianza de la matriz y también una muestra finita de ajuste a la matriz para reducir el sesgo.

Estos son muy similares a lo sandwich() en el paquete del mismo nombre calcula en R. La única diferencia es cómo lo finito-muestra el ajuste se realiza. En la sandwich(...) función, no finito-muestra el ajuste se hace por defecto, es decir, el sándwich se divide por 1/n donde n es el número de observaciones. Alternativamente, sandwich(..., adjust = TRUE) puede utilizar la que se divide por 1/(n - k) donde k es el número de regresores. Stata, sin embargo, divide por 1/(n - 1).

He aquí cómo usted puede obtener R para que coincida con el programa Stata mediante el uso de una costumbre sándwich de varianza con un factor de ajuste de 1/(n-1):

. clear

. set more off

. capture ssc install rsource

. use http://personal.lse.ac.uk/tenreyro/mock, clear

. saveold ~/Desktop/mock, version(12) replace
(saving in Stata 12 format, which can be read by Stata 11 or 12)
file ~/Desktop/mock.dta saved

. rsource, terminator(XXX) rpath("/usr/local/bin/R") roptions("--vanilla")
Assumed R program path: "/usr/local/bin/R"

Loading required package: zoo

Attaching package: 'zoo'

The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

Beginning of R output

R version 3.2.4 (2016-03-10) -- "Very Secure Dishes"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

>   library("foreign")
>   library("sandwich")
>   library("lmtest")
>   mock<-read.dta("~/Desktop/mock.dta")
>   glmm<-glm(formula=y ~ x + w, family=quasipoisson(link="log"),data=mock)
> 
>   sandwich1 <- function(object, ...) sandwich(object) * nobs(object) / (nobs(object) - 1)
>   coeftest(glmm,vcov=sandwich1)

z test of coefficients:

            Estimate Std. Error z value  Pr(>|z|)    
(Intercept) 0.516969   0.098062  5.2718 1.351e-07 ***
x           0.125657   0.101591  1.2369    0.2161    
w           0.013410   0.710752  0.0189    0.9849    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

> 
End of R output

. 
. ppml y x w

note: checking the existence of the estimates

Number of regressors excluded to ensure that the estimates exist: 0
Number of observations excluded: 0

note: starting ppml estimation
note: y has noninteger values

Iteration 1:   deviance =  139.7855
Iteration 2:   deviance =  137.7284
Iteration 3:   deviance =  137.7222
Iteration 4:   deviance =  137.7222

Number of parameters: 3
Number of observations: 100
Pseudo log-likelihood: -173.89764
R-squared: .01628639
Option strict is: off
------------------------------------------------------------------------------
             |               Robust
           y |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           x |   .1256565   .1015913     1.24   0.216    -.0734588    .3247718
           w |   .0134101   .7107518     0.02   0.985    -1.379638    1.406458
       _cons |   .5169689   .0980624     5.27   0.000     .3247702    .7091676
------------------------------------------------------------------------------

Aquí está el programa Stata/R código que genera el resultado anterior. Estoy usando rsource a ejecutar R de Stata (y usted tendrá que ajustar el rpath() abajo para que coincida con su configuración), pero que no es realmente necesario: usted puede simplemente ejecutar la rsource parte de R.

clear
set more off
capture ssc install rsource

use http://personal.lse.ac.uk/tenreyro/mock, clear
saveold ~/Desktop/mock, version(12) replace

rsource, terminator(XXX) rpath("/usr/local/bin/R") roptions("--vanilla")
  library("foreign")
  library("sandwich")
  library("lmtest")
  mock<-read.dta("~/Desktop/mock.dta")
  glmm<-glm(formula=y ~ x + w, family=quasipoisson(link="log"),data=mock)

  sandwich1 <- function(object, ...) sandwich(object) * nobs(object) / (nobs(object) - 1)
  coeftest(glmm,vcov=sandwich1)  
XXX 

ppml y x w

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X