Escudo de la República de Colombia Escudo de la República de Colombia
Menú
Logo FCE Blanco

Panel de Accesibilidad

Modelos de regresión de variable cualitativa

 

Se refiere a modelos donde la variable dependiente tiene naturaleza cualitativa mientras que las variables regresoras pueden ser cuantitativas o cualitativas. Por ejemplo, se puede estudiar si se tiene vivienda o no, si se tiene una enfermedad o no, aunque también es posible tener modelos donde la variable dependiente puede ser tricotómica o politómica.

El concepto resulta ser diferente dado que cuando Y es cuantitativa se busca estimar su valor esperado, cuando Y es cualitativa se busca encontrar la probabilidad de que cierto acontecimiento suceda.

Este tipo de modelos se pueden estimar por 4 diferentes métodos:

 

 Modelo de Probabilidad lineal 

Un modelo de probabilidad lineal (MPL)se representa de la siguiente manera:

Yi = ß1 + ß2Xi + ui

Donde, Y representa un acontecimiento que puede o no suceder (Tener o no tener vivienda) por lo que Y puede ser Y=1 si se cumple, o Y= 0 si es el caso contrario.

La interpretación viene dada por la probabilidad condicional de Y dado que se cumpla o no Xi. Sin embargo, el MPL presenta dificultades de origen teórico. En primer lugar:

 

Ejemplo práctico Rstudio

La base de datos “insurance.csv”, extraía de la página: econometric academy contiene datos acerca de si se tiene un seguro médico tomando como variables explicativas el ingreso, los años de educación, si está casado, si es hispano y si la persona se encuentra retirada.

Lo primero para realizar el análisis en el software Rstudio es identifica que tipo se base está trabajando ya que de esto depende el comando a utilizar. En este caso se trata de una base en formato .csv  por lo que se cargará la base de la siguiente manera:

  basepl<- read.csv(file.choose(),T, sep = ",")

El argumento file.chooose(), abre una ventana de navegación para escoger el archivo que se está buscando, es importante recordar que es posible que la ventana no emerja sobre la ventana en la que se está trabajando por lo que hay que buscarla. El símbolo de STOP en el parte superior derecha de la consola indica que el programa está esperando a que la base de trabajo sea escogida.

Posteriormente para abreviar el codigo y permitir el nombramiento directo de las variables en R, se fija la base de datos en el programa por medio del commando attach. Sin embargo, hay que tener en cuenta que no deben haber otras bases fijadas en el sistema para evitar el conflicto entre ellas. 

attach(basepl) 

El modelo de probabilidad lineal como se mencionó antes, es equivalente a la regresión lineal, solo que este tiene la particularidad de tener como variable dependiente una variable dicotómica. Por lo tanto, la diferencia de estos surge en la explicación de los resultados, además este modelo tiene dificultades teóricas mostradas anteriormente, por lo que lo usual es utilizar un modelo logit o probit

La función que permite realizar una regresión lineal es lm(variabledepenendiente~variables1+varibale2….)

problin<- lm(ins~retire+age+hstatusg+hhincome+educyear+married+hisp)

problin

Por medio del comando summary se obtiene un resumen de los resultados de la regresión, siendo de especial importancia la significancia de las variables.

summary(problin)

Obteniendo el siguiente resultado en la consola de R

> summary(problin)

 

Call:

lm(formula = ins ~ retire + age + hstatusg + hhincome + educyear +

    married + hisp)

 

Residuals:

    Min      1Q  Median      3Q     Max

-1.1233 -0.4065 -0.2291  0.5298  1.0341

 

Coefficients:

              Estimate Std. Error t value Pr(>|t|)   

(Intercept)  0.1270857  0.1605628   0.792  0.42871   

retire       0.0408508  0.0182197   2.242  0.02502 * 

age         -0.0028955  0.0024189  -1.197  0.23138   

hstatusg     0.0655583  0.0194531   3.370  0.00076 ***

hhincome     0.0004921  0.0001375   3.579  0.00035 ***

educyear     0.0233686  0.0028672   8.150 5.15e-16 ***

married      0.1234699  0.0193618   6.377 2.07e-10 ***

hisp        -0.1210059  0.0336660  -3.594  0.00033 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 0.4671 on 3198 degrees of freedom

Multiple R-squared:  0.08262,           Adjusted R-squared:  0.08061

F-statistic: 41.14 on 7 and 3198 DF,  p-value: < 2.2e-16

Aceptando un nivel de significancia del 5%, que en R está representado por * hasta ***, muestra que casi todas las variables son significativas, no obstante,hay coeficientes negativos, lo que no tiene una explicación lógica. Dado lo anterior, es recomedable utilizar modelos logit y probit, los cuales utilizan una distribución estadística que cumple la condición de estar acotada de manera adecuada, es decir entre 0 y 1.

 

Modelos de probabilidad no lineal: logit y  probit

Con el fin de cumplir con la condición de modelos cuya respuesta se encuentre en 0 y 1, y por tanto que arrojen una conclusión lógica, se utilizan funciones de distribución como la función logística como es el caso del modelo logit.

El modelo tendría la forma:

 

 En el caso del modelo probit, se supone una relación no lineal distinta, pero muy parecida al modelo logit pero se utiliza una función de distribución normal, dando como resultado: 

 

Dado que las curvas de ña distribución logística y la distribución normal no difieren mucho entre si los resultados derivados de estimar con cada modelo son muy similares.

