12 feb 2019

Test Chow de quiebre estructural en R

A partir de la importancia de los test de cambios estructurales en los resultados de los modelos obtenidos, la siguiente entrada muestra un ejemplo de cómo realizar un test de cambio estructural de Chow en R, asumiendo que el test es conocido por el lector. En este ejemplo, se utiliza la base de dato “wage1” sobre salarios, disponible en el texto de econometría de Wooldridge. De forma específica, se desea verificar si existen diferencias entre los retornos de mujeres y hombres.

Paso 1: Importar las bases de datos y verificar las variables disponibles

Dado que el test considera conocido el punto de quiebre estructural, es usual un análisis descriptivo formal de las bases, que permita consolidar en el analista, una idea del punto de quiebre estructural. En este ejemplo con datos transversales, suponemos este punto lo marcan diferencias de genero entre hombres y mujeres. 

library(wooldridge)
library(stargazer)

data("wage1")
attach(wage1)

str(wage1)
## 'data.frame':    526 obs. of  24 variables:
##  $ wage    : num  3.1 3.24 3 6 5.3 ...
##  $ educ    : int  11 12 11 8 12 16 18 12 12 17 ...
##  $ exper   : int  2 22 2 44 7 9 15 5 26 22 ...
...

Paso 2: Estimar los modelos para la muestra completa y para las muestras entre las cuales se desea testear el quiebre estructural.

En esta paso necesitamos estimar tres modelos, el primero corresponde al modelo no restringido (para la muestra completa, modelNR); posteriormente, se estima el modelo para hombres y para mujeres, utilizando indexación de nuestra base de datos, wage1[female==1,]. Los resultados de estos modelos se muestran en una tabla de regresión utilizando la librería stargazer.

modelNR <- lm(lwage~1+educ+exper+tenure )
modeln1 <- lm(lwage~1+educ+exper+tenure, data=wage1[female==1,] )
modeln2 <- lm(lwage~1+educ+exper+tenure, data=wage1[female==0,] )

# Resultados
stargazer(modelNR, modeln1, modeln2, type="text", title="Results", align=TRUE)
##
## Results
##
=====================================================
##                                               Dependent variable:                         
##                     -----------------------------------------------------------------------
##                                                      lwage                                
##                               (1)                     (2)                     (3)         
## -------------------------------------------------------------------------------------------
## educ                       0.092***                0.080***                0.096***       
##                             (0.007)                 (0.010)                 (0.009)       
##                                                                                            
## exper                       0.004**                  0.002                 0.008***       
##                             (0.002)                 (0.002)                 (0.002)       
##                                                                                            
## tenure                     0.022***                 0.010*                 0.018***       
##                             (0.003)                 (0.005)                 (0.004)       
##                                                                                            
## Constant                   0.284***                 0.356**                 0.322**       
##                             (0.104)                 (0.141)                 (0.139)       
##                                                                                           
## -------------------------------------------------------------------------------------------
## Observations                  526                     252                     274         
## R2                           0.316                   0.212                   0.365        
## Adjusted R2                  0.312                   0.202                   0.358        
## Residual Std. Error    0.441 (df = 522)        0.397 (df = 248)        0.428 (df = 270)   
## F Statistic         80.391*** (df = 3; 522) 22.233*** (df = 3; 248) 51.836*** (df = 3; 270)
## =======================================================
## Note:                                                           *p<0.1; **p<0.05; ***p<0.01

Paso 3: Obtener el estadístico F del test y el estadístico de tabla

A partir de las suma del cuadrado de los residuos obtenidos en los modelos anteriores sum(residuals(modelNR)^2), y la obtención de los grados de libertad del test k  y n1n2k, se puede obtener el estadístico calculado asociado al test, para finalmente compararlo con el valor del estadístico de tabla a un determinado nivel de significancia.


SRCnr<-sum(residuals(modelNR)^2)
SRCn1<-sum(residuals(modeln1)^2)
SRCn2<-sum(residuals(modeln2)^2)

# H0 b1=b2=b
k<-length(coefficients(modeln1))
n1n2k <- sum(female==1) + sum(female==0) - k
 
Fc<-((SRCnr- (SRCn1+SRCn2))*n1n2k)/((SRCn1+SRCn2)*k)
Ft<-qf(0.05, k, n1n2k, lower.tail=FALSE)
> Fc
[1] 18.96467
>  Ft
[1] 2.389012

Recodificación de variables usando dplyr en R

Una base de datos suele tener diversos tipos de variables del tipo cualitativo y cuantitativo. En función del tipo de variables aplicamos di...