Prueba Final

Regresion + funciones

Para LIMPIAR DATA

A) Evitamos espacios en blanco

dataframe[,]=lapply(dataframe[,],trimws,whitespace=“[\h\v]”)

B) Nombres sin simbolos “raros”

names(dataframe)=str_replace_all(names(dataframe),“[^[:ascii:]]”,"")

C) Valores del data frame sin simbolos “raros”

dataframe[,]=lapply(dataframe[,],str_replace_all,“[^[:ascii:]]”,"")

D) Eliminar columnas que no se usaran y que se podrian recalcular

names(dataframe)

dataframe$colummna a eliminar =NULL

E) Explorando valores perdidos / Sacamos NULL bc es identificador nomas

dataframe[!complete.cases(dataframe),]

dataframe$columna eliminada =NULL

F) Eliminado valores perdidos

dataframe=dataframe[complete.cases(dataframe),]

GENERALIDADES

Comprobar la Normalidad

Para contrastar la normalidad se usa Shapiro-Wilk con shapiro.test() Si el p-value es mayor a 0.05 => aceptamos la hipótesis nula Es normal y Parametrica

SI LA DEPENDIENTE ES ANORMAL TODO EL CÁLCULO BIVARIADO DEBE SER DADO EN ANORMAL (NO PARAMÉTRICO)

Estudiar Correlacion

La correlacion mide el grado de asociacion entre las dos o mas variables. el coeficiente de correlacion lineal de Pearson(para PARAMETRICA) contrasta la correlacion lineal.

cor.test(df\(V1,df\)V2)

La correlacion negativa => indica que las variables estan asociadas de forma inversa,

El coeficiente Person significativo si es menor de 0.05

Spearman es para NO PARAMTRICA hace los mismo para la correlacion

Ajustando el Modelo a Regresion Lineal Simple

Hacemos la regresión lineal la función lm( y ~ x, data).

Examinamos los coeficientes del modelo de regresión con la función summary( )

Para el analisis de Regresion

Concepto : La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente o respuesta (Y) se determina a partir de un conjunto de variables independientes llamadas predictores (X1, X2, X3…).

Los modelos de regresión múltiple pueden emplearse para predecir el valor de la variable dependiente o para evaluar la influencia que tienen los predictores sobre ella (esto último se debe que analizar con cautela para no malinterpretar causa-efecto)

El comando básico es lm (linear models). El primer argumento de este comando es una fórmula y ~ x en la que se especifica cuál es la variable respuesta o dependiente (y) y cuál es la variable regresora o independiente (x).

regresion <- lm(grasas ~ edad, data = grasas) summary(regresion)

. Relación IP al ser el “estimate” negativo

. Relación DP al ser el “estimate” positivo

. Leer signif. code para observar el cálculo de la significatividad

. Acercarse a 0 (’*’ ∧ ‘.’) = El nivel con el que se afecta a la variable dependiente aumenta

. No es significativo algo (efecto en) al no haber nada, ni ‘.’ ni ’*’

Aplicando Regresion

Extrayendo data la de pag web

Ejemplo: Caso Pavimentando Datos

Relacion de Variables:

Variable Dep => Apropiacion dolar (y)

Variables Indep => Priorizado (x1) Pctopo (x2) Uribista x3) con_consejocomunal (x4) ejecucion (x5) poblacioncienmil (x6) nbi (x7)

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

pavData=read.csv(link,stringsAsFactors = F)

Revisando estructura

str(pavData)
## '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 ...

Covertimos categorias de chr a la funcion as.factor

# columnas 2 y de la 4 a la 6:

pavData[,c(2,4:6)]=lapply(pavData[,c(2,4:6)],as.factor)

Eliminamos valores perdidos

pavData=pavData[complete.cases(pavData),]

Estadisticos de las variables

summary(pavData)
##  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

Ojo Uribista tiene un valor extraño

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

De ahi que:

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

Analisis de la Variable Dependiente

Quiero saber:

  1. Es la variable dependiente normal: Para eligir pruebas No Parametricas Bivariadas
  2. Si hay asimetria , habra Atipicos : atipicos complican

Verificamos Normalidad

Usamos Shapìro Wilk

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

Como el p-value es menor a 0.05 se confirma la variables no es similar ala curva Normal

Verificar asimetria y si hay atipicos

Recordemos:

V Dep => Apropiacion dolar

library(DescTools)
Skew(pavData$apropiaciondolar)
## [1] 2.708773

es positivo asi que tiene una cola a la derecha; es asimetria positiva. La medida de resumen es la mediana cuando hay asimetria.

Viendo en grafico

library(ggplot2)

base=ggplot(data = pavData,aes(x=apropiaciondolar))

base+geom_histogram(bins = 20)     #usar 20 siempre

Lo que se interpreta del grafico es lo siguiente: No hay simetria

Usamos diagrama de caja, asi verificamos si hay atipicos

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

Como figuran (.) se dice que hay atipicos

Ahora hacemos el analisis bivariado y relacionamos las variables

# V Dep vs V Indeps

# V Dep: **aprociacion**dolar
# V Indeps: 3 ejes

## 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 : “apropiacion” tiene relacion directa por “priorizado”

Apropiacion por promedio :

Ha=formula(apropiaciondolar ~ priorizado)

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

Ahora esto mismo, pero en un grafico

base=ggplot(data = pavData, 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 = pavData)
## 
##  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

p-value es de 0.01 (significancia) => Se rechaza que las medianas sean las mismas Habria efecto de la variable priorizado en la variable apropiacion

Analizando variable indep Hb1: pctopo

Apropiacion tiene relacion directa con pctopo ? Usamos Spearman

Hb1=formula(~ apropiaciondolar + pctopo)
cor.test(Hb1,data=pavData,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).

Ahora veamos con una grafica:

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

Hb2: Apropiacion tiene una relacion directa con uribista ?

primero vemos los estadisticos

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

mmm…seran distribuciones iguales?

wilcox.test(Hb2,data = pavData)
## 
##  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

p-value: 0.09 Se rechaza que las medianas sean iguales o sea : Hay un efecto de la variable Uribista

Veamos en un grafico

base=ggplot(data = pavData,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=pavData,median) 
##   con_consejocomunal apropiaciondolar
## 1                 no             0.00
## 2                 si            16.92

Parece que hay diferencias: USamos Wilcox

wilcox.test(Hc1,data=pavData)
## 
##  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=pavData, 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=pavData,median) 
##   ejecucion apropiaciondolar
## 1        no             0.00
## 2        si             0.99

Gráficamente:

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

wilcox.test(Hc2,data=pavData)
## 
##  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(pavData)
## [1] "apropiaciondolar"   "priorizado"         "pctopo"            
## [4] "uribista"           "con_consejocomunal" "ejecucion"         
## [7] "poblacioncienmil"   "nbi"

Podemos usar:

paviModeloOrd=lm(apropiaciondolar~.,data=pavData)
summary(paviModeloOrd)
## 
## Call:
## lm(formula = apropiaciondolar ~ ., data = pavData)
## 
## 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 sí 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 sí 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 sí 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 sí recibió promesa de ejecución no tiene efecto sobre la asignación presupuetal.