La interpretación de los modelos logit y probit se puede realizar en términos probabilísticos, sin embargo, hay que tener en cuenta que en la interpretación de los parámetros obtenidos por medio de modelos logit y probit, solo se tiene en cuanta el signo ya que este indica la variación de la probabilidad cuando aumenta la variable explicativa correspondiente, pero la magnitud de este aumento de probabilidad no coincide con el parámetro.

 Con el fin de facilitar la interpretación de los parámetros se acude a la construcción de odds ratios, que se refieren al número de veces que es más probable que ocurra un fenómeno frente a que no ocurra. Los odds ratio estarían representados de la siguiente manera (cociente de probabilidades):

 

La interpretación de los odds ratios se realiza basados en que su valor sea mayor, menor o igual a 1, de manera que:

Una regresión logística es un modelo lineal del logaritmo de los odds ratio de éxito por lo que una unidad de incremento en la la variable explicativa va a resultar en un aumento o descenso de los valores futuros de odds, mateniendo el resto de variables constantes.

 

Ejemplo práctico en R Studio: Modelo Logit

Se utilizará la misma base de datos, por lo que no es necesario cargarla de nuevo. En caso de tener una base diferente es importante quitar de la memoria la base anterior por medio del comando

 dettach(nombrebase)

El comando que permite realizar la estimación utilizando un modelo logit o probit es “glm” cuyos argumentos son:

logit<- glm(ins~ retire+age+hstatusg+hhincome+educyear+married+hisp, family=(binomial(link=logit)))

