Facultad de Derecho y Ciencia Politica

Escuela de Ciencia Política

Guia de Clase de ESTADISTICA


REGRESION LINEAL

Data de Pavimentando con votos:

La data puedes descargarla de aquí.

Paso 1: Preparando datos

  • Lectura DE DATOS

Como los datos los tengo en el formato mostrado, los traigo desde GoogleSheets:

link="https://docs.google.com/spreadsheets/d/e/2PACX-1vTLwlJ0dQJCuiidZvNH121tKRKCkpecEpdPolQO60oQ0SuAO66bVSZwTLtFJgXYeUiTSQJ5ripcwEv9/pub?gid=0&single=true&output=csv"

paviData=read.csv(link, stringsAsFactors = F)
  • Revisando estructura
str(paviData)
## 'data.frame':    1096 obs. of  8 variables:
##  $ apropiaciondolar  : num  102.2 62.8 0 0 0 ...
##  $ priorizado        : chr  "no" "no" "si" "no" ...
##  $ pctopo            : num  14.8 33.6 55.4 63.4 74.5 ...
##  $ uribista          : chr  "no" "no" "no" "no" ...
##  $ con_consejocomunal: chr  "no" "no" "no" "no" ...
##  $ ejecucion         : chr  "no" "no" "no" "no" ...
##  $ poblacioncienmil  : num  20.92 0.39 0.11 0.17 0.08 ...
##  $ nbi               : num  12.2 21.6 31.2 45.3 63.9 ...

Los nombres de la variables NO deben tener espacios ni tildes ni Ñs.

Las números no deben aparecer entre comillas, si eso sucede, quiere decir que el numero tiene simbolos como “comas”, elimina eso desde el original. Tambien puede ser porque hay alguna celda con algun valor inapropiado (quizas una X, un “-”, etc.), esos se deben eliminar y dejar la celda vacía.

Las variables categoricas que se muestran, han sido leídas como texto. Hay que volverlas categóricas usando la función “as.factor”:

# columnas 2 y de la 4 ala 6:

paviData[,c(2,4:6)]=lapply(paviData[,c(2,4:6)],as.factor)
  • Eliminar valores perdidos
paviData=paviData[complete.cases(paviData),]

Paso 2: Estadisticos de las variables

summary(paviData)
##  apropiaciondolar  priorizado     pctopo      uribista con_consejocomunal
##  Min.   :  0.000   no:790     Min.   : 0.00     :184   no:1001           
##  1st Qu.:  0.000   si:270     1st Qu.: 6.24   no:325   si:  59           
##  Median :  0.000              Median :20.39   si:551                     
##  Mean   :  8.448              Mean   :27.97                              
##  3rd Qu.: 10.560              3rd Qu.:45.70                              
##  Max.   :132.640              Max.   :99.42                              
##  ejecucion poblacioncienmil       nbi       
##  no:1021   Min.   : 0.0000   Min.   : 5.36  
##  si:  39   1st Qu.: 0.0700   1st Qu.:28.30  
##            Median : 0.1400   Median :41.27  
##            Mean   : 0.4143   Mean   :42.94  
##            3rd Qu.: 0.2700   3rd Qu.:55.49  
##            Max.   :69.2700   Max.   :98.81

Note que Uribista tiene un valor extraño:

levels(paviData$uribista)
## [1] ""   "no" "si"

De ahi que:

levels(paviData$uribista)[levels(paviData$uribista)==''] = NA

Otra alternativa

library(Hmisc)
# NO MUESTRO RESULTADO
Hmisc::describe(paviData)

Paso 3: Análisis de la Dependiente

Quiero saber:

  1. Es la variable dependiente normal: para elegir pruebas no parametricas bivariadas.
  2. Si hay asimetría, habrán atípicos: los atípicos complican todo!

1. Verificar normalidad:

Usemos prueba Shapiro-Wilk:

shapiro.test(paviData$apropiaciondolar)
## 
##  Shapiro-Wilk normality test
## 
## data:  paviData$apropiaciondolar
## W = 0.595, p-value < 2.2e-16

Como el p-value es menor que 0.05, se confirma que la variable no es similar a la curva normal.

2. Verificar asimetría y si hay atípicos:

# Variable dependiente:
# Apropiacion presupuestal en millones US$: 'apropiaciondolar'

library(DescTools) # instalar antes

Skew(paviData$apropiaciondolar)
## [1] 2.708773

Ahora sabemos que hay cola a la derecha (asimetría positiva). La medida de resumen es la mediana cuando hay asimetría.

Podemos verlo en el los gráficos:

  • Histograma
library(ggplot2)

base=ggplot(data=paviData, aes(x=apropiaciondolar))
base+geom_histogram(bins=20) #usar 20 siempre

  • Diagrama de cajas

Con el diagrama de cajas, identificamos si hay atípicos

base=ggplot(data=paviData, aes(y=apropiaciondolar))
base+geom_boxplot() + coord_flip()

Notese la presencia de atipicos.

Paso 4: Análisis Bivariado

El analisis bivariado es la Variable dependiente versus todas las independientes:

# HIPOTESIS:
#### a) criterios técnicos: 'priorizado'
#### Ha: "appropiacion" tiene relacion directa con "priorizado".

#### b) clientelismo: 
####### b.1 porcentaje de la oposicion:'pctopo'
#### Hb1: "appropiacion" tiene relacion directa con "pctopo"
####### b.2 municipio lo gano o no partido afin al ejecutivo: 'uribista'
#### Hb2: "appropiacion" tiene relacion directa con "uribista"

#### c) populismo:
####### c.1 los municipios en los que se han realizado Consejos Comunales: 'consejocomunal'
#### Hc1: "appropiacion" tiene relacion directa con 'consejocomunal'
# c.2 los municipios donde se habían prometido 'ejecucion'
#### Hc2: "appropiacion" tiene relacion directa con 'ejecucion'

Entonces:

** Ha: “appropiacion” tiene relacion directa con “priorizado”:

Veamos la apropiación promedio por grupo:

Ha=formula(apropiaciondolar ~ priorizado)
aggregate(Ha, data=paviData,median) 
##   priorizado apropiaciondolar
## 1         no            0.000
## 2         si            0.655

Veamos gráfico de cada grupo:

base=ggplot(data=paviData, aes(x=priorizado,y=apropiaciondolar))
base+geom_boxplot() + coord_flip()

Prueba no paramétrica que informa si un grupo tiene distribución que se diferencia de la otra:

wilcox.test(Ha,data=paviData)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  apropiaciondolar by priorizado
## W = 96581, p-value = 0.01152
## alternative hypothesis: true location shift is not equal to 0

Por el p-valor rechazamos con uns significancia de 0.01 que las medianas sean las mismas: osea, habría efecto de la variable priorizado en apropiación.

Hb1: “appropiacion” tiene relacion directa con “pctopo”

Hb1=formula(~ apropiaciondolar + pctopo)
cor.test(Hb1,data=paviData,method = "spearm",exact=F)
## 
##  Spearman's rank correlation rho
## 
## data:  apropiaciondolar and pctopo
## S = 205100315, p-value = 0.2796
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##         rho 
## -0.03323799

El p.valor nos sugiere rechazar la existencia de correlación con una significancia de 0.279, de ahi que el rho (-0.033) puede interpretarse como 0 (el Spearman va de -1 a 1).

Veamos la gráfica:

library(ggpubr)
## Loading required package: magrittr
ggscatter(paviData, 
          x = "pctopo", y = "apropiaciondolar",
          cor.coef = TRUE, 
          cor.method = "spearman",
           add = "reg.line",
          add.params = list(color = "blue", fill = "lightgray"),
          conf.int = TRUE) 

Hb2: “appropiacion” tiene relacion directa con “uribista”

Veamos estadísticos:

Hb2=formula(apropiaciondolar ~ uribista)
aggregate(Hb2, data=paviData,median) 
##   uribista apropiaciondolar
## 1       no                0
## 2       si                0

Serían distribuciones iguales?

wilcox.test(Hb2,data=paviData)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  apropiaciondolar by uribista
## W = 95048, p-value = 0.09883
## alternative hypothesis: true location shift is not equal to 0

Por el p-valor no rechazaríamos la igualdad de medianas con una significancia de 0.09. Osea, no hay efecto de la variable uribista.