El primer elemento es la regresión de las variables, en este caso, ins esta explicada por el comportamiento de retire,age, hstatusg, hhincome, educyear, married y hisp (exactamente igual al modelo de probabilidad lineal). Sin embargo, por medio del argumento “family=(binomial(link=logit)” se está indicado que se utilizará un modelo logit, lo que implica que se está utilizando una distribución logística.

Por medio de summary obtenemos un resumen de las características del modelo.

 Call:

glm(formula = ins ~ retire + age + hstatusg + hhincome + educyear +

    married + hisp, family = (binomial(link = logit)))

                      

Deviance Residuals:

   Min      1Q  Median      3Q     Max 

-2.456  -1.009  -0.703   1.224   2.373 

 

Coefficients:

             Estimate Std. Error z value Pr(>|z|)   

(Intercept) -1.715578   0.748622  -2.292 0.021926 * 

retire       0.196930   0.084207   2.339 0.019354 * 

age         -0.014596   0.011287  -1.293 0.195969   

hstatusg     0.312265   0.091674   3.406 0.000659 ***

hhincome     0.002304   0.000762   3.023 0.002503 **

educyear     0.114263   0.014201   8.046 8.55e-16 ***

married      0.578636   0.093320   6.201 5.63e-10 ***

hisp        -0.810306   0.195751  -4.139 3.48e-05 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

(Dispersion parameter for binomial family taken to be 1)

 

    Null deviance: 4279.5  on 3205  degrees of freedom

Residual deviance: 3989.8  on 3198  degrees of freedom

AIC: 4005.8

 

Number of Fisher Scoring iterations: 4

 

Al igual que en ejemplo anterior, de * a  *** significa que las variables son significativas para el modelo al menos en un 5%. En este caso la interpretación de los coeficientes varía a la realizada cuando se trata de un modelo de regresión lineal.

La magnitud del coeficiente en este caso no tiene interpretación, lo que se puede determinar por medio de los resultados es si una variable aumenta o disminuye la probabilidad de cumplir o no con la variable independiente en este caso ins. Así, por ejemplo, si una persona es retirada tiene mayor probabilidad de estar asegurada, o entre más años tenga menos probable es que adquiera un seguro. Por lo que una persona mayor que ha permanecido sin seguro prefiere seguir sin él.

Es útil también utilizar los odds ratio para explicar la relación de probabilidad entre las variables, para el caso del modelo logit, se procede de la siguiente manera:

 exp(logit$coefficients)

El anterior comando realiza la funcional exponencial de los coeficientes del objeto logit, al cual se ingresa por medio del operador lógico $. El resultado obtenido es:

(Intercept)      retire         age    hstatusg    hhincome    

  0.1798597   1.2176584   0.9855105   1.3665173   1.0023063  

educyear     married       hisp

1.1210464   1.7836040     0.4447220

 

De manera similar, se puede interpretar que es mayor la probabilidad de que las personas retiradas tengan seguro, a la probabilidad de que las personas retiradas n tengan seguro.

co o tesis: el aumento de una unidad de nivel de ingresos y si el resto de variables se mantuvieran constantes, aumentaría los odds de votar al partido liberal en 1,508 veces más que si no se aumentara esa unidad del nivel de ingresos

La interpretación de los coeficientes es una parte muy importante y es de gran ayuda en la regresión lineal por lo que en modelos logit y probit es importante también poder realizarla, para esto se procede utilizando los efectos marginales. En el caso de una regresión lineal estos coinciden con los coeficientes del modelo, para el caso del modelo logit se procede de la siguiente manera:

 logitvec <- mean(dlogis(predict(logit, type = "link")))

El anterior commando guarda en objeto llamado logitvec, la media de un vector compuesto por los valores futuros del modelo logit utilizando la distribución logística.

 logitvec * coef(logit)

Posteriormente, el vector es multiplicado por los coeficientes del modelo logit para obtener los efectos marginales del modelo, cuyas magnitudes si pueden ser interpretadas.

 (Intercept)        retire           age      hstatusg      

-0.3725232720  0.0427616020 -0.0031692953  0.0678057706 

hhincome      educyear          married        hisp

0.0005002078  0.0248111432      0.1256458981   -0.1759510453             

Gracias a esta operación es posible obtener interpretaciones de magnitudes en los modelos logit. Por ejemplo, si la persona es retirada en un 4,2% más probable que se encuentre asegurada, de esta manera es más clara la relación de causalidad, por ejemplo que variables tienen más influencia en el cumplimiento o no de la variable dependiente.

Para calcular la bondad de ajuste de este modelo es necesario una medida diferente al R2, dado que no se trata de modelos lineales, comúnmente se utiliza R2  de Mc Fadden, la intuición detrás de esta medida es que si el modelo tiene una capacidad explicativa muy baja la probabilidad será muy similar a la regresión de la independiente contra 1. 

Entre más explicativo sea el modelo, el número resultante debe ser más cercano a 1.

En R el primer paso consiste en realizar la regresión de la variable dependiente explicada por la constante 1, esta se guarda en un objeto, en este caso logitp. Posteriormente en otro objeto se realiza la operación correspondiente al cálculo del R Mc Fadden, la cual utiliza el likelihood de ambos modelos, el logit inicial (con variables explicativas diferentes) y el logit estimado igualando a la constante 1.

 > logitp<-update(logit, formula= Y ~ 1)

> McFadden<-1-as.vector(logLik(logit)/logLik(logitp))

> McFadden

[1] 0.06771416

Finalmente, se obtiene un Mc Fadden de 0.067 el cual no es cercano al valor 1, que corresponde a un modelo que explica la totalidad de la relación, por lo que se puede concluir que el modelo no tiene un buen ajuste. 

 

Ejemplo práctico en R Studio: Modelo probit

 Como se vio a partir de la teoría, los modelo logit y probit resultan bastante similares, en consecuencia, pertenecen al mismo grupo de funciones en R, por lo que la sintaxis de la función es bastante parecida y se podrá observar por medio del ejemplo que los coeficientes obtenidos son también, bastante similares.

Nuevamente, el primer paso es cargar la base de datos, que para efectos pedagógicos y de comparación será la misma utilizada anteriormente. Posteriormente, se procede a estimar el modelo, la función a utilizar es “glm”, y la sintaxis es similar a la utilizada para el modelo logit, ña variable independiente ins explicada por retire, age, hstatusg, hhincome, educyear, married y hisp, pero en el argumento “family” se indica que el modelo a utilizar es el probit y por ende se utiliza un probabilidad normal.

 probit<- glm(ins~ retire+age+hstatusg+hhincome+educyear+married+hisp, family=(binomial(link=probit)))

 Por medio de summary, se obtiene el resumen del modelo:

> summary(probit)

 

Call:

glm(formula = ins ~ retire + age + hstatusg + hhincome + educyear +

    married + hisp, family = (binomial(link = probit)))

 

Deviance Residuals:

    Min       1Q   Median       3Q      Max 

-2.4220  -1.0136  -0.6981   1.2236   2.4745 

 

Coefficients:

              Estimate Std. Error z value Pr(>|z|)   

(Intercept) -1.0693423  0.4553103  -2.349 0.018844 * 

retire       0.1183526  0.0513402   2.305 0.021152 * 

age         -0.0088694  0.0068630  -1.292 0.196235   

hstatusg     0.1977411  0.0554905   3.564 0.000366 ***

hhincome     0.0012327  0.0004371   2.820 0.004798 **

educyear     0.0707492  0.0084925   8.331  < 2e-16 ***

married      0.3623376  0.0560521   6.464 1.02e-10 ***

hisp        -0.4731143  0.1102319  -4.292 1.77e-05 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

(Dispersion parameter for binomial family taken to be 1)

 

    Null deviance: 4279.5  on 3205  degrees of freedom

Residual deviance: 3987.2  on 3198  degrees of freedom

AIC: 4003.2

 

Number of Fisher Scoring iterations: 6

Nuevamente, entre * y *** muestran que las variables son significativas al 5%, y la magnitud de los coeficientes no tiene interpretación, sin embargo, el signo de estos sí. Un signo positivo significa que la variable escogida aumenta la probabilidad de ocurrencia de la dependiente. Por ejemplo, es más probable que una persona retirada tenga seguro.

Para poder interpretar la magnitud de los coeficientes es necesario el análisis de los efectos marginales que estos tienen, que se lograr por medio del siguiente procedimiento:

 probitvec <- mean(dnorm(predict(probit, type = "link")))

probitvec * coef(probit) 

EL objeto probitvec guara la media de los valores futuros del modelo probit utilizando una distribución normal. La multiplicación de este valor por los coeficientes del modelo llamado probit, arroja los efectos marginales que pueden ser interpretados de manera más intuitiva y arroja relaciones más claras de causalidad.

> probitvec <- mean(dnorm(predict(probit, type = "link")))

> probitvec * coef(probit)

  (Intercept)        retire           age      hstatusg

-0.3792718940  0.0419770495 -0.0031457860  0.0701343649

     hhincome      educyear       married          hisp

 0.0004371967  0.0250931581  0.1285130972 -0.1678031247

 De los resultados obtenidos, se puede extraeré que una persona retirada tiene 4.19% más probabilidades de estar asegurada. Lo anterior evidencia que si bien, los coeficientes de los modelos pueden ser diferentes, los efectos marginales son bastantes similares. Para el modelo logit se obtuvo en la  variable (retirado) una probabilidad del 4,12%  y el modelo probit un 4.2%.

De manera similar al modelo logit para el modelo probit se define la regresión de la variable dependiente explicada por la constante 1, esta se guarda en un objeto, en este caso probitp. Posteriormente en otro objeto se realiza la operación correspondiente al cálculo del R Mc Fadden, la cual utiliza el likelihood de ambos modelos, el probit inicial (con variables explicativas diferentes) y el probit estimado igualando a la constante 1.

> probitp<-update(probit, formula= Y ~ 1)

> McFadden<- 1-as.vector(logLik(probit)/logLik(probitp))

> McFadden

[1] 0.06830054

Finalmente, se obtiene un Mc Fadden de 0.068 el cual no es cercano al valor 1, que corresponde a un modelo que explica la totalidad de la relación, por lo que se puede concluir que el modelo no tiene un buen ajuste, se confirma por medio de los resultados en ambos modelos que las variables explicativas no son adecuadas para el comportamiento de la dependiente.

Logit o probit?

Como es posible observar en las estimaciones anteriores, los modelos logit y probit resultan bastante similares. Sin embargo, por la facilidad de interpretación de los odds ratios, las estimaciones por medio de logit son más usuales. Se suele estimar por medio de los dos modelos, ya que los paquetes econométricos facilitan esta labor y basados en la verosimilitud se decide qué modelo usar.   

 

   

Modelos de series de tiempo multivariadas

Un modelo VAR (vector autoregresivo) es generalmente utilizado cuando se desean encontrar relaciones simultaneas en un grupo de variables, permitiendo así estimar un sistema de ecuaciones, a diferencia de los modelos ARIMA tradicionales que permiten estimar sólo una ecuación. El modelo VAR es especialmente útil cuando las relaciones entre variables se transmiten a varios periodos, corrigiendo los problemas de endogeneidad (simultaneidad entre variables) y mostrando la interrelación dinámica que hay entre las variables estacionarias. Vale la pena mencionar que no se debe confundir con VaR (Value at risk).

Así, la relación entre yt e xt será explicada por las siguientes ecuaciones:

yt = B10 +B11xt-1 + B12yt-1 + ut y

xt= B20 + B21yt-1 + B22xt-1+ ut x

Las ecuaciones muestran que la variable y es explicada por rezagos de x y de sí misma; y de igual manera la variable x es afectada por rezagos de y y de sí misma, de manera que no es posible distinguir entre variables endógenas y variables exógenas . Un VAR(1) se refiere a un modelo cuyo máximo rezago es 1.

Al igual que cuando se trabaja con series de tiempo univariadas del tipo ARIMA, lo primero que se debe hacer es verificar si la serie está integrada; esto es, si tiene raíz unitaria. Si hay raíces unitarias, se debe examinar la posible existencia de una relación de cointegración, donde se dice que dos o más series no estacionarias están cointegradas si tienden a moverse juntas a lo largo del tiempo. De esta manera, la estimación de un modelo de series de tiempo multivariadas se resume de la siguiente manera:

Los riesgos asociados al no considerar estos dos problemas aluden a caer en un problema de regresión espuria y/o variable omitida.

En un modelo VAR estimado no tiene sentido tratar de interpretar los signos y las magnitudes de los coeficientes individuales. Por el contrario, hay que utilizar estadísticos globales, que traten de resumir con carácter agregado la influencia de unas variables sobre otras, aunque no es 100% necesario, ya que los modelos VAR son especialmente utilizados con fines predictivos.

Además, es común el uso de modelos VAR para crear funciones impulso-respuesta, pues tienen como fin evaluar el impacto de un choque a largo plazo; del mismo modo, es útil realizar pruebas de causalidad de Granger, la cual determina si la variable X causa en sentido de Granger a la variable x, de manera que el comportamiento de Y pueda ser pronosticado por el comportamiento de x.

 

Ejemplo práctico en R studio: modelo VAR

El primer paso es subir la base de datos, que en este caso se encuentra en formato Excel por lo que es necesario instalar un paquete, en caso de que este ya esté instalado bastara solo con activarlo, lo anterior se logra por medio de los siguientes comandos:

 install.packages("readxl")

library(readxl)

Posteriormente gracias a la función “read_excel” que se encuentra en ese paquete es posible cargar base con formal .xls, como se procede a continuación:

 BaseVAR<- read_excel(file.choose())

Una vez escogida la base en la ventana de navegación, se procede a definirla en R como una serie de tiempo por medio de la función ts cuyos argumentos son: En primer lugar la base de datos utilizada, en este caso guardado en el objeto con nombre VAR; el siguiente argumento se refiere al año de inicio de los datos en la base de datos y por último el comando “freq=” el cual se refiere a número de observaciones por unidad de tiempo. Por ejemplo, los datos en la base de datos son trimestrales por lo que la frecuencia es de 4 al año, si estos fueran mensuales la frecuencia correspondería a 12. 

 varts<-ts(VAR, start=2001, freq=4)

Como suele hacerse cuando se trabaja con series de tiempo, el primer procedimiento corresponde a la gráfica de cada una de las series, esto con el fin de identificar el comportamiento general de la serie, por ejemplo si esta presenta estacionareidad o no. Con el fin de facilitar el trabajo con la base de datos, la fijamos en la memoria con attach, siempre teniendo la precaución de no tener más bases fijadas, para realizar lo gráficos se utilizará el comando plot.ts, cuyos argumentos se refieren: em primer lugar se escoge el objeto varts (que corresponde la serie de tiempo definida), de este objeto se extrae todas las columnas  a excepción de la primera dado que no es de interés graficar la fecha, el argumento main, se refiere al titulo que se desea tengo la totalidad del gráfico, por último a través del argumento col es posible escoger el color que se desea tenga el gráfico.

 plot.ts(varts[,c(2,3,4,5,6)], main = "varts", col = "red")

Imagen var

A través de los gráficos es posible evidenciar que las series no son estacionarias, por lo que es necesario realizar una diferenciación, que se realiza utilizando la función diff(), posteriormente se graficara de nuevo, para comprobar que las series diferenciadas sean estacionarias:

 vartsdif<-diff(varts)

plot.ts(vartsdif[,c(2,3,4,5,6)], main = "vartsdif")

Imagen var1

Con las nuevas gráficas es posible observar que las series diferenciadas parecen tener un comportamiento estacionario.

Una vez las son series son estacionarias, lo cual es requisito para la correcta estimación de un VAR se procede a realizar la estimación en R, para esta es necesaria la instalación del paquete “vars”

 install.packages("vars")

library(vars)

Para determinar el número de rezagos que sería optimo utilizar, se utiliza la función VARselect, el cual informa sobre el Criterio de información de Akaike (AIC), Criterio de informacion de Hannan y Quinn (HQ), el criterio información bayesiana de Schwarz (SC) y el error de predicción final de Akaike (FPE), entre más pequeños sean estos mejor es el modelo.

 VARselect(vartsdif,lag.max=8,type="const")

$selection

AIC(n)  HQ(n)  SC(n) FPE(n)   

   8      8      1      6  

$criteria                  

1       2         3        4          5

AIC(n) -3.754374e+01 -3.741377e+01 -3.815788e+01 -3.816175e+01 -3.974017e+01

HQ(n)  -3.710687e+01 -3.661285e+01 -3.699290e+01 -3.663272e+01 -3.784709e+01

SC(n)  -3.639652e+01 -3.531055e+01 -3.509864e+01 -3.414650e+01 -3.476891e+01

FPE(n)  4.982948e-17  5.851709e-17  3.011806e-17  3.522325e-17  9.677072e-18     

    6             7             8

AIC(n) -4.036410e+01 -4.118361e+01 -4.260923e+01

HQ(n)  -3.810696e+01 -3.856242e+01 -3.962399e+01

SC(n)  -3.443683e+01 -3.430033e+01 -3.476994e+01

FPE(n)  8.435810e-18  8.494060e-18  9.074541e-18

Se utilizará la función VAR cuyos argumentos son: en primer lugar, el objeto que contiene la serie de tiempo diferenciada, el argumento p se refiere al número de rezagos que se incluirán en el modelo, finalmente el tipo de regresores que se incluirán, las opciones son "const", "trend", "both" y "none".

Sin embargo, la base de datos tiene una columna de datos que debe ser eliminada para evitar errores de estimación matemática, este procedimiento se realiza con el siguiente comando, el cual reemplaza el objeto vartsdif por la misma base extrayendo la primera columna.

vartsdif<-vartsdif[,-1]

ModeloVAR<-VAR(vartsdif,p=1,type=c("const"))

El modelo VAR estimado es el siguiente:

VAR Estimation Results:

=======================  

Estimated coefficients for equation Imp: ========================================

Call:

Imp = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const       Imp.l1      PIB.l1     ITCR.l1      IPC.l1      IPI.l1       const -0.03671020  2.39361671 -1.02610299 -0.36275619 -0.49988240 -0.02464091   Estimated coefficients for equation PIB: ========================================

Call:

PIB = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const       Imp.l1      PIB.l1     ITCR.l1      IPC.l1      IPI.l1       const  0.03506367  0.01326478 -0.05559830  0.37663500 -0.02747203  0.01699523   Estimated coefficients for equation ITCR: =========================================

Call:

ITCR = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const        Imp.l1       PIB.l1      ITCR.l1       IPC.l1       IPI.l1        const  0.159228168 -0.852276601  0.359477529  0.954076312  0.132829352  0.003863984   Estimated coefficients for equation IPC: ========================================

Call:

IPC = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const         Imp.l1        PIB.l1       ITCR.l1        IPC.l1        IPI.l1  0.0009765368  0.0357764608  0.0458986506  0.1038901228 -0.0494280799         const  0.0094404229   Estimated coefficients for equation IPI: ========================================

Call:

IPI = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const       Imp.l1      PIB.l1     ITCR.l1      IPC.l1      IPI.l1       const  0.01448554  0.71626525 -0.37783167  1.20771893 -0.24866343 -0.02398894

Para obtener un resumen del modelo se utilizará el comando “summary”, el cual muestra también la significancia de las variables.

 VAR Estimation Results:

=========================

Endogenous variables: Imp, PIB, ITCR, IPC, IPI Deterministic variables: const

Sample size: 57

Log Likelihood: 684.493

Roots of the characteristic polynomial:

0.2754 0.2754 0.246 0.246 0.1127

Call:VAR(y = vartsdif, p = 1, type = c("const"))  

Estimation results for equation Imp: ====================================

Imp = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const         

Estimate Std. Error t value Pr(>|t|)   

Imp.l1  -0.03671    0.15324  -0.240 0.811637   

PIB.l1   2.39362    0.62362   3.838 0.000343***

ITCR.l1 -1.02610    0.18442  -5.564  9.8e-07***

IPC.l1  -0.36276    1.06561  -0.340 0.734937   

IPI.l1  -0.49988    0.20977  -2.383 0.020935 * 

const   -0.02464    0.01676  -1.470 0.147572   

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  

Residual standard error: 0.05534 on 51 degrees of freedomMultiple R-Squared: 0.5336,  

Adjusted R-squared: 0.4878 F-statistic: 11.67 on 5 and 51 DF,  p-value: 1.526e-07   

Estimation results for equation PIB: ====================================

PIB = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const          

Estimate Std. Error t value Pr(>|t|)   

Imp.l1   0.035064   0.039190   0.895 0.375146   

PIB.l1   0.013265   0.159482   0.083 0.934039   

ITCR.l1 -0.055598   0.047162  -1.179 0.243921   

IPC.l1   0.376635   0.272512   1.382 0.172970   

IPI.l1  -0.027472   0.053645  -0.512 0.610786   

const    0.016995   0.004285   3.966 0.000229 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.01415 on 51 degrees of freedomMultiple R-Squared: 0.1439,  

Adjusted R-squared: 0.05998 F-statistic: 1.715 on 5 and 51 DF,  p-value: 0.1481  

 Estimation results for equation ITCR: =====================================

ITCR = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const          

Estimate Std. Error t value Pr(>|t|) 

Imp.l1   0.159228   0.134766   1.182   0.2429 

PIB.l1  -0.852277   0.548425  -1.554   0.1264  ITCR.l1  0.359478   0.162182   2.217   0.0311*

IPC.l1   0.954076   0.937113   1.018   0.3134  IPI.l1   0.132829   0.184474   0.720   0.4748  const    0.003864   0.014736   0.262   0.7942 

---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  

Residual standard error: 0.04867 on 51 degrees of freedomMultiple R-Squared: 0.1388,  

Adjusted R-squared: 0.05442 F-statistic: 1.645 on 5 and 51 DF,  p-value: 0.1651   

Estimation results for equation IPC: ====================================

IPC = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const          

Estimate Std. Error t value Pr(>|t|)   

Imp.l1   0.0009765  0.0208401   0.047 0.962809   

PIB.l1   0.0357765  0.0848078   0.422 0.674905   

ITCR.l1  0.0458987  0.0250796   1.830 0.073079 . 

IPC.l1   0.1038901  0.1449140   0.717 0.476701   

IPI.l1  -0.0494281  0.0285268  -1.733 0.089195 . 

const    0.0094404  0.0022788   4.143 0.000129 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  Residual standard error: 0.007526 on 51 degrees of freedomMultiple

R-Squared: 0.1889,   Adjusted R-squared: 0.1094 F-statistic: 2.376 on 5 and 51 DF,  p-value: 0.05168   Estimation results for equation

IPI: ====================================

IPI = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const         

Estimate Std. Error t value Pr(>|t|) 

Imp.l1   0.01449    0.14376   0.101   0.9201 

PIB.l1   0.71627    0.58502   1.224   0.2264 

ITCR.l1 -0.37783    0.17300  -2.184   0.0336 *

IPC.l1   1.20772    0.99964   1.208   0.2326 

IPI.l1  -0.24866    0.19678  -1.264   0.2121 

const   -0.02399    0.01572  -1.526   0.1332 

---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  Residual standard error: 0.05192 on 51 degrees of freedomMultiple R-Squared: 0.2541,   Adjusted R-squared: 0.181 F-statistic: 3.475 on 5 and 51 DF,  p-value: 0.008875   

 Covariance matrix of residuals:         

   Imp  PIB   ITCR    IPC      IPI

Imp   3.063e-03 0.0003367  0.0003222 -9.255e-05 0.0016617

PIB   3.367e-04 0.0002003  0.0001261  9.900e-06  0.0001927

ITCR  3.222e-04 0.0001261  0.0023686 -1.087e-04  0.0009217IPC  -9.255e-05 0.0000099 -0.0001087  5.664e-05 -0.0002651

IPI   1.662e-03 0.0001927  0.0009217 -2.651e-04  0.0026952 

Correlation matrix of residuals:        

Imp     PIB    ITCR      IPC     IPI

Imp   1.0000 0.42988  0.1196 -0.22220  0.5784

PIB   0.4299 1.00000  0.1831  0.09294  0.2622

ITCR  0.1196 0.18308  1.0000 -0.29669  0.3648

IPC  -0.2222 0.09294 -0.2967  1.00000 -0.6786

IPI   0.5784 0.26220  0.3648 -0.67856  1.0000

Es posible también obtener el resumen por cada ecuación:

summary(ModeloVAR, equation="IPC")

 summary(ModeloVAR, equation="IPC")
VAR Estimation Results:
=========================
Endogenous variables: Imp, PIB, ITCR, IPC, IPI

Deterministic variables: const
Sample size: 57
Log Likelihood: 684.493
Roots of the characteristic polynomial:
0.2754 0.2754 0.246 0.246 0.1127
Call:
VAR(y = vartsdif, p = 1, type = c("const"))

Estimation results for equation IPC:
====================================
IPC = Imp.l1 + PIB.l1 + ITCR.l1 + IPC.l1 + IPI.l1 + const

Estimate Std. Error t value Pr(>|t|)
Imp.l1 0.0009765 0.0208401 0.047 0.962809
PIB.l1 0.0357765 0.0848078 0.422 0.674905
ITCR.l1 0.0458987 0.0250796 1.830 0.073079 .
IPC.l1 0.1038901 0.1449140 0.717 0.476701
IPI.l1 -0.0494281 0.0285268 -1.733 0.089195 .
const 0.0094404 0.0022788 4.143 0.000129 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.007526 on 51 degrees of freedom
Multiple R-Squared: 0.1889, Adjusted R-squared: 0.1094
F-statistic: 2.376 on 5 and 51 DF, p-value: 0.05168

Covariance matrix of residuals:
Imp PIB ITCR IPC IPI
Imp 3.063e-03 0.0003367 0.0003222 -9.255e-05 0.0016617
PIB 3.367e-04 0.0002003 0.0001261 9.900e-06 0.0001927
ITCR 3.222e-04 0.0001261 0.0023686 -1.087e-04 0.0009217
IPC -9.255e-05 0.0000099 -0.0001087 5.664e-05 -0.0002651
IPI 1.662e-03 0.0001927 0.0009217 -2.651e-04 0.0026952

Correlation matrix of residuals:
Imp PIB ITCR IPC IPI
Imp 1.0000 0.42988 0.1196 -0.22220 0.5784
PIB 0.4299 1.00000 0.1831 0.09294 0.2622
ITCR 0.1196 0.18308 1.0000 -0.29669 0.3648
IPC -0.2222 0.09294 -0.2967 1.00000 -0.6786
IPI 0.5784 0.26220 0.3648 -0.67856 1.0000

En la parte superior las raices indican estabilidad en el modelo dado que son menores a uno. Se presentan la significancia de cada coeficiente en cada ecuación. También informa del error cuadrático medio o error estándar de los residuales y el coeficiente de determinación para cada ecuación. Los estadísticos indican poco ajuste, dado que la prueba F muestra no significancia global. Por último se presentan las matrices de covarianza y correlación de los residuales.

 

Pruebas al modelo

Para ver si el modelo cumple con estacionareidad de múltiples variables. Al ser todas menores que uno este modelo cumple con el supuesto de estacionareidad. 

roots(ModeloVAR)

[1] 0.2754434 0.2754434 0.2460165 0.2460165 0.1126599 

Comprobación de la autocorrelación en los errores

Se utilizará la prueba Breusch- Godfrey, por medio del comando serial.test

 Portmanteau Test (asymptotic)

data: Residuals of VAR object ModeloVAR
Chi-squared = 395.98, df = 375, p-value = 0.2187

Se confirma la no autocorrelación de los errores

Prueba de normalidad de los errores 

Para realizar la prueba de normalidad de los errores se utiliza el comando normality.test, cuyos argumentos indican: en primer lugar el objeto que contiene al modelo VAR estimado, posteriormente se indica si se desea usar solo estadísticos multivariados.

 normality.test(ModeloVAR, multivariate.only=FALSE)$Imp        

JB-Test (univariate) 

data:  Residual of Imp equationChi-squared = 1.8112, df = 2, p-value = 0.4043 

$PIB        

JB-Test (univariate) 

data:  Residual of PIB equation

Chi-squared = 0.33937, df = 2, p-value = 0.8439  

$ITCR        

JB-Test (univariate) 

data:  Residual of ITCR equation

Chi-squared = 9.2382, df = 2, p-value = 0.009862  

$IPC        

JB-Test (univariate) 

data:  Residual of IPC equation

Chi-squared = 7.6193, df = 2, p-value = 0.02216  

$IPI        

JB-Test (univariate) 

data:  Residual of IPI equation

Chi-squared = 3.6073, df = 2, p-value = 0.1647 

 $JB        

JB-Test (multivariate)

 data:  Residuals of VAR object ModeloVAR

Chi-squared = 27.965, df = 10, p-value = 0.001829 

 $Skewness        

Skewness only (multivariate) 

data:  Residuals of VAR object ModeloVAR

Chi-squared = 16.813, df = 5, p-value = 0.004869 

 $Kurtosis        

Kurtosis only (multivariate)

 data:  Residuals of VAR object ModeloVAR

Chi-squared = 11.152, df = 5, p-value = 0.04845

En este caso se obtuvieron los estadísticos tanto multivariados como univariados. Dados los resultados es posible determinar que el modelo no tiene una distribución normal de los errores

 Prueba de causalidad de granger

La prueba de causalidad de Granger determina si una variable causa a otra en el sentido de granger, siendo Ho:X no causa en el sentido de Granger a Y, de lo que se puede extraer que X no sirve para pronosticar el comportamiento de y por lo que no sería adecuada para observar el comportamiento de impulso respuesta.

En R el código utilizado es grangertest, cuyo primer argumento se refiere a la variable que va a ser explicada en relación (~) a la variable explicativa, “order” se refiere al número de rezagos incluidos en el modelo, se le indica también de que base de datos se están extrayendo los datos:

grangertest(Imp~ PIB,order=1,data=vartsdif)

 Granger causality test

 Model 1: Imp ~ Lags(Imp, 1:1) + Lags(PIB, 1:1)

Model 2: Imp ~ Lags(Imp, 1:1)

  Res.Df Df      F Pr(>F)

1     54                

2     55 -1 2.4428 0.1239

grangertest(Imp~ IPC,order=1,data=vartsdif)

Granger causality test Model 1: Imp ~ Lags(Imp, 1:1) + Lags(IPC, 1:1)Model 2: Imp ~ Lags(Imp, 1:1)  Res.Df Df      F  Pr(>F)  1     54                    2     55 -1 6.2496 0.01549 *---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Los anteriores resultados muestran que PIN no causa en el sentido fe grenger a Imp, mientras que IPC si causa a Imp en el sentido de grenger con un nivel de significancia del 5%

Predicción

Es necesario instalar y activar el paquete “forecast”, para utilizar la función predict cuyos argumentos son: el modelo con el cual se va a pornosticar, los periodos a pronosticar y los intervalos de confianza.

install.packages("forecast")

library(forecast)

pronovar<-predict(ModeloVAR, n.ahead = 10, ci = 0.95)

 

MODELO VEC

Cuando la regresión de series no estacionarias conduce a un estimador MCO correcto quiere decir que las series están cointegradas, esta situación permite que la combinación lineal de dos o más series no estacionarias, sea estacionaria.

La interpretación de las series cointegradas puede ser la relación de equilibrio a largo plazo entre las variables consideradas, por lo que encontrar estas relaciones puede ser muy útil en el campo económico

Dentro de la cointegración se puede observar la relación a largo plazo y la dinámica de las variable es en el corto plazo en el sentido de: la relaciones entre la variable explicativa respecto a la tendencia del corto plazo y las desviaciones de la variable explicada respecto a la tendencia de corto plazo, por lo anterior diferenciar los datos sería perjudicial ya que elimina la tendencia de las variables, el modelo VEC (vector de corrección de error) conserva toda la información.

 

Ejemplo práctico en R

Lo primero es subir la base de datos a R, ya que está en fromato Excel se usará la función read_excel:

 BaseVEC<- read_excel(file.choose())

Se define el objeto serie de tiempo en R teniendo en cuenta que la base tiene datos mensuales desde enero de 1980 hasta diciembre de 1998

vects<-ts(BaseVEC, start=1980, freq=12)

vects

Se realizan los graficos de las series para si hay relación de comportamiento entre las dos variables 

 plot.ts(vects)

vec

Se puede observar que el comportamiento de las dos variables está bastante relacionada:

El primer paso para estimar un VEC es determinar los rezagos del modelo para lo cual se utiliza el comando VARorder, el cual arroja según criterios de información ya mencionados anteriormente cuantos rezagos se sugieren. Para utilizar esta función es necesario  instalar y activar el paquete “MTS”

 install.packages("MTS")

library("MTS")

VARorder(vectsdif,maxp=10)

selected order: aic =  10

selected order: bic = 10

selected order: hq =  10

Summary table:         p     AIC    

BIC      HQ     M(p) p-value [1,]  0 20.2326 20.2326 20.2326   0.0000  0.0000 [2,]  1 19.7498 19.8102 19.7742 110.5891  0.0000

[3,]  2 19.4787 19.5994 19.5274  64.7961  0.0000

[4,]  3 19.0961 19.2772 19.1692  87.5340  0.0000

[5,]  4 18.9716 19.2130 19.0690  33.1518  0.0000

[6,]  5 18.8424 19.1442 18.9642  33.7872  0.0000

[7,]  6 18.7862 19.1483 18.9323  18.6216  0.0009

[8,]  7 18.7257 19.1481 18.8961  19.2887  0.0007

[9,]  8 18.7100 19.1929 18.9049  10.1476  0.0380

[10,]  9 18.5168 19.0600 18.7360  45.1243  0.0000

[11,] 10 18.2849 18.8884 18.5285  52.2223  0.0000

El siguiente paso identificar el número de cointegraciones, en el objeto coi se utiliza la función ca.jo que utiliza el objeto veectsdif, por medio del comando summary, se obtiene información más detallada de la prueba:

 

Coi<-ca.jo(vectsdif, type="eigen",spec="transitory",ecdet="none",K=2)

summary(Coi)

######################

# Johansen-Procedure #

######################

 

Test type: maximal eigenvalue statistic (lambda max) , with linear trend

 

Eigenvalues (lambda):

[1] 0.6039808 0.2723840

 

Values of teststatistic and critical values of test:

 

           test 10pct  5pct  1pct

r <= 1 |  71.55  6.50  8.18 11.65

r = 0  | 208.42 12.91 14.90 19.19

 

Eigenvectors, normalised to first column:

(These are the cointegration relations)

 

          CRED.l1      M1.l1

CRED.l1   1.00000 1.00000000

M1.l1   -19.03271 0.03915476

 

Weights W:

(This is the loading matrix)

CRED.l1      M1.l1

CRED.d -0.02543999 -0.5508066

M1.d    0.10485649 -0.0459129

En la salida anterior, se rechaza la hipótesis nula de no cointegración y no rechazamos la hipótesis nula de a lo sumo una ecuación de cointegración. Por lo tanto concluimos que hay una ecuación de cointegración en el modelo bivariado.

Estimación del modelo VEC, se crea un objeto que contendrá el modelo, por medio de la función cajorls cuyo primer argumento es el objeto que determina el número de cointegracioes y cuyo segundo elemento es el rango de cointegración, se estimará el modelo

 ModVEC<-cajorls(Coi,r=1)

$rlm

 

Call:

lm(formula = substitute(form1), data = data.mat)

 

Coefficients:

          CRED.d    M1.d   

ect1      -0.02544   0.10486

constant  -6.00409  18.34013

CRED.dl1  -0.04831   0.04313

M1.dl1     0.44448   0.60218

 

$beta

             ect1

CRED.l1   1.00000

M1.l1   -19.03271

 

 

Response CRED.d :

Call:

lm(formula = CRED.d ~ ect1 + constant + CRED.dl1 + M1.dl1 - 1,

    data = data.mat)

Residuals:

Min       1Q   Median       3Q      Max

-1962.15  -127.15    26.98   119.45   895.49

Coefficients:

Estimate Std. Error t value Pr(>|t|)

ect1     -0.02544    0.02156  -1.180    0.239

constant -6.00409   18.01438  -0.333    0.739

CRED.dl1 -0.04831    0.07304  -0.661    0.509

M1.dl1    0.44448    0.27113   1.639    0.103

 

Residual standard error: 265.2 on 221 degrees of freedom

Multiple R-squared:  0.117,   Adjusted R-squared:  0.101

F-statistic: 7.319 on 4 and 221 DF,  p-value: 1.493e-05

 

Response M1.d :

 

Call:

lm(formula = M1.d ~ ect1 + constant + CRED.dl1 + M1.dl1 - 1,

    data = data.mat)

 

Residuals:

     Min       1Q   Median       3Q      Max

-248.177  -31.894   -8.361   23.227  293.271

 

Coefficients:

Estimate Std. Error t value Pr(>|t|)   

ect1      0.104856   0.005986  17.516  < 2e-16 ***

constant 18.340132   5.002892   3.666 0.000309 ***

CRED.dl1  0.043129   0.020285   2.126 0.034598 * 

M1.dl1    0.602180   0.075296   7.998 7.06e-14 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 73.66 on 221 degrees of freedom

Multiple R-squared:  0.6903, Adjusted R-squared:  0.6847

F-statistic: 123.1 on 4 and 221 DF,  p-value: < 2.2e-16

Por último, se muestran la significancia de los coeficientes obtenidos mediante el modelo VEC estimado.