Veamoslo gráficamente:

base=ggplot(data=paviData, aes(x=uribista,y=apropiaciondolar))
base+geom_boxplot() + coord_flip()

Hc1: “appropiacion” tiene relacion directa con ‘consejocomunal’

Hc1=formula(apropiaciondolar ~ con_consejocomunal)
aggregate(Hc1, data=paviData,median) 
##   con_consejocomunal apropiaciondolar
## 1                 no             0.00
## 2                 si            16.92

Parece que hay diferencias:

wilcox.test(Hc1,data=paviData)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  apropiaciondolar by con_consejocomunal
## W = 14004, p-value = 1.32e-13
## alternative hypothesis: true location shift is not equal to 0

Por el p-valor rechazamos la igualdad de medianas con una significancia de 0.13e-14. Osea, hay efecto de la variable con_consejocomunal.

Gráficamente:

base=ggplot(data=paviData, aes(x=con_consejocomunal,y=apropiaciondolar))
base+geom_boxplot() + coord_flip()

Hc2: “appropiacion” tiene relacion directa con ‘ejecucion’

Hc2=formula(apropiaciondolar ~ ejecucion)
aggregate(Hc2, data=paviData,median) 
##   ejecucion apropiaciondolar
## 1        no             0.00
## 2        si             0.99

Gráficamente:

base=ggplot(data=paviData, aes(x=ejecucion,y=apropiaciondolar))
base+geom_boxplot() + coord_flip()

wilcox.test(Hc2,data=paviData)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  apropiaciondolar by ejecucion
## W = 17497, p-value = 0.1612
## alternative hypothesis: true location shift is not equal to 0

Por el p-valor aceptamos que las medianas no serían diferentes. Osea, NO hay efecto de la variable ejecucion.

Paso 5: Análisis Regresión

Dado que data tiene todas las variables:

names(paviData)
## [1] "apropiaciondolar"   "priorizado"         "pctopo"            
## [4] "uribista"           "con_consejocomunal" "ejecucion"         
## [7] "poblacioncienmil"   "nbi"

Podemos usar:

paviModeloOrd=lm(apropiaciondolar~.,data=paviData)
summary(paviModeloOrd)
## 
## Call:
## lm(formula = apropiaciondolar ~ ., data = paviData)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -60.200  -8.208  -5.877   2.512  92.495 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          14.13107    1.67647   8.429  < 2e-16 ***
## priorizadosi         -2.21440    1.18713  -1.865  0.06247 .  
## pctopo               -0.03096    0.02126  -1.456  0.14562    
## uribistasi           -2.57304    1.09185  -2.357  0.01867 *  
## con_consejocomunalsi 14.05085    2.32445   6.045 2.22e-09 ***
## ejecucionsi           2.95645    2.80751   1.053  0.29261    
## poblacioncienmil      1.83856    0.20023   9.182  < 2e-16 ***
## nbi                  -0.09290    0.02941  -3.159  0.00164 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 15.38 on 868 degrees of freedom
##   (184 observations deleted due to missingness)
## Multiple R-squared:  0.1751, Adjusted R-squared:  0.1684 
## F-statistic: 26.32 on 7 and 868 DF,  p-value: < 2.2e-16

Por lo tanto:

  1. Cuando un proyecto está priorizado la asignación presupuestal promedio disminuye (relación inversa). El efecto que un proyecto priorizado disminuye la asignación promedio en -2.21440 millones de dolares. Este efecto es significativo al 0.1.

  2. El porcentaje de voto de la oposición no tiene efecto significativo (ni al 0.05, ni a 0.1).

  3. Cuando un municipio tiene alcalde que es Uribista la asignación presupuestal promedio disminuye (relación inversa). El efecto que haya alcalde Uribista disminuye la asignación promedio en -2.57304 millones de dolares. Este efecto es significativo al 0.05.

  4. Cuando un municipio tiene Consejo Comunal la asignación presupuestal promedio aumenta (relación directa). El efecto que haya Consejo Comunal aumenta la asignación promedio en 14.05085 millones de dolares. Este efecto es significativo al 0.001.

  5. Cuando un Consejo Comunal recibió promesa de ejecución no tiene efecto sobre la asignación presupuetal.