1 Conceptos básicos

1.1 Data

  • Data es la información que está compuesta por un conjunto de observaciones.

  • La data es lo que se analiza estadísticamente

  • La generación de data se puede llevar a cabo de diferentes maneras (registros, encuestas, experimentos, observación directa, etc)

  • Con mucha frecuencia se analiza data que ya existe

1.2 Bases de datos

Existen dos tipos principales de bases de datos:

  1. Encuesta de opinión: Una muestra de la población
    • Encuesta Nacional de Hogares (ENAHO)
  2. Datos registrales: Datos de toda la población
    • Registro Nacional de Municipalidades (RENAMU)

Asimismo, por lo general esta data está contenida en base de datos y los archivos pueden estar contenidos en los siguientes programas:

  • Stata: (base_de_datos.dta)
  • SPPS:(base_de_datos.sav)
  • R: (base_de_datos.Rdata)
  • Excel: (base_de_datos.xlsx) o (base_de_datos.csv)

1.3 Mediciones

La medición es la asignación de símbolos, tanto nombres como números, a las diferencias que observamos en las cualidades o cantidades de una variable.

1.4 Variable

  • Una variable es cualquier característica que puede ser medida para un sujeto, individuo o caso
  • Una variable es una característica que puede variar en su valor entre los sujetos que son parte de una muestra o una población.
  • El tipo de categorías o valores que encontramos dentro de una variable es lo que determina su escala de medición.

1.5 Tipos de variables

  • Categórica: su escala de medición es un conjunto de categorías. Dicotómicas o politómicas
    • Nominal: Tiene DNI, cuenta con SOAT, etc
    • Ordinal: Nivel educativo, Rango militar, etc
  • Numérica: su escala de medición posee valores numéricos y esos valores representan magnitudes
    • Continua: Número infinito con decimales
    • Discreta: Valores finitos o enteros
    • Intervalo: Punto en el valor 0, como la temperatura
    • Razón: El 0 indica la ausencia de atributo, como el peso en kg

1.6 Tipos de datos

  • Entero: 2 (integer)
  • Numérico: 3.24 (numeric)
  • Cadena de texto: “dos” (character)
  • Factor: dos (factor)
  • Lógico: TRUE/FALSE (logical)
  • Perdido: NA
  • Vacío: NULL
  • Fecha: 20-10-2021 (Date)

2 Estadística Descriptiva

Subimos la data que emplearemos

options(warn = -1)
library(rio)
data_sf = import("reporteros_sin_fronteras_2022.csv")
str(data_sf)
## 'data.frame':    180 obs. of  12 variables:
##  $ #          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Pais       : chr  "Noruega" "Dinamarca" "Suecia" "Estonia" ...
##  $ Puntuación : chr  "92,6493" "90,2671" "88,8421" "88,8293" ...
##  $ Situación  : chr  "Buena" "Buena" "Buena" "Buena" ...
##  $ Puesto_2021: int  1 4 3 15 2 12 9 5 28 23 ...
##  $ Evol       : int  0 2 0 11 -3 6 2 -3 19 13 ...
##  $ Rg_Pol     : int  1 2 3 5 6 9 4 17 11 20 ...
##  $ Rg_Leg     : int  1 4 3 5 9 14 18 6 16 15 ...
##  $ Rg_Eco     : int  1 3 2 6 5 8 9 11 13 19 ...
##  $ Rg_Soc     : int  2 9 12 13 10 4 3 4 16 14 ...
##  $ Rg_Seg     : int  11 7 32 6 10 2 18 3 23 1 ...
##  $ Continente : chr  "Europa" "Europa" "Europa" "Europa" ...
data_sf$Puntuación <- as.numeric(gsub(",", ".", data_sf$Puntuación))
str(data_sf)
## 'data.frame':    180 obs. of  12 variables:
##  $ #          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Pais       : chr  "Noruega" "Dinamarca" "Suecia" "Estonia" ...
##  $ Puntuación : num  92.6 90.3 88.8 88.8 88.4 ...
##  $ Situación  : chr  "Buena" "Buena" "Buena" "Buena" ...
##  $ Puesto_2021: int  1 4 3 15 2 12 9 5 28 23 ...
##  $ Evol       : int  0 2 0 11 -3 6 2 -3 19 13 ...
##  $ Rg_Pol     : int  1 2 3 5 6 9 4 17 11 20 ...
##  $ Rg_Leg     : int  1 4 3 5 9 14 18 6 16 15 ...
##  $ Rg_Eco     : int  1 3 2 6 5 8 9 11 13 19 ...
##  $ Rg_Soc     : int  2 9 12 13 10 4 3 4 16 14 ...
##  $ Rg_Seg     : int  11 7 32 6 10 2 18 3 23 1 ...
##  $ Continente : chr  "Europa" "Europa" "Europa" "Europa" ...
data_sf$Situación=as.factor(data_sf$Situación)
str(data_sf)
## 'data.frame':    180 obs. of  12 variables:
##  $ #          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Pais       : chr  "Noruega" "Dinamarca" "Suecia" "Estonia" ...
##  $ Puntuación : num  92.6 90.3 88.8 88.8 88.4 ...
##  $ Situación  : Factor w/ 5 levels "Buena","Difícil",..: 1 1 1 1 1 1 1 1 3 3 ...
##  $ Puesto_2021: int  1 4 3 15 2 12 9 5 28 23 ...
##  $ Evol       : int  0 2 0 11 -3 6 2 -3 19 13 ...
##  $ Rg_Pol     : int  1 2 3 5 6 9 4 17 11 20 ...
##  $ Rg_Leg     : int  1 4 3 5 9 14 18 6 16 15 ...
##  $ Rg_Eco     : int  1 3 2 6 5 8 9 11 13 19 ...
##  $ Rg_Soc     : int  2 9 12 13 10 4 3 4 16 14 ...
##  $ Rg_Seg     : int  11 7 32 6 10 2 18 3 23 1 ...
##  $ Continente : chr  "Europa" "Europa" "Europa" "Europa" ...
table(data_sf$Situación)
## 
##          Buena        Difícil Más bien buena      Muy grave   Problemática 
##              8             42             40             28             62

2.1 Medidas de tendencia central

Las medidas de tendencia central (moda, mediana y media) muestran la medición más típica o representativa de una determinada distribución. Una estadística de tendencia central proporciona una estimación de la puntuación típica común o normal encontrada en una distribución de puntuaciones en bruto.

  • Moda: valor que se repite -> nominal, ordinal, numérica
  • Mediana: posición central -> ordinal, numérica
  • Media: promedio -> numérica

2.1.1 Moda

  • La Moda es el valor que ocurre con mayor frecuencia
  • Es particularmente útil con variables categóricas nominales y categóricas ordinales
  • A esta mayor frecuencia de una determinado valor corresponde el significado de centralidad en variables categóricas

2.1.1.1 Moda en RStudio

table(data_sf$Situación)
## 
##          Buena        Difícil Más bien buena      Muy grave   Problemática 
##              8             42             40             28             62
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data_sf %>%                      ## Paso 1: DATA    
  dplyr::count(Situación=Situación, name = "Frecuencia") 
##        Situación Frecuencia
## 1          Buena          8
## 2        Difícil         42
## 3 Más bien buena         40
## 4      Muy grave         28
## 5   Problemática         62
data_sf %>%                     
dplyr::count(Situación=Situación, name = "Frecuencia") %>%  mutate(Porcentaje=Frecuencia/sum(Frecuencia)*100)  
##        Situación Frecuencia Porcentaje
## 1          Buena          8   4.444444
## 2        Difícil         42  23.333333
## 3 Más bien buena         40  22.222222
## 4      Muy grave         28  15.555556
## 5   Problemática         62  34.444444

2.1.2 Mediana

  • La Mediana es el punto medio de una distribución, es decir el valor que divide a la distribución en dos partes iguales.

  • Por lo tanto, debajo de ese valor se ubica el 50% de los casos y por encima de ese valor se ubica el otro 50% de los casos. El cálculo de la Mediana es posible o tiene sentido cuando la variable que se está analizando es por lo menos ordinal.

2.1.2.1 Mediana en RStudio

median(data_sf$Puntuación,na.rm=T)
## [1] 59.1466
library(dplyr)
data_sf %>%
  summarize(Mediana=median(Puntuación))
##   Mediana
## 1 59.1466

2.1.3 Media

  • La media o el promedio es la suma de todas las mediciones divididas por el número total de mediciones u observaciones.

2.1.3.1 Media en RStudio

mean(data_sf$Puntuación, na.rm=T)
## [1] 58.23674
library(dplyr)
data_sf %>%
  summarize(Promedio=mean(Puntuación))
##   Promedio
## 1 58.23674

2.1.4 Media vs. Mediana

  • La media es un estadístico sensible a los valores extremos. Basta que algún dato dentro de la muestra sea muy alto o muy bajo, el promedio se verá alterado

  • La mediana, en cambio, es un estadístico robusto. Aunque los extremos de los datos se vean alterados, la mediana permanece invariable

library(dplyr)
data_sf %>%
  summarize(Promedio=mean(Puntuación), Mediana=median(Puntuación))
##   Promedio Mediana
## 1 58.23674 59.1466
library(kableExtra)
## 
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
data_sf %>%                      ## Paso 1: DATA 
  summarize(Promedio=mean(Puntuación),Mediana=median(Puntuación)) %>%  
  kable() %>%  
  kable_styling()
Promedio Mediana
58.23674 59.1466
data_sf %>%
  dplyr::group_by(Continente) %>%
  dplyr::summarize(Promedio=mean(Puntuación), Mediana=median(Puntuación))
## # A tibble: 5 × 3
##   Continente Promedio Mediana
##   <chr>         <dbl>   <dbl>
## 1 América        61.3    63.7
## 2 Asia           45.3    43.0
## 3 Europa         71.1    71.9
## 4 Oceanía        71.1    71.4
## 5 África         56.0    57.2

2.1.5 Resumen Estadísticos

  • Asimetría hacia la derecha (tope a la izquierda): moda < mediana < media
  • Asimetría hacia la izquierda (tope a la derecha): media < mediana < moda
  • Simétrica: media = mediana = moda

2.2 Gráficos

2.2.1 Histograma

Se emplea para variables numéricas

library(ggplot2)
ggplot(data_sf, aes(x=Puntuación)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

2.2.2 Gráfico de barras

Para variables categóricas

library(ggplot2)
ggplot(data = data_sf, aes(x=Situación)) + geom_bar(fill='red')

2.3 Medidas de dispersión

  • La media y la mediana proporcionan dos medidas distintivas del centro de una distribución
  • Sin embargo, caracterizar una distribución solo con una medida de su centro puede ser engañoso
  • Ejemplo: dos provincias con la misma mediana de ingresos por hogar son muy distintas si una de ella tiene extremos de pobreza y de riqueza, mientras que la otra tiene poca variación entre familias.
  • Las medidas de dispersión o variabilidad muestran el grado en que un conjunto de observaciones son homogéneas o heterogéneas entre sí.
  • Los estadísticos de dispersión describen cómo se dispersan las puntuaciones de una variable de intervalo/razón (cuantitativa) a lo largo de una distribución.

2.3.1 Desviación Típica o Estándar y Varianza

  • Desviación Típica o Estándar (s): mida la dispersión (la distancia) de todas las observaciones respecto a la media o promedio. Sin embargo, para calcular la desviación estándar necesitamos calcular primero la Varianza

  • Varianza (s2): de un conjunto de observaciones, es la suma de los cuadrados de las desviaciones de las observaciones respecto a su media dividido por n-1

2.3.1.1 Propiedades de la Desviación Típica o Estándar

  • La Desviación Típica o Estándar (s) mide la dispersión con relación a la media y tiene sentido usarla cuando se elige la media como medida de tendencia central

  • La Desviación Típica es igual a 0 (s=0) solo en los casos en los que no hay dispersión. Esto ocurre únicamente cuando todas las observaciones toman el mismo valor. En caso contrario, la Desviación Típica es mayor a cero (s > 0)

  • A medida que las observaciones se separan más de la media, la Desviación Típica se hace más grande

  • La Desviación Estándar tiene las mismas unidades de medida que las observaciones originales. Por ejemplo: si el ingreso familiar es en Nuevos Soles, la Desviación Estándar también se expresa en Nuevos Soles. Este es un motivo para preferir la Desviación Estándar a la Varianza, la cual se expresaría en Nuevos Soles al cuadrado

  • Igual que ocurre con la Media, la Desviación Estándar no es robusta frente a valores atípicos o extremos

  • Algunas pocas observaciones atípicas pueden hacer que sea particularmente grande

  • La Desviación Típica es particularmente útil para las distribuciones normales

2.3.1.2 Empleando RStudio

2.3.1.2.1 Desviación Típica (s)
#sd para solicitar la Desviación Típica o Estándar
sd(data_sf$Puntuación)
## [1] 17.21789
#Usamos el comando "sqrt" para solicitar la raiz cuadrada
sqrt(var(data_sf$Puntuación))
## [1] 17.21789
2.3.1.2.2 Varianza (s2)
var(data_sf$Puntuación)
## [1] 296.4559

2.4 Medidas de posición

  • Las Medidas de Posición son otra forma de describir la distribución de una variable
  • Las Medidas de Posición describen tanto la tendencia central como la variación de un conjunto de datos
  • La Mediana es un caso especial dentro de un conjunto de Medidas de Posición llamadas Percentiles (mediana = 2do cuartil)

2.4.1 Rango

  • Indica cómo la puntuación de una variable ordinal o numérica se distribuyen de menor a mayor.
  • Diferencia entre la puntuación máxima y mínima
  • Ejemplo. data: 3,4,6,7,9 -> rango: 9-3 = 6
#Usamos "max" para solicitar el valor máximo
max(data_sf$Puntuación)
## [1] 92.6493
#usamos "min" para solicitar el valor mínimo
min(data_sf$Puntuación)
## [1] 13.923
#Usamos "range" para solicitar rango
range(data_sf$Puntuación)
## [1] 13.9230 92.6493

2.4.2 Percentiles

  • El Percentil “x” es el punto (valor) que indica el “x” porcentaje de observaciones que están por debajo de él.
  • El Percentil 50 es el punto o valor a partir del cual un 50% de las observaciones se encuentra por debajo de él y un 50% de las observaciones se ubican por encima de él
  • El Percentil 50 es la mediana

2.4.3 Deciles, Cuartiles y Quintiles

Dependiendo del porcentaje de casos que se quiere identificar al interior de una distribución se puede usar: - Deciles (10%) - Cuartiles (25%) - Quintiles (20%)

2.4.4 Cuartiles

  • El primer cuartil (C1 o Q1) separa el primer 25% de las observaciones
  • El segundo cuartil (C2 o Q2) es igual a la Mediana; es decir, divida las observaciones en dos mitades
  • El tercer cuartil (C3 o Q3) separa el primer 75% de las observaciones
  • Por lo tanto, la distancia entre el C1 o Q1 y el C3 o Q3 contiene el 50% de los datos centrales

2.4.4.1 Empleando RStudio

#Usamos el comando "quantile" para solicitar cuartiles
quantile(data_sf$Puntuación)
##       0%      25%      50%      75%     100% 
## 13.92300 45.36413 59.14660 71.11882 92.64930

2.4.5 Rango Intercuartil

Es la diferencia entre el tercer cuartil y el priemr cuartil

  • IQR = Q3 - Q1

  • Valor extremo inferior (Mínimo) = Q1 - 1.5IQR

  • Valor extremo superior (Máximo) = Q3 + 1.5IQR

  • Valores atípicos:

    • Mínimo = Q1 - 3IQR
    • Máximo = Q3 + 31QR
IQR(data_sf$Puntuación)
## [1] 25.7547

2.4.6 Valores Extremos

  • Son observaciones que se alejan del conjuto de datos. Una regla para determinar si un dato es un outlier es:

    • Si un dato es < Q1 - 1.5IQR
    • Si un dato es > Q3 + 1.5IQR
  • Los valores extremos por lo general son atribuibles a una de las siguientes causas: La observación se registra incorrectamente

  • La observación proviene de una población distinta. La observación es correcta, pero representa un suceso poco común (fortuito)

2.4.7 Boxplot

library(ggplot2)
ggplot(data_sf, aes(y = Puntuación)) +
  stat_boxplot(geom = "errorbar",
               width = 0.25) +
  geom_boxplot()

3 Estadística Descriptiva 2 e Introducción a Estadística Inferencial

3.1 Diagrama de cajas / Boxplot

  • Los diagramas de caja muestran la distribución de datos para una variable numérica y ordinal

  • Los diagramas de caja ayudan a ver el centro y la extensión de los datos. También se puede utilizar como herramienta visual para comprobar la normalidad o identificar puntos que podrían ser valores atípicos

  • Al utilizar un diagrama de caja, busque los valores extremos de sus datos. Tenga cuidado si el conjunto de datos es reducido. Si tiene variables nominales, utilice mejor un diagrama de barras

  • La longitud de la caja es la diferencia entre dos percentiles, y se conoce como rango intercuartílico (IQR)

  • La línea central de la caja indica la mediana. Si los datos son simétricos, la mediana estará al centro de la caja. Si los datos son sesgados, la mediana estará más cerca de la parte superior o inferior de la caja.

  • Los bigotes representan la varianza esperada de los datos. Estos se extienden 1.5 veces el IQR desde los extremos superior e inferior de la caja. [inferior: Q1 - 1.5IQR, superior: Q3 + 1.5IQR]. Si los datos no llegan hasta el final de los bigotes, estos se ajustan a los valores mínimos y máximos de los datos

  • Tanto diagramas de caja como histogramas muestran la forma de los datos. Ambos pueden usarse para identificar valores atípicos o inusuales.

3.1.1 Cálculo del Diagrama de cajas

  1. Calcular la mediana, el percentil 25 y el percentil 75

  2. Calcular el rango intercuartílico (IQR) como la diferencia entre el percentil 75 y el 25

  3. Calcular la longitud máxima de las patillas multiplicando el IQR por 1.5 para identificar valores atípicos

  4. Usar las estadísticas calculadas para representar los resultados y trazar un diagrama de caja

library(ggplot2)
ggplot(data_sf, aes(y = Puntuación )) + 
  geom_boxplot()

#### En grupos

library(ggplot2)
ggplot(data_sf, aes(x=Continente, y=Puntuación)) +
  geom_boxplot()

library(ggplot2)
ggplot(data_sf, aes(x=Continente,y = Puntuación,fill=Continente)) + 
  geom_boxplot()

3.1.2 Valores Extremos u Outliers

  • Observaciones que se alejan del conjunto de datos. Una regla para determinar si un datos es outlier es:

    • Si un dato es < Q1 - 1.5(Q3 - Q1)
    • Si un dato es > Q3 + 1.5(Q3 - Q1)
  • Los valores extremos por lo general son atribuibles a una de las siguientes causas: La observación se registra de forma incorrecta o proviene de una población distinta. La observación es correcta pero representa un suceso poco común

  • Dos tipos de outliers:

    • Valores extremos
    • Errores
boxplot(data_sf$Evol)

outliers <- boxplot(data_sf$Evol)$out
outliers
## [1]  54  49 -57 -47 -68 -53

3.1.2.1 Crear una base de datos con Outiliers

library(dplyr)
data_outliers = data_sf %>%
  filter(Evol==54|Evol==49|Evol==-57|Evol==-47|Evol==-68|Evol==-53)

head(data_outliers)
##     #           Pais Puntuación      Situación Puesto_2021 Evol Rg_Pol Rg_Leg
## 1  17 Timor Oriental    81.8889 Más bien buena          71   54     14     11
## 2  40       Moldavia    73.4694 Más bien buena          89   49     45     21
## 3  95       Botsuana    58.4866   Problemática          38  -57     86    122
## 4 102           Fiyi    56.9058   Problemática          55  -47    128    115
## 5 148      Hong Kong    41.6418        Difícil          80  -68    147    151
## 6 158         Kuwait    37.8739      Muy grave         105  -53    170    159
##   Rg_Eco Rg_Soc Rg_Seg Continente
## 1     20     65      5       Asia
## 2     63     28     44     Europa
## 3    116     85     75     África
## 4    104    107     54    Oceanía
## 5    122    125    151       Asia
## 6    175    176     70       Asia

3.2 Distribución simétrica

Si la distribución es simétrica, la Media y la Mediana son exactamente iguales

3.3 Distribución asimétrica

En una distribución asimétrica, la Media queda desplazada hacia la cola más larga, implica un sesgo en la distribución.

  • Sesgada a la derecha: Moda < Mediana < Media

  • Sesgada a la izquierda: Media < Mediana < Moda

3.4 Curtosis

  • Mide la cantidad de datos que se agrupa en torno a la moda.

  • Pueden ser (del cerro más largo al más pequeño):

    1. Leptocúrtica: K>0
    2. Mesocúrtico K=0
    3. Platicúrtica: K<0

3.5 Histograma

Los histogramas de frecuencias atraen la atención hacia donde cae el grueso de puntuaciones en una distribución

ggplot(data_sf, aes(x=Puntuación)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data.frame(data_sf), aes(x = Puntuación)) +
       geom_histogram(aes(y = ..density..),
                      color = "gray", fill = "white") +
       geom_density(fill = "black", alpha = 0.2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data_sf, aes(x = Puntuación, fill = Continente , colour = Continente)) + 
  geom_histogram(alpha = 0.5, position = "identity") + 
  theme(legend.position = "left") # Izquierda
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

data_sf %>%
  ggplot(aes(x = Puntuación, group = Continente)) +
  geom_histogram() +
  facet_wrap(~ Continente) +
  labs(x = "Indice de Libertad de Expresión", y = "Número de observaciones")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4 Estadística Inferencial e Intervalos de Confianza

4.1 Repaso clase pasada

4.1.1 Estadística Descriptiva - Variable numérica según variable categórica

library(dplyr)
tabla=data_sf %>% 
  dplyr::group_by(Continente) %>%
  dplyr::summarize(Promedio=mean(Puntuación), Mediana=median(Puntuación), Máximo=max(Puntuación), Mínimo=min(Puntuación), Cuartil1=quantile(Puntuación,probs = c(0.25)), Cuartil2=quantile(Puntuación, probs = c(0.50)), Cuartil3=quantile(Puntuación,probs = c(0.75)), Desviación=sd(Puntuación))

tabla
## # A tibble: 5 × 9
##   Continente Promedio Mediana Máximo Mínimo Cuartil1 Cuartil2 Cuartil3
##   <chr>         <dbl>   <dbl>  <dbl>  <dbl>    <dbl>    <dbl>    <dbl>
## 1 América        61.3    63.7   85.9   27.3     47.9     63.7     73.7
## 2 Asia           45.3    43.0   81.9   13.9     35.4     43.0     56.8
## 3 Europa         71.1    71.9   92.6   38.8     62.6     71.9     81.7
## 4 Oceanía        71.1    71.4   83.5   56.9     69.7     71.4     73.8
## 5 África         56.0    57.2   83.3   19.6     46.8     57.2     63.1
## # ℹ 1 more variable: Desviación <dbl>
library(ggplot2)
ggplot(data_sf, aes(x=Continente, y = Puntuación, fill = Continente)) +
  geom_boxplot(outlier.colour="red")+labs(title="Cultura Política según continente",x="Continente", y = "Índice de Cultura Política")+ theme_classic()+scale_fill_brewer(palette="Dark2")

library(ggplot2)
p=data_sf %>%
  ggplot(aes(x = Puntuación, group = Continente)) +
  geom_histogram(color="black", fill="#56B4E9") +
  facet_wrap(~ Continente) +
  labs(x = "Indice de la Cultura Política", y = "Número de países")+theme_classic()

p+geom_vline(data=tabla, aes(xintercept=Promedio, color="red"),
             linetype="dashed")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4.1.2 Estadística Descriptiva - Variable categórica

tabla2 <- data_sf %>% 
  dplyr::group_by(Situación) %>% 
  dplyr::summarise(Total=n()) %>%   
    dplyr::mutate(Porcentaje = round(Total/sum(Total)*100, 1))             #16
  
ggplot(tabla2, aes(x = Situación, y=Total,fill=Situación) ) +          
  geom_bar(width = 0.9, stat="identity", position = position_dodge())+                    
  
  ylim(c(0,100))+
  labs(x="Tipos de regimen", y= "Frecuencia \n (Porcentajes)") +  #17 
  labs(fill = "")+                                          
  
  geom_text(aes(label=paste0(Total," ", "", "(", Porcentaje, "%",")")),    #18
            vjust=-0.9, 
            color="black", 
            hjust=0.5,
            position = position_dodge(0.9),  
            angle=0, 
            size=4.0
            ) +  
  scale_fill_discrete(name = "Tipos de regimen", labels = c("Autoritarismo", "Democracia con deficiencias","Full democracia","Regimen Híbrido")) +   #19
  
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +     #20
  #theme_bw(base_size = 14) +
  
  facet_wrap(~"Tipos de regimen")

4.2 Estadística Inferencial

“Inferir” significa extrar una conclusión a partir de hechos particulares a hechos generales.

En la estadística inferencial se estudian técnicas y procedimientos con el objetivo de extender o generalizar la información de una muestra aleatoria a la población.

4.2.1 ¿Cuándo utilizamos Estadística Inferencial?

Cuando deseamos generalizar la información de una muestra aleatoria a la población

Ejemplo: - Utilizar la base de datos de la Encuesta Mundial de Valores aplicada en Perú desde 1996 hacia lo que perciben los peruanos

4.2.2 ¿Cuándo una muestra es aleatoria?

  • Es el procedimiento de selección de la muestra en el que todos y cada uno de los elementos de la población tiene una cierta probabilidad de resultar elegidos

  • Cuando se elige al azar los elementos que componen la muestra en la que todos los segmentos de la población están incluidos en sus proporciones correctas respecto a la población

  • Una muestra no aleatoria es aquella en que la subjetividad del investigador decide la selección de la muestra

4.2.3 ¿Qué tipos de muestreo existen?

Existen dos tipos de muestreo:

  • Muestreo probabilístico: utiliza formas de métodos de selección aleatoria. El requisito más importante del muestreo probabilístico es que todos en una población tengan la misma oportunidad de ser seleccionados.

  • Muestreo no probabilístico: técnica de muestreo en la cual el investigador selecciona muestras basadas en un juicio subjetivo en lugar de hacer la selección la azar.

4.2.4 ¿Cuáles son los tipos de muestreo probabilístico?

  • Muestreo aleatorio simple: Este método de muestreo es tan fácil como asignar números a los individuos (muestra) y luego elegir aleatoriamente números entre los números a través de un proceso automatizado. Los números que se eligen son los miembros que se incluyen en la muestra

  • Muestro aleatorio sistemático: Es una técnica de muestreo en la que se selecciona un elemento de la población a intervalos regulares. Se elige un elemento inicial al azar y luego se selecciona un elemento adicional cada cierto número de elementos en la lista de la población

  • Muestro aleatorio estratificado: Se divide al marco muestral en estratos. Los estratos son homogéneos por dentro, pero diferentes entre ellos. Se divide a una población grande en grupos por sexo, edad, etnica, etc. y luego utiliza un muestreo aletorio simple para elegir los miembros de los grupos.

  • Muestreo aleatorio por conglomerado: Se seleccionan aleatoriamente varios grupos conformados por elementos heterogéneos de la población, pero que tienen algo en común.

  • Muestreo por conveniencia: La muestra se selecciona solo porque están convenientemente disponibles para el investigador. Estas muestras se seleccionan solo porque son fáciles de reclutar y porque el investigador no consideró seleccionar una muestra que represente a toda la población.

  • Muestreo por cuotas: El investigador está interesado en estratos particulares dentro de la población. Es aquí donde el muestreo por cuotas ayuda a dividir la población en estratos o grupos.

  • Muestreo intencional o por juicio: Los investigadores eligen solo a aquellos que estos creen que son los adecuados (con respecto a los atributos y la representación de una población) para participar en un estudio de investigación.

  • Muestreo de bola de nieve: Una vez que los investigadores encuentran sujetos adecuados, se les pide a estos ayuda para buscar a sujetos similares y así poder formar una muestra de buen tamaño.

4.2.5 ¿Cuáles son los supuestos para realizar inferencia estadística?

  • La inferencia estadística utiliza el lenguaje de la probabilidad para indicar la fiabilidad de sus conclusiones. La probabilidad describe lo que ocurre después de muchísimos ensayos. Tenemos que revisar los siguientes conceptos:
    • Ley de los Grandes Números
    • Teorema del Límite Central

4.2.5.1 ¿Qué es la Ley de los Grandes Números?

La ley de los grandes números es un teorema fundamental de la teoría de la probabilidad que indica que si repetimos muchas veces (tendiendo al infinito) un mismo experimento, la frecuencia que sucede un cierto evento tiende a ser una constante

4.2.5.2 ¿Qué es el Teorema del Límite Central?

Sin importar la forma de una puntuación bruta de una variable intervalo/razón, su distribución muestral será normal cuando el tamaño de la muestra sea mayor que 121 casos y se centrará en la media de la población verdadera.

Para un muestreo aleatorio con un N grande, la distribución de muestreo de la media muestral es aproximadamente una distribución normal

4.2.5.3 ¿Qué es una distribución normal?

La curva normal se define por dos propiedades: la media y la desviación estándar. Si tenemos una muestra de datos cuya distribución presumimos normal ya sabemos que el 68% de las observaciones va a estar dentro de +- una desviación estándar de la media y más del 95% se encontrará dentro de dos desviaciones. Por último, el 99% de las observaciones se encuentran dentro de tres desviaciones estándares de la media

De la misma manera, es poco probable (5% probable) que una sola muestra no está a +- 2 desviaciones estándar del parámetro.

Tenemos que recordar la campana perfecta: mediana y media iguales, después primeras desviaciones agrupan 34,1% a cada lado, despúes será +13.6%, despúes +2.1% a cada lado y por último +0.1%

4.2.6 ¿Cómo puede ser la estimación?

Los razonamientos de la inferencia estadística al igual que la probabilidad tratan sobre las regularidades que aparecen después de muchas repeticiones. La inferencia es más fiable cuando los datos se han obtenido a partir de un diseño aletorio

  • Estimación puntual

  • Estimación por intervalos

4.2.6.1 ¿Qué es la estimación puntual?

Estimar un parámetro poblacional mediante un estadístico que predice el valor de dicho parámetro

  • Para variables categóricas, se puede estimar proporciones o porcentajes poblacionales para las categorías

  • Para variable numéricas, se puede estimar una media poblacional

  • Las propiedades deseables son: Insesgadez (igual al parámetro), eficiencia (varianza reducida), suficiencia (utiliza toda la información de la muestra) y consistencia (el parámetro más preciso aún la muestra sea más grande)

4.2.6.2 ¿Qué es la estimación por intervalos?

La estimación por intervalos asigna un intervalo de confianza en que los valores de los parámetros puede tener a partir los estadísticos de la muestra

El intervalo numérica alrededor de la estimación puntual donde creemos que está incluido el parámetro.

Intervalo de confianza: Estimador puntual +- margen de error

La precisión del estimador puntual determina la amplitud de la estimación de intervalo del parámetro con cierta probabilidad cercana a 1

Intervalo de confianza: Rango o intervalor de valores dentro del cual se cree que estaría el parámetro poblacional

Margen de error: Mide qué tan preciso es la estimación del parámetro

4.2.6.3 ¿Qué entendemos por confianza?

Significa que la probabilidad de que en un muestreo repetido, el intervalo contenga el verdadero valor del parámetro

  • Nivel de confianza: Grado de confianza calculado que un procedimiento estadístico realizado con muestrales producirá un resultado correcto para la población muestrada

4.2.6.4 ¿Qué es el intervalo de confianza de una media y cómo se calcula?

Es el rango o intervalo de calores dentro del cual se cree que estaría el parámetro poblacional de la media. Donde desviación estándar y el número de la muestra. Asimismo, z es el valor crítico que captura la probabilidad central de congianza (lo sacamos de la tabla que ya existe, con su asignación para 90% de confianza, 95%, 99%)

Si el promedio de nota del curso de lenguaje es de 16 de una muestra de 100 estudiantes. Y la desviación estándar es 3.5, el intervalor de congianza al 95% del nivel de confianza será:

  • Límite inferior: 16 - 1.96(lo sacamos de la tabla) * 3.5/raízde100

  • Límite superior: 16 + 1.96 * 3.5/raízde100

A un nivel de confianza del 95% el intervalo de congianza de la nota del curso de lenguaje oscila entre 15.3 y 16.6

4.2.6.5 ¿Qué es el intervalo de congianza de una proporción y cómo se calcula?

De la manera similar a lo anterior, estimamos el intervalo de confianza de una proporción. Sin embargo, dado que no se tiene la desviación estándar, se reemplaza por la proporción multiplicada por 1 menos la proporción. p*(1-p)

Si el 30% aprueba el actual gobierno, de una muestra de 100 encuestados, entonces a un nivel de confianza al 90%, ¿Ciál es el intervalo de confianza?:

  • Límite inferior: 0.3 - 1.645* raiz(0.3(1-0.3)/100

  • Límite superior: 0.3 + 1.645* raíz(0.3(1-0.3)/100

La aprobación al actual gobierno de los peruanos y las peruanas a un 90% de nivel de confianza oscila entre 22.5% y 37.5

4.2.7 Aplicado lo aprendido en R

library(rio)
data_lb =import("Latinobarometro_2020_Esp.csv")
#seleccionamos los datos de Perú
library(dplyr)
dataperu=data_lb%>%filter(idenpa=="604")

4.2.7.1 ¿Cuál es el intervalo de confianza para quienes consideran muy injuta la distribución de ingresos en el Perú?

Damos formato a la variable de interés con as.factor

dataperu$ingresos = as.factor(dataperu$p19st.a)

Etiqueto los nombres de las categorías de respuesta

dataperu$ingresos=factor(dataperu$ingresos, levels=levels(dataperu$ingresos), labels=c("No responde","No sabe","Muy justo","justo","Injusto","Muy injusto"))
prop.table(table(dataperu$ingresos))
## 
## No responde     No sabe   Muy justo       justo     Injusto Muy injusto 
## 0.001666667 0.029166667 0.028333333 0.124166667 0.579166667 0.237500000

Rpta: La proporción de quienes consideran muy injusta la distribución de ingresos en el Perú es de 0.2375.

4.2.7.2 ¿Cuál es el intervalo de confianza para quienes consideran muy injuta la distribución dei ingreso en el Perú a un 95% de nivel de confianza?

Defino los elementos que requiero según la fórmula

p=0.2375
z=1.96 #por la misma tabla de la teoría
n=1200

Calculo los elementos de la fórmula

p_1=1-p
a=sqrt((p*p_1)/n)
a*z
## [1] 0.02407782
Limiteinferior=p-(a*z)
Limitesuperior=p+(a*z)
Limiteinferior
## [1] 0.2134222
Limitesuperior
## [1] 0.2615778

Rpta: A un 95% de nivel de confianza, el porcentaje de peruanos o peruanas quienes consideran muy injusta la distribución de ingresos oscila entre 21.34% y 26.15%

4.2.7.3 ¿Cuál es el intervalo de confianza de media del temor de contagiarse de Covid-19 a un 95% de nivel de confianza?

Calcular el promedio

mean(dataperu$p77n)
## [1] 6.001667

Calculo la desviación típica o estándar

sd(dataperu$p77n)
## [1] 3.10398
library(Rmisc)
## Cargando paquete requerido: lattice
## Cargando paquete requerido: plyr
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Adjuntando el paquete: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
intervalomedia=CI(dataperu$p77n,ci=0.95)
intervalomedia
##    upper     mean    lower 
## 6.177465 6.001667 5.825868

4.2.8 Repaso 1

####¿Cuándo usamos el intervalo de confianza? - Usamos el intervalo de confianza (IC) cuando queremos estimar un parámetro poblacional (como una media o proporción) a partir de una muestra, indicando un rango dentro del cual es probable que se encuentre dicho parámetro, con un determinado nivel de confianza (por ejemplo, 95%)

####¿De qué depende el cálculo del intervalo de confianza? - Nivel de confianza (90%, 95%, 99%) - Tamaño de la muestra n - Variabilidad en los datos (desviación estándar o proporción) - Distribución de la muestra (normal, t de Student, etc) - Si se conoce o no la desviación estándar

####¿Qué elementos necesitamos para calcular el intervalo de confianza para una media? - Media muestral - Desviación estándar muestral (s) o poblacional - Tamaño de la muestra Nivel de confianza, que nos da un valor crítico

####¿Qué elementos necesitamos para calcular el intervalo de confianza para una proporción?? - Proporción muestral - Tamaño de la muestra - Nivel de confianza, que nos da un valor crítico

####¿Qué gráfico usamos para mostrar el intervalo de confianza? - Barras de error (error bars): muestran la media y el rango del IC - Boxplot: útil si se quiere ver la dispersión y estimar visualmente IC - Intervalos en gráficos de puntos o forest plots, especialmente en estudios comparativos

####Diferencia entre intervalo de confianza para una media y para una proporción - Media: promedio de una variable numérica, variable cuantitativa - Proporción: porcentaje o fracción de una categoría, variable cualitativa

4.2.9 Repaso 2

#cargamos la nueva base de datos
library(rio)
data_endo = import("Base_ENDO_2018.sav")
#Reemplazamos el valor 1 por NA
library(dplyr)

data1_endo <- data_endo %>% 
  dplyr::rename(sueldoliquido = P501_B) %>%
  mutate(sueldoliquido = na_if(sueldoliquido, 1))

4.2.9.1 Intervalo de confianza al 95% para el promedio del ingreso líquido mensual de los docentes (P501-B)

library(Rmisc)
intervalomedia=CI(data1_endo$sueldoliquido,ci=0.95)
intervalomedia
## upper  mean lower 
##    NA    NA    NA
intervalomedia=CI(na.omit(data1_endo$sueldoliquido,ci=0.95))
intervalomedia
##    upper     mean    lower 
## 1540.867 1530.699 1520.531
#también podemos
library(lsr)
tabla_p1=data1_endo%>%summarise(Media = mean(sueldoliquido, na.rm=T),
            min = ciMean(sueldoliquido,conf = 0.95, na.rm=T)[1],
            max = ciMean(sueldoliquido,conf = 0.95, na.rm=T)[2]
            )
tabla_p1
##      Media      min      max
## 1 1530.699 1520.531 1540.867

Rpta: Al 95% del nivel de confianza, el promedio del ingreso líquido por docente oscila entre 1520.531 y 1540.867

4.2.9.2 Intervalo de confianza al 95% para la proporción de docentes que prefiere trabjar en unna IE en su distrito de residencia (P319)

#le damos forma a la variable
data1_endo$P319=as.factor(data1_endo$P319)
#señalamos las categorías de la variable
data1_endo$P319=factor(data1_endo$P319,
                levels = levels(data1_endo$P319),
                labels = c("Mismo distrito","Otro distrito"),
                ordered = F)
#realizamos la tabla
prop.table(table(data1_endo$P319))
## 
## Mismo distrito  Otro distrito 
##      0.6304766      0.3695234

Rpta: El 63% de docentes prefiere trabajar en el mismo distrito en el que reside.

table(data1_endo$P319)
## 
## Mismo distrito  Otro distrito 
##           9512           5575

Ahora veamos el intervalo de confianza

x = 9512
n = 9512 + 5575
ic_prop = prop.test(x,n,conf.level = 0.95)
ic_prop
## 
##  1-sample proportions test with continuity correction
## 
## data:  x out of n, null probability 0.5
## X-squared = 1026.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.6227090 0.6381774
## sample estimates:
##         p 
## 0.6304766

Rpta: A un 95% del nivel de confianza, entre el 62.27% y 63.81% de los docentes de las IE prefiere trabajar en el mismo distrito en el que reside.

4.2.9.3 Intervalo de confianza al 95% para el promedio del ingreso líquido mensual de los docentes (P501_B) de acuerdo a la respuesta si prefiere trabajar en el mismo distrito en el que reside (P319)

#Intervalo de confianza para la media según grupos

library(lsr)
library(dplyr)

ic_grupo <- data1_endo %>%
  group_by(P319) %>%
  group_modify(~{
    media <- mean(.x$sueldoliquido, na.rm = TRUE)
    ci <- ciMean(.x$sueldoliquido, conf = 0.95, na.rm = TRUE)
    tibble(Media = media, min = ci[1], max = ci[2])
  })

print(ic_grupo)
## # A tibble: 2 × 4
## # Groups:   P319 [2]
##   P319           Media   min   max
##   <fct>          <dbl> <dbl> <dbl>
## 1 Mismo distrito 1476. 1463. 1488.
## 2 Otro distrito  1625. 1608. 1642.
library(ggplot2)

ggplot(ic_grupo, aes(x = P319, y = Media)) +
  geom_errorbar(aes(ymin = min, ymax = max), width = 0.2) +
  geom_point(size = 3, color = "steelblue") +  # opcional: para destacar el punto medio
  geom_text(aes(label = round(Media, 2)), size = 4, vjust = -1) +
  xlab("Preferencia de distrito") +
  ylab("Ingreso líquido en soles") +
  ylim(1400, 1700) +
  theme_minimal()

No hay traslape entre las barras de error, esto sugiere diferencias significativas.

4.2.9.4 Intervalo de confianza al 95% para el promedio del ingreso líquido mensual de los docentes (P501_B) de acuerdo si trabaha en una escuela de colegio público o privado (P07)

#le damos formato a la variable
data1_endo$P07 = as.factor(data1_endo$P07)
#señalamos las categorías
data1_endo$P07=factor(data1_endo$P07,
                levels = levels(data1_endo$P07),
                labels = c("Público","Privado"),
                ordered = F)
#intervalos de confianza para la media según grupos
library(lsr)
ic_grupo2 <- data1_endo %>%
  group_by(P07) %>%
  group_modify(~{
    media <- mean(.x$sueldoliquido, na.rm = TRUE)
    ci <- ciMean(.x$sueldoliquido, conf = 0.95, na.rm = TRUE)
    tibble(Media = media, linf = ci[1], lsup = ci[2])
  })

print(ic_grupo2)
## # A tibble: 2 × 4
## # Groups:   P07 [2]
##   P07     Media  linf  lsup
##   <fct>   <dbl> <dbl> <dbl>
## 1 Público 1875. 1865. 1886.
## 2 Privado 1116. 1104. 1128.
library(ggplot2)
ggplot(ic_grupo2, aes(x= P07, y =Media)) +
  geom_errorbar(aes(ymin=linf, ymax=lsup), width = 0.2)+
   geom_text(aes(label=paste(round(Media, 2))), size=4)+
  xlab("Preferencia de distrito") + ylab("Ingreso liquido en soles")+
  ylim(1000, 2000)

No hay traslape entre las barras de error, esto sugiere diferencias significativas.

4.2.9.5 Si existe diferencia entre la preferencia de distrito según el tipo de colegio en el que trabaja

library(dplyr)
tabla2_endo = data1_endo %>%
  dplyr::filter(P319 =="Mismo distrito" | P319 == "Otro distrito") %>%
  dplyr::group_by(P07) %>%
  dplyr::count(P319r=P319, name="N") %>%
  dplyr::mutate(total = sum(N), 
         Por = N / total * 100, 
         err = sqrt(Por*(100-Por)/N), 
         liminf = Por - 1.96*err, 
         limsup = Por + 1.96*err)
tabla2_endo
## # A tibble: 4 × 8
## # Groups:   P07 [2]
##   P07     P319r              N total   Por   err liminf limsup
##   <fct>   <fct>          <int> <int> <dbl> <dbl>  <dbl>  <dbl>
## 1 Público Mismo distrito  4707  8225  57.2 0.721   55.8   58.6
## 2 Público Otro distrito   3518  8225  42.8 0.834   41.1   44.4
## 3 Privado Mismo distrito  4805  6862  70.0 0.661   68.7   71.3
## 4 Privado Otro distrito   2057  6862  30.0 1.01    28.0   32.0
tabla2_1 = tabla2_endo[-c(2,4),]
tabla2_1
## # A tibble: 2 × 8
## # Groups:   P07 [2]
##   P07     P319r              N total   Por   err liminf limsup
##   <fct>   <fct>          <int> <int> <dbl> <dbl>  <dbl>  <dbl>
## 1 Público Mismo distrito  4707  8225  57.2 0.721   55.8   58.6
## 2 Privado Mismo distrito  4805  6862  70.0 0.661   68.7   71.3
graf2 = ggplot(tabla2_1, aes(x=P07, y=Por))+
  geom_bar(stat="identity")+
  geom_errorbar(aes(ymin=liminf, ymax=limsup), width=0.2)+
  geom_text(aes(label=paste(round(Por, 1))), vjust=-1, size=4)+
  xlab("Tipo de colegio") + ylab("Porcentaje de preferencia de trabajar en el mismo distrito")+
  ylim(50, 80)
graf2

5 Inferencia Bivariada

Analiza la relación existente entre dos variables. Presentamos las relaciones según tipos de escala que intervengan.

5.1 Relación numérica-numérica

Podemos plantear dos escenarios 1. Se analizan dos variable diferentes en un corte de tiempo (se le conoce como correlación): aquí usamos Pearson (prueba paramétrica) y Spearman (prueba no paramétrica)

  1. Se analiza una misma variable medida en dos momentos diferentes: aquí usamos Prueba T (prueba paramétrica) y Wilcoxon (prueba no paramétrica)

5.1.1 R de Pearson

  • Aquí se analiza la existencia o no de la correlación lineal entre dos variables numéricas que se distribuyan normalmente (nos referimos a la curva normal de Gauss)

  • La hipótesis base de la prueba de Pearson es que “no hay correlación”, es decir que el r de Pearson es igual a 0

  • Acá también tenemos que fijarnos en el p-valor, que sea menor a 0.05 para que exista significancia

  • Buscamos que el r de Pearson (el coeficiente) sea diferente a 0, ya que esto nos menciona cuán fuerte y en qué dirección se relacionan dos variables (linealmente)

  • Sin embargo, el R por sí solo no nos dice si la relación es estadísticamente confiable. Es ahí cuando entra el p-valor, cuando es menor a 0.05 nos dice que es estadísticamente significativa.

  • Un caso particular de correlación es la correlación parcial. Esta prueba nos permite verificar que la correlación hallada no sea espuria al eliminar el efecto de una tercera variable entre la relación de otras dos

    • En otras palabras: La correlación parcial mide la relación etre dos variables (X e Y), eliminando el efecto de una tercera variable (Z). Es decir:
    • Es útil porque a veces una correlación entre dos variables puede ser espuria (falsa o engañosa) debido a que ambas están influidas por una tercera variable común
    • La correlación parcial busca demostrar que nuestras dos variables se correlación aunque quitemos el efecto de la tercera variable
    • Ejemplo:
      • X = número de bomberos en un incendio
      • Y = daños causados por el incendio (en soles)
      • Parace que hay una relación, pero… en realidad hay una tercera variable, Z = tamaño del incendio

5.1.2 Rho de Spearman

  • El Spearman es la versión no paramétrica disponible para saber si hay correlación entre dos variables numéricas

  • Su interpretación es idéntica al r de Pearson, pero no exige que las variables se distribuyan normalmente ni que la relación entre ellas sea lineal.

  • Cómo se si la distribución es normal o no: shapiro test

    • p-valor > 0.05: distirbución normal, se usa Pearson
    • p-valor < 0.05: distribución no normal, usar Spearman

5.1.3 Prueba T para muestras relacionadas

  • La r de Pearson analizaba la correlación entre dos diferentes variables numéricas, pero la prueba T analiza la relación entre la misma variable medida en dos oportunidades diferentes a las mismas unidades de estudio de una muestra.

  • La prueba T se encarga de informarnos si las dos medias de estos dos momentos son probablemente iguales o no.

  • En el ejemplo del texto se analizan los promedio del Examen de Admisión y el Examen de Admitidos, ambos vistos como similares al ser exámenes para ingresos a EEGGLL.

5.2 Relación categórica-categórica

5.2.1 Chi-cuadrado de Pearson

  • Cuando estudiamos dos variables categóricas queremos ver si existe o no asociación entre esas dos, para ello empleamos el chi-cuadrado

  • Esta prueba solo permite saber si una variable categórica está relacionada con otra de la misma escala

  • El ejemplo que pone en el libro informa si hay o no asociación entre las variables “asistencia en el primer semestre (asistencia 1)” y “escala en el primer semestre (escala 1)”, en este caso ambas son ordinales.

  • En este caso, el Chi-cuadrado solo nos arroja el p-valor, no se nos proporciona información sobre el sentido de la relación (directa o inversa) ni sobre la intensidad de la misma; por ello, el chi-cuadrado requiere de análisis complementarios para conocer ambas cosas. Las pruebas estadísticas para este tipo de pruebas varían de acuerdo a la escala de la variable categórica.

5.2.1.1 Pruebas para nominales: solo intensidad

Cuando al menos una de las dos variables categóricas a analizar es nominal, tenemos disponibles las siguientes pruebas:

  • Coeficiente de Contingencia -Phi (para tablas 2x2) -V de Cramer
  • Lambda
  • Coeficiente de Incertidumbre

Las medidas Lambda y Coeficiente de Incertidumbre son utilizadas cuando la hipótesis ubica a cada variable categórica en el rol de independiente y dependiente. A estas medidas se les denomina de tipo direccional (a las otras se les llama de tipo simétrico). En todos estos casos, el resultado está entre 0 y 1, y su interpretación es la siguiente:

  • Si el coeficiente es menor que 0,400: la relación es despreciable
  • Si el coeficiente está entre 0,400 y 0,600: la relación es medianamente fuerte
  • Si el coeficiente es mayor que 0,600: la relación es fuerte

5.2.1.2 Pruebas para ordinales: intensidad y sentido

Cuando las dos variables son ordinales:

  • Tau-B (tablas cuadrado - nxn)
  • Tau-C
  • Gamma
  • D de Sommers

La D de Sommers es la única medida direccional de este grupo. En todos los casos las medidas van de -1 a 1, y su interpretación es similar al r de Pearson.

5.3 Relación categórica-numérica

5.3.1 Prueba T para muestras independientes

  • La prueba T para muestras independientes requiere dos variables: una dependiente (numérica) e independiente (categórica dicotómica)

  • El ejemplo que emplea en el texto es: la media del examen de admisión ha sido la misma para hombres y mujeres. Se busca saber si hay alguna diferencia en las notas obtenidas en el examen en función del sexo.

  • La hipótesis base es: “no hay diferencia de valores medios”; es decir, que el factor usado no tuvo efecto.

  • Esta prueba requiere previamente se verifique si se cumple el supuesto de igualdad de varianzas, para lo cual se utiliza la prueba de Levene que aparece a la izquierda de la tabla en el libro

5.3.2 Prueba F (ANOVA de un factor)

  • Cuando deseamos conocer si existe un efecto de un factor (variable categórica) en los valores medios de una variable numérica recurrimos al ANOVA de un factor.

  • Esta técnica es más compleja, pues es parte del modelo lineal general univariado y tiene como hipótesis nula que: “no hay efecto del factor en los valores medios de la variable dependiente”

  • Por lo tanto, lo que se obtiene con esta prueba es saber si hay una diferencia de los promedios de una variable (numérica) en más de dos grupos (variable categórica)

  • Ejemplo: la usamos si queremos conocer si existe efecto de la religión de una persona (católico, protestante, judío, etc) en su nivel de ingresos

  • Aquí también se tiene que verificar previamente si hay homogeneidad de varianzas. Para ello se realiza la prueba de Levene. La hipótesis nula de la prueba de Levene es que no existe homogeneidad, por lo que si el valor es menor a 0.05 debemos rechazarla.

  • Asimismo, la prueba F del ANOVA puede no ser adecuada cuando no hay homogeneidad de varianzas. Cuando esto sucede, se suele solicitar “Pruebas robustas de igualdad de las medias”.

  • Esta prueba robusta arroja dos filas para la lectura:

    • Welch: se usa cuando hay igualdad en el número de casos de cada una de las modalidades de la variable independiente categórica.

    • Brow-Forsythe: se usa cuando hay diferente número de casos en cada una de las modalidades de la variable independiente categórica.

5.4 Resumen

  • Numérica - Categórica
    • 2 grupos
      • Prueba T (paramétrica)
      • Wilcox / Mann-Whitney (no paramétrica)
    • Más de 2 grupos
      • ANOVA (paramétrica)
      • Kruskal-Wallis (no paramétrica)
  • Numérica - Numérica
    • Pearson (paramétrica)
    • Spearman (no paramétrica)
  • Categórica - Categórica
    • Chi-Cuadrado
# En código puede ser de la siguiente forma

## Numérica - Categórica

### Verificamos normalidad por grupo

#library(dplyr)
#datos %>%
  #group_by(variable_categórica) %>%
  #summarise(p_normalidad = shapiro.test(variable_numerica)$p.value)


### Homogeneidad de varianzas
#library(car)
#leveneTest((variable_numerica ~ variable_categorica, data = datos))


### Prueba T (paramétrica)
#t.test((variable_numerica ~ variable_categorica))


### Wilcoxon rank (no paramétrica)
#wilcox.test(variable_numerica ~ variable_categorica)


### ANOVA (paramétrica)
#anova = aov(variable_numerica ~ variable_categorica)
#summary(anova)

### Kruskal (no paramétrica)
#kruskal.test(variable_numerica ~ variable_categorica)


## Numérica - Numérica

### Verificamos normalidad
#shapiro.test(variable1)
#shapiro.test(variable2)

### Pearson (paramétrica)
#cor.test(variable1, variable2, method = "pearson")

### Spearman (no paramétrica)
#cor.test(variable1, variable2, method = "spearman")

### Visualizar la relación
#library(ggplot2)
#ggplot(data, aes(x = variable1, y = variable2)) +
  #geom_point() +
  #geom_smooth(method = "lm", se = FALSE, color = "red")


## Categórica - Categórica

### Contruir tabla de contingencia
#table(variable1, variable2)

### Pruebas de independencia (Chi-cuadrado para muestras grandes y Fisher para pequeñas)
#chisq.test(variable1, variable2)
#fisher.test(variable1, variable2)

6 Prueba T para diferencia de medias

6.1 Repaso de Creación de un indicador aditivo

Deseamos crear un indicador con: P30_01, P30_02, P30_03, P30_08, P30_09 Y P30_10

  • Una vez calculado el índice aditivo, calculamos el intervalo de la media al 99% de nivel de confianza

  • Determine si el indicador varía si existe una diferencia entre quienes residen en Lima Metropolitana y en el interior del país (zonab). Realice el gráfico correspondiente

# abriamos la data

library(rio)
data_pro = import("Base de datos para Proética 2019_4.sav")
# Se debe reemplazar el valor 6 por 0. Para ello generar una nueva variable con el comando mutate:

library(dplyr)
data_pro=data_pro%>%
  dplyr::rename("congreso"=P30_01)%>%
  dplyr::mutate(congreso=replace(congreso, 6,0))%>%
  dplyr::rename("contraloria"=P30_02)%>%
  dplyr::mutate(contraloria=replace(contraloria, 6,0))%>%
  dplyr::rename("fiscalia"=P30_03)%>%
  dplyr::mutate(fiscalia=replace(fiscalia, 6,0))%>%
  dplyr::rename("procur"=P30_08)%>%
  dplyr::mutate(procur=replace(procur,6,0))%>%
  dplyr::rename("judicial"=P30_09)%>%
  dplyr::mutate(judicial=replace(judicial, 6,0))%>%
  dplyr::rename("policia"=P30_10)%>%
  dplyr::mutate(policia=replace(policia, 6,0))
#resolución / ejecutar la suma
data_pro$suma=
  data_pro$congreso+data_pro$contraloria+data_pro$fiscalia+data_pro$procur+data_pro$judicial+data_pro$policia
summary(data_pro$suma)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   12.00   15.00   15.03   18.00   36.00
hist(data_pro$suma)

# reescalar la suma de 0 a 100

#Manera 1
data_pro=data_pro%>%
  mutate(lucha_anticorr=((suma-0)/36)*100)

summary(data_pro$lucha_anticorr)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   33.33   41.67   41.76   50.00  100.00
#Manera 2
library(scales)
data_pro$indicador=scales::rescale(data_pro$suma,to=c(0,100))
#Intervalo de la media: una vez calculado el índice aditivo, calcule el intervalo de la media al 99% de nivel de confianza

library(Rmisc)
intervalomedia=CI(na.omit(data_pro$lucha_anticorr),ci=0.99)
intervalomedia
##    upper     mean    lower 
## 42.51455 41.75791 41.00128

Interpretación: A un 99% de nivel de confianza, el intervalo de confianza de la media oscila entre 41.00 y 42.51, en un rango de 0 a 100. En otras palabras, los peruanos y peruanas tienen una evaluación negativa sobre el desempeño de las instituciones encargadas de la lucha anticorrupción.

#Intervalo de la media por grupos - Formato: Determinar si el indicador varía si existe una diferencia entre quienes residen en Lima Metropolitana y en el interior del país (zonab). Realice un gráfico correspondiente


#le damos formato
data_pro$zonab=as.factor(data_pro$zonab)
data_pro$zonab=factor(data_pro$zonab,levels = c(1:2),labels = c("LimaM","Interior"))
table(data_pro$zonab)
## 
##    LimaM Interior 
##      578     1279
#tabla resumen
library(dplyr)
library(lsr)
tabla_pro=data_pro%>%
  dplyr::group_by(zonab)%>%
  dplyr::summarise(Media = mean(indicador, na.rm=T),
            limiteinferior = ciMean(indicador,conf = 0.99, na.rm=T)[1],
            limitesuperior = ciMean(indicador,conf = 0.99, na.rm=T)[2]
            )
tabla_pro
## # A tibble: 2 × 4
##   zonab    Media limiteinferior limitesuperior
##   <fct>    <dbl>          <dbl>          <dbl>
## 1 LimaM     41.6           40.3           42.9
## 2 Interior  41.8           40.9           42.8
library(ggplot2)
ggplot(tabla_pro, aes(x=zonab, y = Media))+
  geom_errorbar(aes(ymin=limiteinferior, ymax=limitesuperior), width=0.2)+
  geom_text(aes(label=paste(round(Media, 2))), size = 4)+
  xlab("Zona") + ylab("Índice de Evaluacion a las instituciones en su lucha contra la corrupción")+
  ggtitle("Promedio de índice de Evaluacion a las instituciones en su lucha contra la corrupción segun la zona de residencia")+ylim(35,45)

6.2 Prueba T para muestras independientes - Comapración de medias

  • Esta prueba compara la media de una variable numérica para dos grupos. Los grupos que forman la variable nominal/ordinal tienen que ser independientes. Es decir, cada observación debe pertenecer a un grupo o al otro, pero no a ambos.

  • Tipo de variable dependiente: Cuantitativa (numérica continua)

  • Tipo de variable independiente: Categórica con 2 grupos

  • Objetivo: Comparar si hay diferencia significativa entre las medias de dos grupos

  • Ejemplo: ¿Hay diferencia en el ingreso promedio entre hombres y mujeres?

  • Hipótesis nula: No hay diferencia de medias

6.2.1 Ejemplo 1

¿Existe diferencia de medias entre el indicador de evaluación a las instituciones anticorrupción entre los que viven en Lima Metropolitana y el interior urbano?

t.test(indicador~zonab,data=data_pro)
## 
##  Welch Two Sample t-test
## 
## data:  indicador by zonab
## t = -0.46397, df = 1192.7, p-value = 0.6428
## alternative hypothesis: true difference in means between group LimaM and group Interior is not equal to 0
## 95 percent confidence interval:
##  -1.4953278  0.9233459
## sample estimates:
##    mean in group LimaM mean in group Interior 
##               41.56094               41.84693
  • Aquí nos fijamos en el p-valor = 0.6428.
  • Hipótesis nula: No hay diferencia de medias entre los grupos
  • Al 95% de nivel de confianza, considera lo siguiente:
    • Si el p-valor es menor o igual a 0.05 se rechaza la hipótesis nula
  • Interpretación: Al 95% de nivel de confianza, no rechazamos la hipótesis nula, por tanto, no se puede afirmar que existe diferencia de medias significativas del índice de evaluación a las instituciones anticorrupción entre los que viven en Lima Metropolitana y el interior urbano.

6.2.2 Ejemplo 2

¿Existe diferencia de medias entre el indicador de evaluación a las instituciones anticorrupción entre los que viven entre quienes tienen hijos o no?

#le damos formato a la variable DG06
data_pro$DG06=as.factor(data_pro$DG06)
data_pro$DG06=factor(data_pro$DG06,levels = c(1:2),labels = c("Sí","No"))
table(data_pro$DG06)
## 
##   Sí   No 
## 1260  597
t.test(indicador~DG06,data=data_pro)
## 
##  Welch Two Sample t-test
## 
## data:  indicador by DG06
## t = -3.9093, df = 1157.2, p-value = 9.794e-05
## alternative hypothesis: true difference in means between group Sí and group No is not equal to 0
## 95 percent confidence interval:
##  -3.691100 -1.224195
## sample estimates:
## mean in group Sí mean in group No 
##         40.96781         43.42546
  • Dado que el p-valor es 9.794e-05, el e- significa que incluyen 5 decimales antes del punto. Por lo tanto, el valor es 0.000009794

  • Interpretación: Al 95% de nivel de confianza, rechazamos la hipótesis nula, por tanto, existe una diferencia de medias significativas del índice de evaluación a las instituciones anticorrupción entre quienes tienen o no hijos.

6.3 Prueba T para muestras independientes - Comparación de proporciones

  • pi1 y pi2 son las respectivas proporciones de la población 1 y población 2

  • Estas proporciones se aproximan con p1 y p2, las repsectivas proporciones muestrales

  • Ejemplos: Comparar las proporciones si el docente considera justa su remuneración por si el colegio es público y privado

# empleamos la data de Endo

library(rio)
data_endo = import("Base_ENDO_2018.sav")
#Exploramos la variable

## corroboro los valores de la variable P502:
str(data_endo$P502)
##  num [1:15087] 1 1 1 1 2 1 2 2 2 2 ...
##  - attr(*, "label")= chr "En su opinión, ¿considera justa la remuneración que recibe actualmente por su labor como docente en esta escuela?"
##  - attr(*, "format.spss")= chr "F1.0"
##  - attr(*, "display_width")= int 6
##  - attr(*, "labels")= Named num [1:3] 1 2 99
##   ..- attr(*, "names")= chr [1:3] "Si" "No" "NEP"
#Docente de colegio público o privado
str(data_endo$P07)
##  num [1:15087] 2 2 2 2 2 2 2 2 2 1 ...
##  - attr(*, "label")= chr "Gestión"
##  - attr(*, "format.spss")= chr "F8.0"
##  - attr(*, "display_width")= int 6
##  - attr(*, "labels")= Named num [1:2] 1 2
##   ..- attr(*, "names")= chr [1:2] "Publica" "Privada"
#Le damos formato
data_endo$P07=as.factor(data_endo$P07)
data_endo$P07=factor(data_endo$P07,
                levels = levels(data_endo$P07),
                labels = c("Pública","Privada"),
                ordered = F)
#tabla de contingencia
table(data_endo$P502, data_endo$P07)
##    
##     Pública Privada
##   1     721    3232
##   2    7504    3630
#Comparación de proporciones
prop.table(table(data_endo$P502,data_endo$P07),2)
##    
##        Pública    Privada
##   1 0.08765957 0.47099971
##   2 0.91234043 0.52900029

Donde 1 es Sí Justa y 2 es No Justa

Pregunta: ¿hay diferencia entre la proporción de si los docentes consideran justa o no su remuneración por si son de colegios públicos o privados?

prop.test(x=c(7504,3630),n=c(7504+721,3630+3232))
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(7504, 3630) out of c(7504 + 721, 3630 + 3232)
## X-squared = 2841, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.3699085 0.3967717
## sample estimates:
##    prop 1    prop 2 
## 0.9123404 0.5290003

Conclusión: Se recha la H0. Es probable que haya duferencias entre lo que no consideran justa su remuneración de acuerdo al colegio público o privado.

#Dado que 2 es no, reemplazo el valor de 2 por 0
data_endo$P502=as.factor(data_endo$P502)
levels(data_endo$P502)[2] <- 0
data_endo$P502=as.character(data_endo$P502)
data_endo$P502=as.numeric(as.character(data_endo$P502))
#Le asigno el formato de numéricas solo por conveniencia de formato para poder graficar

data_endo$P07=as.factor(data_endo$P07)

proporcion <- group.CI(P502~P07, data_endo)
proporcion
##       P07 P502.upper  P502.mean P502.lower
## 1 Pública 0.09377249 0.08765957 0.08154666
## 2 Privada 0.48281296 0.47099971 0.45918646

6.4 Repaso

6.4.1 Creación indicador aditivo

library(rio)
data_pro = import("Base de datos para Proética 2019_4.sav")

Se debe reemplazar el valor 6 por NA. Para ello generamos una nueva variable con el comando mutate:

library(dplyr)
data_pro=data_pro%>%
  dplyr::rename("impuestos"=P41_1)%>%
  mutate(impuestos=na_if(impuestos, 6))%>%
  dplyr::rename("piratas"=P41_2)%>%
  mutate(piratas=na_if(piratas, 6))%>%
  dplyr::rename("propina"=P41_3)%>%
  mutate(propina=na_if(propina, 6))%>%
  dplyr::rename("simpatizantes"=P41_4)%>%
  mutate(simpatizantes=na_if(simpatizantes, 6))%>%
  dplyr::rename("nofactura"=P41_5)%>%
  mutate(nofactura=na_if(nofactura, 6))%>%
  dplyr::rename("funcionario"=P41_6)%>%
  mutate(funcionario=na_if(funcionario, 6))%>%
  dplyr::rename("favorsexual"=P41_7)%>%
  mutate(favorsexual=na_if(favorsexual, 6))%>%
  dplyr::rename("contrato"=P41_8)%>%
  mutate(contrato=na_if(contrato, 6))%>%
  dplyr::rename("jueces"=P41_9)%>%
  mutate(jueces=na_if(jueces, 6))%>%
  dplyr::rename("leyes"=P41_10)%>%
  mutate(leyes=na_if(leyes, 6))%>%
  dplyr::rename("callado"=P41_11)%>%
  mutate(callado=na_if(callado, 6))

Realiamos la suma

library(dplyr)
data_pro$suma=(data_pro$impuestos+data_pro$piratas+data_pro$propina+data_pro$simpatizantes+data_pro$nofactura+data_pro$funcionario+data_pro$favorsexual+data_pro$contrato+data_pro$jueces+data_pro$leyes+data_pro$callado)
summary(data_pro$suma)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   11.00   18.00   22.00   21.48   23.00   54.00      91

De acuerdo a lo anterior, apreciamos que el valor mínimo es 11. Entonces, restamos a la suma el valor mínimo

data_pro$indicadorprevio=data_pro$suma-11
summary(data_pro$indicadorprevio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    0.00    7.00   11.00   10.48   12.00   43.00      91

Divido entre el nuevo máximo, es decir 43

data_pro$indicador=(data_pro$indicadorprevio/43)
summary(data_pro$indicador)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0000  0.1628  0.2558  0.2437  0.2791  1.0000      91

Creación del indicador: Dado que los valores están de 0 a 1, los multiplico por 100 si deseo que el indicador sea de 0 a 100, o los multiplico por 10 si quiero que el indicador sea de 0 a 10.

data_pro$indicador0a10=data_pro$indicador*10
summary(data_pro$indicador0a10)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   1.628   2.558   2.436   2.791  10.000      91

6.4.2 Prueba T

Pregunta: ¿El indicador de tolerancia a la corrupción varía de acuerdo al lugar de residencia de los encuestados (Lima o el interior del país)?

Primero, formateamos la variable lugar de residencia (zonab)

data_pro$zonab=as.factor(data_pro$zonab)
data_pro$zonab=factor(data_pro$zonab,
                levels = levels(data_pro$zonab),
                labels = c("Lima","Interior"),
                ordered = F)

Verifico

table(data_pro$zonab)
## 
##     Lima Interior 
##      578     1279

Realizo la tabla de diferencias de medias a nivel descriptivo.

Pregunta: ¿El indicador de tolerancia a la corrupción varía de acuerdo al lugar de residencia de los encuestados?

library(psych)
## 
## Adjuntando el paquete: 'psych'
## The following objects are masked from 'package:scales':
## 
##     alpha, rescale
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
describeBy(data_pro$indicador0a10,group=data_pro$zonab, mat = TRUE)
##     item   group1 vars    n     mean       sd  median  trimmed       mad min
## X11    1     Lima    1  551 2.299413 1.324154 2.55814 2.272320 0.6895814   0
## X12    2 Interior    1 1215 2.498612 1.462160 2.55814 2.365735 1.0343721   0
##           max     range     skew kurtosis         se
## X11  9.534884  9.534884 1.051263 4.768987 0.05641084
## X12 10.000000 10.000000 0.982531 1.726828 0.04194756
library(dplyr)
library(lsr)
tabla_pro2=data_pro%>%
  dplyr::group_by(zonab)%>%
  dplyr::summarise(Media = mean(indicador0a10, na.rm=T),
            limiteinferior = ciMean(indicador0a10,conf = 0.99, na.rm=T)[1],
            limitesuperior = ciMean(indicador0a10,conf = 0.99, na.rm=T)[2]
            )
tabla_pro2
## # A tibble: 2 × 4
##   zonab    Media limiteinferior limitesuperior
##   <fct>    <dbl>          <dbl>          <dbl>
## 1 Lima      2.30           2.15           2.45
## 2 Interior  2.50           2.39           2.61
t.test(indicador0a10~zonab, data=data_pro)
## 
##  Welch Two Sample t-test
## 
## data:  indicador0a10 by zonab
## t = -2.8336, df = 1165, p-value = 0.004681
## alternative hypothesis: true difference in means between group Lima and group Interior is not equal to 0
## 95 percent confidence interval:
##  -0.33712342 -0.06127454
## sample estimates:
##     mean in group Lima mean in group Interior 
##               2.299413               2.498612

Respuesta: Al 95% de nivel de confianza, se puede considerar que existe una diferencia significativa en el indicador de tolerancia a la corrupción entre los encuestados que residen en Lima y en el interior del país. Quienes viven al interior del país suelen tener una tolerancia a la corrupción más alta de quienes residen en Lima Metropolitana.

Realizamos el gráfico:

library(ggplot2)
ggplot(tabla_pro2, aes(x= zonab, y =Media)) +
  geom_errorbar(aes(ymin=limiteinferior, ymax=limitesuperior), width = 0.2)+
   geom_text(aes(label=paste(round(Media, 2))), size=4)+
  xlab("Lugar de residencia") + ylab("Tolerancia a la corrupción")+
 ylim(1.5, 3)

7 Prueba ANOVA

¿Qué sucede si deseo comparar una variable numérica pero con una variable categórica de más de dos grupos?

Por ejemplo: El nivel de tolerancia a la corrupción con el Nivel Socioeconómico

¿Con qué otras variables categóricas podemos comparar al indicador de tolerancia a la corrupción?

  • Tipo de variable dependiente: Cuantitativa (numérica continua)
  • Tipo de variable independiente: Categórica con más de 2 grupos
  • Objetivo: Comparar si hay diferencias significativas entre las medias de tres o más grupos
  • Ejemplo: ¿El ingreso promedio varía según nivel educativo (primaria, secundaria, superior)?
  • ANOVA según las siglas de Analysis of Variance
  • Hay varios subtipos de ANOVA. Nos centramos en ANOVA de un factor porque a la variable independiente se le conoce como un factor
  • Usamos esta técnica cuando queremos saber si las medias de una variable son diferentes entre los niveles o grupos de otra variable.
  • ANOVA de un factor compara las medias de la variable dependiente entre los grupos o categorías de la variable independiente
  • Hipótesis Nula: Todas las medias son iguales
  • Se basa en el test F
  • Si se rechaza la H0, quizá todas las medias poblacionales sean distintas, quizá algunas, o quizá solo una difiere de las otras
  • Supuestos:
    • Para cada grupo, la distribución poblacional de la variable dependiente Y es normal
    • La desviación estándar de la distribución poblacional es la misma en cada grupo. Las poblaciones tiene todas igual varianza (homocedasticidad)
    • Las muestras de la población son muestras aleatorias independientes
  • Ejemplos:
    • ¿Existe diferencia del promedio de gastos mensuales en diversión según la ciudad de residencia? H0: No existen diferencias entre medias grupales
  • En general, una mayor variabilidad entre medias muestrales y una menor variabilidad dentro de cada grupo indica mayor evidencia contra la hipótesis nula sobre igualdad de medias poblacionales.

7.1 Ejercicio 1

Evalúa el índice de tolerancia a la corrupción según el grupo de edad

Primero le damos formato a la variable

data_pro$grupodeedad=as.factor(data_pro$Dg1x)
data_pro$grupodeedad=factor(data_pro$grupodeedad,
                  levels = levels(data_pro$grupodeedad),
                labels = c("18a24","25a39","mas40"),
                ordered = F)

Realizamos la prueba ANOVA

anova=aov(indicador0a10~ grupodeedad, data=data_pro)
summary(anova)
##               Df Sum Sq Mean Sq F value Pr(>F)
## grupodeedad    2      0  0.1071   0.053  0.949
## Residuals   1763   3575  2.0276               
## 91 observations deleted due to missingness

Rpta: Dado que el p-valor es 0.949, entonces a un 95% de nivel de confianza no se rechaza la hipótesis nula de igualdad de medias.

7.2 Ejercicio 2

Evalúa el índice de tolerancia a la corrupción según la macrozona

data_pro$macrozona=as.factor(data_pro$macrozona)
data_pro$macrozona=factor(data_pro$macrozona,
                      levels=levels(data_pro$macrozona),
                      labels=c("Lima","Norte","Centro","Sur","Selva"),
                      ordered=F)
anova1=aov(indicador0a10~ macrozona, data=data_pro)
summary(anova1)
##               Df Sum Sq Mean Sq F value  Pr(>F)    
## macrozona      4    127   31.66   16.17 5.2e-13 ***
## Residuals   1761   3448    1.96                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 91 observations deleted due to missingness

Rpta: Al 95% de nivel de confianza, se percibe evidencia que hay diferencia significativa entre los promedio del índice de corrupción según macrozona.

TukeyHSD(anova1)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = indicador0a10 ~ macrozona, data = data_pro)
## 
## $macrozona
##                     diff         lwr         upr     p adj
## Norte-Lima    0.14273283 -0.10700524  0.39247091 0.5230348
## Centro-Lima   0.57508908  0.27134175  0.87883641 0.0000026
## Sur-Lima     -0.17307769 -0.42989729  0.08374190 0.3506656
## Selva-Lima    0.55696049  0.25022077  0.86370020 0.0000077
## Centro-Norte  0.43235625  0.11355014  0.75116236 0.0020452
## Sur-Norte    -0.31581053 -0.59027583 -0.04134522 0.0147049
## Selva-Norte   0.41422765  0.09256922  0.73588609 0.0040934
## Sur-Centro   -0.74816677 -1.07255009 -0.42378346 0.0000000
## Selva-Centro -0.01812859 -0.38331003  0.34705285 0.9999241
## Selva-Sur     0.73003818  0.40285115  1.05722520 0.0000000

Se puede apreciar que hay una diferencia entre los promedios.

tabla4=data_pro%>%
  dplyr::group_by(macrozona) %>%
  dplyr::summarise(Desviacion = sd(indicador0a10, na.rm=T),
          Media = mean(indicador0a10, na.rm=T),
            min = ciMean(indicador0a10,conf = 0.95, na.rm=T)[1],
            max = ciMean(indicador0a10,conf = 0.95, na.rm=T)[2],
            n=length(indicador0a10)
            )
tabla4
## # A tibble: 5 × 6
##   macrozona Desviacion Media   min   max     n
##   <fct>          <dbl> <dbl> <dbl> <dbl> <int>
## 1 Lima            1.32  2.30  2.19  2.41   578
## 2 Norte           1.33  2.44  2.31  2.57   417
## 3 Centro          1.67  2.87  2.65  3.10   233
## 4 Sur             1.25  2.13  2.00  2.25   405
## 5 Selva           1.64  2.86  2.64  3.08   224

Gráfico

ggplot(tabla4,aes(x=macrozona,y=Media))+geom_errorbar(aes(ymin=min,ymax=max))+xlab("Macrozona")+ylab("Tolerancia a la corrupción")+ylim(1,4)

8 Chi-Cuadrado

8.1 Tabla de contingencia

  • Una tabla de contingencia se asemeja mucho a las típicas tablas 2x2, 3x3, la cual contiene: distribuciones condicionales y marginales

Construimos una tabla de contingencia

library(rio)
data_pro = import("Base de datos para Proética 2019_4.sav")

Le damos formato a la variable

data_pro$P02[data_pro$P02 == "4"] <- NA
data_pro$P02=as.factor(data_pro$P02)
data_pro$P02=factor(data_pro$P02,
                levels = levels(data_pro$P02),
                labels = c("Ha aumentado","Sigue igual","Ha disminuido"),
                ordered = F)

P02: ¿Cree que en los últimos 5 años la corrupción en el Perú ha aumentado, sigue igual o ha disminuido?

Observamos.. (1 es hombre y 2 es mujer)

tablasimple=table(data_pro$P02,data_pro$DG02)
tablasimple
##                
##                   1   2
##   Ha aumentado  644 706
##   Sigue igual   219 216
##   Ha disminuido  43  22

Para ver la tabla de porcentajes usamos el comando prop.table para solicitar la tabla de proporciones, 2 para solicitar que deseamos las proporciones por columnas. 100 para multiplicar por 100

tablaporcentajes=prop.table(table(data_pro$P02,data_pro$DG02),2)*100
tablaporcentajes
##                
##                         1         2
##   Ha aumentado  71.081678 74.788136
##   Sigue igual   24.172185 22.881356
##   Ha disminuido  4.746137  2.330508

Si le queremos dar un mejor formato usamos kableExtra

library(kableExtra)
tablaporcentajes|>
  round(2)|>
  addmargins(1) |>
  kbl()|>
  kable_styling()
1 2
Ha aumentado 71.08 74.79
Sigue igual 24.17 22.88
Ha disminuido 4.75 2.33
Sum 100.00 100.00

8.2 Chi-Cuadrado

  • Chi-cuadrado es una prueba de independencia entre dos variables que es apropiada cuando estas dos variables son nominales.

  • Chi-cuadrado trata a las variables que analiza como nominales, por lo tanto si las variables analizadas son ordinales o intervalares, esta prueba no toma en cuenta esta información “adicional”

  • En el contexto de esa prueba o test, cuando se habla de independencia o dependencia estadística se está haciendo referencia a lo que sucede entre esas dos variable a nivel de población Estadística inferencial

  • Tipo de variable dependiente e independiente: Categóricas (nominales u ordinales)

  • Objetivo: Evaluar si hay asociación o independencia entre dos variables categóricas

  • Ejemplo: ¿Existe relación entre el género (hombre/mujer) y si votó o no en las elecciones?

8.2.1 Frecuencias observadas

Las frecuencias observadas nos indican cuántos casos caen en cada casilla

tablasimple=table(data_pro$P02,data_pro$DG02)
tablasimple
##                
##                   1   2
##   Ha aumentado  644 706
##   Sigue igual   219 216
##   Ha disminuido  43  22

Otra forma

chisq.test(tablasimple)$observed
##                
##                   1   2
##   Ha aumentado  644 706
##   Sigue igual   219 216
##   Ha disminuido  43  22

8.2.2 Frecuencias esperadas

Las Frecuencias esperadas nos indican cuántos casos caen cada casilla, si cada casilla es proporcional a las frecuencias marginales. Supone que no existe relación entre las variables.

chisq.test(tablasimple)$expected
##                
##                         1         2
##   Ha aumentado  661.13514 688.86486
##   Sigue igual   213.03243 221.96757
##   Ha disminuido  31.83243  33.16757

Se espera que cada casilla sea mayor a 5.

8.2.3 Test de independencia Chi-Cuadrado

Sería resta cada celda (Frecuencia observada - Frecuencia esperada)

  • El valor de un test o prueba de significancia estadística tiene que con la intención de resumir la evidencia contra H0
  • Cuanto más pequeño es el p-valor más fuerte es la evidencia con H0 y a favor de la Ha (hipótesis alterna)

**En el caso de Chi-Cuadrado recuerden que: - H0: no hay asociación entre las variables - Ha: sí hay asociación entre las variables

Cuando el p-valor de una prueba Chi-Cuadrado es menor que 0.05, entonces podemos rechazar H0 y aceptar Ha

8.2.4 Aplicación Chi-Cuadrado

Definición de hipótesis:

  • H0 = las variables son independientes / No hay asociación entre el sexo y su percepción de corrupción

  • Ha = sí hay asociación

Seleccionar un nivel de significancia: - Al 95% de nivel de confianza, el nivel de significancia es de 0.05

Verifico el criterio según el p-valor: - El p-valor es menor que 0.05, rechazamos la H0 - El p-valor es mayor que 0.05, no rechazamos la H0

Interpretación: - Al 95% del nivel de confianza, existe una asociación/relación entre el sexo y la percepción de corrupción

En resumen: - Qué se mide con el test o la prueba Chi-Cuadrado: se mide cuán cerca (o cuán lejos) están las frecuencias esperadas (el número de casos que se espararían en cada celda si es que las variables fueran estadísticamente independientes) de las frecuencias observadas.

  • Cuanto más grande el valor de este test o prueba, mucho mayor es la evidencia contra la H0 (la hipótesis que establece que las variables son estadísticamente independientes)

  • El valor de este test o prueba no depende de qué variable se asume como independiente y qué variable se asume como dependiente

  • Sin embargo, esta prueba o test no cuenta toda la historia de la relación entre dos variable nominales

chisq.test((tablasimple))
## 
##  Pearson's Chi-squared test
## 
## data:  (tablasimple)
## X-squared = 8.8759, df = 2, p-value = 0.01182

Gráfico

tablaporcentajes=as.data.frame(tablaporcentajes)
tablaporcentajes
##            Var1 Var2      Freq
## 1  Ha aumentado    1 71.081678
## 2   Sigue igual    1 24.172185
## 3 Ha disminuido    1  4.746137
## 4  Ha aumentado    2 74.788136
## 5   Sigue igual    2 22.881356
## 6 Ha disminuido    2  2.330508
library(ggplot2)
ggplot(data=tablaporcentajes, aes(x=Var2, y=Freq, fill=Var1, ymax=100))+
  geom_bar(position="stack", stat="identity")+
  geom_text(aes(label=paste(round(Freq, 1), "%", sep="")),
            position=position_stack(), vjust=1.5)+
  labs(fill="Percepción prospectiva de la corrupción")+
  ylab("Porcentaje")+
  xlab("Sexo")

9 Correlación R de Pearson

9.1 Diagrama de dispersión

Rejilla bidimensional de las coordinadas de dos variables numéricas X, Y

Se puede observar: - Dispersión de los datos - Casos atípicos - Forma de la relación - Si la relación es lineal -> direccionalidad de la relación positiva o negativa - Fuerza de la relación

9.2 ¿Qué es la correlación?

La correlación es el cambio sistemático en las puntuaciones de dos variables numéricas.

9.3 Coeficientes de Correlación de Pearson

  • El coeficiente de Correlación Lineal de Pearson mide la dirección y la fuerza de la relación lineal que existe entre dos variable intervalres o cuantitativas
  • Para que su cálculo tenga sentido, se requiere que las dos variables sean intervalares o cuantitativas
  • Por lo general se le denota con una “r” minúscula

9.4 Propiedades de Correlación de Pearson

  • No hace distinción alguna entre variables explicativas (independientes) o variables de respuesta (dependiente)

  • Solo mide la fuerza de una relación lineal entre dos variables (e informa sobre la dirección de esta relación)

  • La correlación lineal no mide ni describe otro tipo de relaciones (por ejemplo, relaciones curvilíneas entre variables) aunque estas sean muy fuertes

  • Tiene valores entre -1 y 1. La fuerza de la relación lineal aumenta a medida que r se aleja de 0 y se acerca a -1 o 1

  • r positivo es cuando existe una asociación positiva entre dos variables cuantitativas

  • r negativo es cuando existe una asociación negativa entre dos variables cuantitativas

  • No posee una unidad de medida y por lo tanto no varía cuando se cambian las unidades medida de x, y o de ambas variables. Por ejemplo, si en vez de medir el peso en kilogramos se mide en libras o si en vez de medir la altura en centímetros se mide en pulgadas, el valor de r es el mismo

  • El coeficiente se ve afectado por observaciones atípicas, al igual que con la media y la desviación típica o estándar.

  • Es la técnica paramétrica, la cual tiene como requisito la normalidad y la igualdad de varianzas

  • Lo que se analiza en esta prueba es la existencia o no de la correlación lineal entre dos variables numéricas que se distribuyen normalmente

En resumen: - r = 0, no hay relación lineal entre las dos variables - r = -1, existe una relación lineal negativa perfecta (va de pequeña, moderada, grande) - r = 1, existe una relación lineal positiva perfecta (va de pequeña, moderada, grande)

10 Correlación Rho-Spearman

  • La correlación Rho-Spearman es la alternativa no paramétrica disponible para analizar si existe o no asociación entre dos variables intervalares o cuantitativas

  • Se emplea cuando existen outliers que pueden distorsionar Pearson o cuando los datos no cumplen los supuestos de normalidad

  • Su interpretación es idéntica a la de la correlación r de Pearson

  • Existen un conjunto de métodos que no requieren que los presupuestos de los métodos paramétricos. Estos métodos, llamados no paramétricos, son por lo general muy útiles cuando las muestras son pequeñas

  • Prueba no paramétrica

11 Archivo Magallanes

Link: https://estadistica-analisispolitico.github.io/maestriaCpRi/

11.1 Cargamos los datos

linkADrive='https://docs.google.com/spreadsheets/d/e/2PACX-1vS2ZSNM8BIZtoufVTO4Mw3ZmTWW1rAAtsGzFg0shHTJXX-3GmtLsgU-Nqkw5RzDgrNX31GTC9L7LnEz/pub?gid=0&single=true&output=csv'

dataRegiones=read.csv(linkADrive )

head(dataRegiones)
##   DEPARTAMENTO UBIGEO buenEstado contribuyentes_sunat peaOcupada TOTALpob
## 1     AMAZONAS  10000       18.6                75035     130019   417365
## 2       ÁNCASH  20000       13.9               302906     387976  1139115
## 3     APURÍMAC  30000        8.7               103981     140341   424259
## 4     AREQUIPA  40000       27.4               585628     645001  1460433
## 5     AYACUCHO  50000       17.0               151191     235857   650940
## 6    CAJAMARCA  60000       18.0               277457     461312  1427527
##    URBANO  RURAL
## 1  205976 211389
## 2  806065 333050
## 3  243354 180905
## 4 1383694  76739
## 5  444473 206467
## 6  567141 860386

Supongamos que estás interesado en la “situación de los locales escolares en el Perú”. Ese simple interés te lleva a buscar datos para saber tal situación. De pronto te encuentras con estos datos basados en el CEPLAN.

Imaginemos que estos datos son lo ‘mejor’ que podrás conseguir:

  • Variable: Locales Publicos en buen estado; Tipo Medida: Porcentaje.

  • Variable: Cantidad de Contribuyentes a la SUNAT; Tipo Medida: Conteo.

  • Variable: PEA Ocupada; Tipo Medida: Conteo.

  • Variables de Población; Tipo Medida: Conteo

Antes de explorar los datos de manera estadística, debemos primero verificar cómo R ha intepretado el tipo de datos:

str(dataRegiones)
## 'data.frame':    25 obs. of  8 variables:
##  $ DEPARTAMENTO        : chr  "AMAZONAS" "ÁNCASH" "APURÍMAC" "AREQUIPA" ...
##  $ UBIGEO              : int  10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 ...
##  $ buenEstado          : num  18.6 13.9 8.7 27.4 17 18 33.8 11.9 10.1 15.6 ...
##  $ contribuyentes_sunat: int  75035 302906 103981 585628 151191 277457 499257 466883 80353 185658 ...
##  $ peaOcupada          : int  130019 387976 140341 645001 235857 461312 445072 496399 111996 253200 ...
##  $ TOTALpob            : int  417365 1139115 424259 1460433 650940 1427527 1046953 1315220 367252 759962 ...
##  $ URBANO              : int  205976 806065 243354 1383694 444473 567141 1046953 865771 166163 447620 ...
##  $ RURAL               : int  211389 333050 180905 76739 206467 860386 0 449449 201089 312342 ...

Asumamos que la variable de interés será la situación de los locales de colegios. La columna de interés es de tipo numérico, y R también lo tiene intrepretado así.

11.2 Exploración Univariada de la Variable de Interés

Si los datos están en el tipo adecuado, puede iniciarse la exploración estadística.

Tenemos 25 observaciones a nivel departamental. La manera más rápida de ver los estadígrafos es usando el comando summary():

summary(dataRegiones$buenEstado)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    7.70   13.90   17.30   18.61   21.80   40.50

Pero, nos faltaría algunos estadígrafos, que podemos añadir así:

library(DescTools)
## 
## Adjuntando el paquete: 'DescTools'
## The following objects are masked from 'package:psych':
## 
##     AUC, ICC, SD
allStats=c(summary(dataRegiones$buenEstado),
  sd=sd(dataRegiones$buenEstado), # variabilidad (en relacion a la media)
  skew=Skew(dataRegiones$buenEstado), # asimetria (positiva o negativa)
  kurt=Kurt(dataRegiones$buenEstado), # concentración (enpinada / aplanada)
  cv=CoefVar(dataRegiones$buenEstado)) # variabilidad (mayor o menor que uno)
allStats
##       Min.    1st Qu.     Median       Mean    3rd Qu.       Max.         sd 
##  7.7000000 13.9000000 17.3000000 18.6120000 21.8000000 40.5000000  8.2596065 
##       skew       kurt         cv 
##  0.9008641  0.2026850  0.4437786

De lo anterior queda claro que hay dispersion moderada (sd<mean / cv<1 ); ligera cola a la derecha (skew >0 / mean > median); y que está poco empinada (kurt > 0).

Veamos lo mismo en el histograma:

library(ggplot2)

base=ggplot(data=dataRegiones,
            aes(x=buenEstado))
histogram= base + geom_histogram(aes(y = after_stat(density)),
                 colour = 1, fill = "white",bins=10) +  
    stat_function(fun = dnorm,
                  args = list(mean = allStats['Mean'],
                              sd = allStats['sd']),col='red')
    
histogram

Y el boxplot

base=ggplot(data=dataRegiones,
            aes(y=buenEstado))
boxplot=base + geom_boxplot() 

boxplot

A esta altura sólo falta identificar a los atípicos en el boxplot, lo cual podemos recuperar con ggplot_build:

valuesFromBox=ggplot_build(boxplot)$data[[1]]
valuesFromBox
##   ymin lower middle upper ymax   outliers notchupper notchlower x flipped_aes
## 1  7.7  13.9   17.3  21.8 31.4 33.8, 40.5    19.7964    14.8036 0       FALSE
##   PANEL group ymin_final ymax_final   xmin  xmax xid newx new_width weight
## 1     1    -1        7.7       40.5 -0.375 0.375   1    0      0.75      1
##   colour  fill alpha shape linetype linewidth
## 1 grey20 white    NA    19    solid       0.5

Los outliers son:

outliersLocales=valuesFromBox$outliers[[1]]
outliersLocales
## [1] 33.8 40.5

Nota que cuando hay outliers, se puede calcular del grafico los maximos y minimos teóricos:

valuesFromBox[c('ymin','ymax')]
##   ymin ymax
## 1  7.7 31.4

En este caso, sabemos que los valores que exceden 31.4 serán considerados atípicos:

dataRegiones[dataRegiones$buenEstado>31.4,]
##    DEPARTAMENTO UBIGEO buenEstado contribuyentes_sunat peaOcupada TOTALpob
## 7        CALLAO  70000       33.8               499257     445072  1046953
## 23        TACNA 230000       40.5               163436     161903   349056
##     URBANO RURAL
## 7  1046953     0
## 23  329169 19887

Es decir, los locales en buen estados se distribuyen por lo general entre 7.7 y 31.4 por ciento, y que la mitad de los departamentos tienen a lo más un 17.3 por ciento de buenos locales. Las regiones destacadas son sólo dos, pero ninguna de ellas supera siquiera el 50 por ciento.

11.3 Análisis Bivariado

11.3.1 Numérica - Numérica

Consideremos que nos interesa explorar la posible relación entre nuestra variable de interés y la PEA ocupada. Como son dos variables de tipo numérico la estrategia a seguir es el análisis de correlación. Veamos este scatterplot:

library(ggrepel)
base=ggplot(data=dataRegiones, aes(x=peaOcupada, y=buenEstado))
scatter = base + geom_point()
scatterText = scatter + geom_text_repel(aes(label=DEPARTAMENTO),size=2)
scatterText

Calculemos ahora los indices de correlación:

f1=formula(~peaOcupada + buenEstado)

11.3.1.1 Evaluamos la normalidad

shapiro.test(dataRegiones$peaOcupada)
## 
##  Shapiro-Wilk normality test
## 
## data:  dataRegiones$peaOcupada
## W = 0.39824, p-value = 4.257e-09
shapiro.test(dataRegiones$buenEstado)
## 
##  Shapiro-Wilk normality test
## 
## data:  dataRegiones$buenEstado
## W = 0.91834, p-value = 0.04696

11.3.1.2 Camino parametrico

pearsonf1=cor.test(f1,data=dataRegiones)[c('estimate','p.value')]
pearsonf1
## $estimate
##       cor 
## 0.3567442 
## 
## $p.value
## [1] 0.08002776

11.3.1.3 Camino no paramétrico

spearmanf1=cor.test(f1,data=dataRegiones,method='spearman',exact=F)[c('estimate','p.value')]
spearmanf1
## $estimate
##       rho 
## 0.2785151 
## 
## $p.value
## [1] 0.1776146

Hasta aquí, dudamos que esas variables estén correlacionadas.

11.3.2 Numérica - Categórica

Otro caso importante es cuando analizamos nuestra variable versus una variable categórica. Por ejemplo, creemos una columna que indique (de manera imprecisa) costa,sierra y selva:

dataRegiones$zona=c('selva','costa','sierra', 'costa','sierra',
                      'sierra','costa','sierra','sierra','selva',
                      'costa','sierra','costa','costa','costa',
                      'selva','selva','costa','sierra','costa',
                      'sierra','selva','costa','costa','selva')

# tendriamos
dataRegiones
##     DEPARTAMENTO UBIGEO buenEstado contribuyentes_sunat peaOcupada TOTALpob
## 1       AMAZONAS  10000       18.6                75035     130019   417365
## 2         ÁNCASH  20000       13.9               302906     387976  1139115
## 3       APURÍMAC  30000        8.7               103981     140341   424259
## 4       AREQUIPA  40000       27.4               585628     645001  1460433
## 5       AYACUCHO  50000       17.0               151191     235857   650940
## 6      CAJAMARCA  60000       18.0               277457     461312  1427527
## 7         CALLAO  70000       33.8               499257     445072  1046953
## 8          CUSCO  80000       11.9               466883     496399  1315220
## 9   HUANCAVELICA  90000       10.1                80353     111996   367252
## 10       HUÁNUCO 100000       15.6               185658     253200   759962
## 11           ICA 110000       28.3               276632     369753   893292
## 12         JUNÍN 120000       11.6               377618     512532  1316894
## 13   LA LIBERTAD 130000       21.8               489909     691563  1888972
## 14    LAMBAYEQUE 140000       19.4               345668     459254  1244821
## 15          LIMA 150000       31.4              4887993    4536507 10135009
## 16        LORETO 160000       15.1               218179     300663   981897
## 17 MADRE DE DIOS 170000       17.3                57440      64206   161204
## 18      MOQUEGUA 180000       19.0                93002      82399   182017
## 19         PASCO 190000        7.8                72646      97392   272136
## 20         PIURA 200000       22.0               480596     665465  1929970
## 21          PUNO 210000        7.7               307698     454941  1226936
## 22    SAN MARTÍN 220000       16.2               198605     321613   862459
## 23         TACNA 230000       40.5               163436     161903   349056
## 24        TUMBES 240000       17.3                85685      90571   234698
## 25       UCAYALI 250000       14.9               161228     189783   548998
##      URBANO  RURAL   zona
## 1    205976 211389  selva
## 2    806065 333050  costa
## 3    243354 180905 sierra
## 4   1383694  76739  costa
## 5    444473 206467 sierra
## 6    567141 860386 sierra
## 7   1046953      0  costa
## 8    865771 449449 sierra
## 9    166163 201089 sierra
## 10   447620 312342  selva
## 11   831180  62112  costa
## 12   993029 323864 sierra
## 13  1516546 372426  costa
## 14  1006609 238212  costa
## 15 10012201 122808  costa
## 16   695083 286814  selva
## 17   137927  23277  selva
## 18   167704  14313  costa
## 19   184423  87713 sierra
## 20  1535498 394472  costa
## 21   714334 512602 sierra
## 22   613683 248776  selva
## 23   329169  19887  costa
## 24   219639  15059  costa
## 25   444790 104208  selva

Pidamos un boxplot, pero por grupos:

base=ggplot(data=dataRegiones, aes(x=zona, y=buenEstado))
base + geom_boxplot() +  geom_jitter(color="black", size=0.4, alpha=0.9)

Parece que hubiese diferencia entre las categorías. Para verificar si hay o no igualdad entre distribuciones depende si las variables se distribuyen o no de manera normal por grupo. Como ello no es fácil de discernir visualmente, complementemos el análisis con los tests de normalidad. Usemos Shapiro-Wilk en cada grupo:

11.3.2.1 Evaluamos la normalidad

f2=formula(buenEstado~zona)


tablag= aggregate(f2, dataRegiones,
          FUN = function(x) {y <- shapiro.test(x); c(y$statistic, y$p.value)})




shapiroTest=as.data.frame(tablag[,2])
names(shapiroTest)=c("W","Prob")
shapiroTest
##           W      Prob
## 1 0.9571321 0.7354761
## 2 0.9127623 0.4548169
## 3 0.8667128 0.1399418

Habría normalidad en todos los grupo. Usemos entonces tanto la prueba de Kruskall (no paramétrica) como la prueba anova para analizar las diferencias:

11.3.2.2 Paramétrica

aovZona=aov(f2,data=dataRegiones)
summary(aovZona)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## zona         2  872.2   436.1   12.54 0.000232 ***
## Residuals   22  765.1    34.8                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(aovZona)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = f2, data = dataRegiones)
## 
## $zona
##                    diff       lwr       upr     p adj
## selva-costa   -8.698485 -16.21700 -1.179969 0.0214473
## sierra-costa -13.381818 -20.26541 -6.498226 0.0001991
## sierra-selva  -4.683333 -12.68394  3.317276 0.3239459

11.3.2.3 No paramétrica

kruskal.test(f2,data=dataRegiones)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  buenEstado by zona
## Kruskal-Wallis chi-squared = 15.004, df = 2, p-value = 0.000552
pairwise.wilcox.test(dataRegiones$buenEstado, dataRegiones$zona, p.adjust.method = "bonferroni")
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  dataRegiones$buenEstado and dataRegiones$zona 
## 
##        costa   selva  
## selva  0.03580 -      
## sierra 0.00056 0.17782
## 
## P value adjustment method: bonferroni

Con toda esta información, iriamos concluyendo también que los locales en buen estado de la costa son más numerosos que las otras zonas del país, y que la sierra con la selva podrían estar al mismo nivel.

11.4 Regresión Lineal

La regresión es una técnica donde hay que definir una variable dependiente y una o más independientes. Las independientes pueden tener rol predictor, dependiendo del diseño de investigación, aunque por defecto tiene un rol asociativo.

La regresión sí quiere informar cuánto una variable (independiente) está asociada a la variación de otra (dependiente), de ahí que es una técnica para probar hipótesis direccionales o asimétricas (las correlaciones tiene hipótesis simétricas).

La regresión devuelve un modelo relacional entre variables, es decir una ecuación, que recoge cómo una o más variables explicarían a otra. Para nuestro caso la variable dependiente es el estado de los locales:

Por ejemplo, para la hipótesis ‘el estado de los locales escolares públicos en una región depende de la PEA ocupada regional y de la ubicación de la región’, la regresión arrojaría este resultado:

modelo1=formula(buenEstado~peaOcupada + zona)
regre1=lm(modelo1,data=dataRegiones)
summary(regre1)
## 
## Call:
## lm(formula = modelo1, data = dataRegiones)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.4326  -3.0406  -0.7558   2.4503  16.5456 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.368e+01  2.092e+00  11.319 2.12e-10 ***
## peaOcupada   1.673e-06  1.449e-06   1.155 0.261108    
## zonaselva   -7.751e+00  3.082e+00  -2.515 0.020100 *  
## zonasierra  -1.261e+01  2.801e+00  -4.502 0.000196 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.853 on 21 degrees of freedom
## Multiple R-squared:  0.5606, Adjusted R-squared:  0.4978 
## F-statistic: 8.931 on 3 and 21 DF,  p-value: 0.0005205

Hasta aquí, vemos que lo que nos informaba el análisis bivariado se mantiene en la regresión: la PEA no tiene efecto, pero la zona sí (no estar en la costa lo tiene).

Sin embargo, es aquí donde reflexionamos si los datos crudos que tenemos podrían necesitar alguna transformación:

# la pea como porcentaje
dataRegiones$peaOcu_pct=dataRegiones$peaOcupada/dataRegiones$TOTALpob


modelo2=formula(buenEstado~peaOcu_pct + zona)
regre2=lm(modelo2,data = dataRegiones)
summary(regre2)
## 
## Call:
## lm(formula = modelo2, data = dataRegiones)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.6580 -2.8489 -0.4126  2.6089 10.9903 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)   -5.978     11.794  -0.507  0.61753   
## peaOcu_pct    76.510     28.886   2.649  0.01502 * 
## zonaselva     -4.106      3.169  -1.296  0.20906   
## zonasierra    -9.359      2.864  -3.267  0.00368 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.226 on 21 degrees of freedom
## Multiple R-squared:  0.6497, Adjusted R-squared:  0.5997 
## F-statistic: 12.98 on 3 and 21 DF,  p-value: 5.136e-05

Aquí aparace algo muy interesante, primero que peaOcu_pct tiene efecto, pues es significativo (p-valor es menor que 0.05); segundo, que ese efecto es directo, pues el coeficiente calculado es positivo (signo de columna Estimate); y tercero que la magnitud de ese efecto es 76.51, lo que indica cuánto aumenta, en promedio, la variables dependiente, cuando la variable independiente se incremente en una unidad. Ahora bien, la zona selva ya no difiere de la costa en esta nueva regresión.

12 Regresión Lineal Simple

12.1 Utilidad de los modelos de regresión lineal

  • Explicar: construir un modelo de regresión lineal simple que describa cómo influye una variable X sobre otra variable Y

  • Efecto: estimar el valor promedi ode Y para un valor de X

  • Predecir: predecir futuros de la variable respuesta Y (aunque creo que para esto se usa más machine learning)

12.2 Regresión lineal

  • Un modelo de regresión lieanl tiene como variable dependiente una variable numérica o intervalar

  • Las variables explicativas (independientes) que son parte del modelo suelen ser numéricas o intervalares; sin embargo, es posible incorporar variables explicativas ordinales o categóricas. Un modelo de regresión lieanl puede ser bivariado o multivariado

12.3 Regresión lieanl simple (regresión lineal bivariado)

  • Un modelo de regresión lineal bivariado (o un análisis de regresión lineal bivariado) sirve para:
    • Establecer la existencia o no de una relación (asociación) lineal entre estas dos variables

    • Calcular una medida del impacto o influencia que tiene la variable explicativa sobre la variable dependiente

    • Una medida de la dirección y la fuerza de asociación (lineal) entre la variable explicativa y la variable dependiente

    • Una medida de la magnitud o el grado de variación de la variable dependiente que es explicado por la variable explicativa

Todo esto a través de pruebas de significancia que consideran una hipótesis nula y una hipótesis alterna sobre la relación estadística que existe entre estas dos variables

Lo que determina la relación entre las variables es el signo y el valor del coeficiente

12.4 Estimadores/Coeficientes

Esta parte es algo más matemática (?)

  • Los coeficientes se calculan a través de los criterios de mínimos cuadrados

  • Determinar cuales son los valores más adecuados para los coeficientes que ayuden a minimizar el error de estimar y. (Valor observado menos valor esperado)

  • El método consiste en minimizar la suma de los cuadrados de las distancias verticales entre los datos y las estimaciones, es decir, minimizar la suma de los residuos al cuadrado

12.5 Residuos

La diferencia entre valor observado y el valor predicho

  • Un valor positivo significa que el valor observado es mayor que el predicho

  • Un valor negativo significa que el valor observado es menor que el predicho

  • Mientras menor sean los residuos, mejor es la predicción

12.6 R cuadrado

Una regresión lineal genera:

  • Un coeficiente de regresión (lineal) que estima el efecto de la variable independiente sobre la variable dependiente

  • Una medida (R cuadrado) que indica en qué medida la variable independiente explica la variación en la variable dependiente

  • Siempre y cuando se observe (o exista) una relación lineal, se puede calcular una ecuación lineal que predice los cambios en Y a partir de los cambios en X

  • Una regresión lineal a partir de la recta de mínimos cuadrado es aquella en la cual la ecuación que predice los cambios es la “mejor” línea en cuando a la reducción de las distancias entre los valores observados y los valores que se predicen (suma de errores al cuadrado)

  • Resume qué tan bien X predice Y.

12.7 Ejercicio 1

library(rio)
data_votos = import("PVotos_CirElectoral_idh.xlsx")
names(data_votos)
##  [1] "Distrito.electoral" "IDH"                "Evida"             
##  [4] "EduCom"             "Aeduca"             "IngresoPer"        
##  [7] "VotosV_Castillo"    "VotosV_Keiko"       "VotosV_Aliaga"     
## [10] "VotosV_De_Soto"     "VotosV_Mendoza"     "Votos_no_validos"

Modelo de regresión simple

modelo1=lm(VotosV_Castillo~IDH,data=data_votos)
summary(modelo1)
## 
## Call:
## lm(formula = VotosV_Castillo ~ IDH, data = data_votos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25650 -0.10446 -0.02506  0.13784  0.20256 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.7566     0.1715   4.413 0.000185 ***
## IDH          -0.9311     0.3225  -2.887 0.008096 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1391 on 24 degrees of freedom
## Multiple R-squared:  0.2578, Adjusted R-squared:  0.2269 
## F-statistic: 8.337 on 1 and 24 DF,  p-value: 0.008096

Gráfico

library(ggplot2)
ggplot(data_votos, aes(x=IDH, y=VotosV_Castillo)) + geom_point(colour = "blue")

ggplot(data_votos, aes(x=IDH, y=VotosV_Castillo)) + 
  geom_point() +
  geom_smooth(method='lm', formula=y~x, se=FALSE, col='dodgerblue1') +
  theme_light()

Extraemos coeficientes

modelo1$coefficients
## (Intercept)         IDH 
##   0.7566147  -0.9311010

Extraemos los valores pronosticados

modelo1$fitted.values
##          1          2          3          4          5          6          7 
## 0.36766043 0.27622816 0.37400122 0.15834009 0.35368892 0.36078672 0.16055816 
##          8          9         10         11         12         13         14 
## 0.27982425 0.39923453 0.33421924 0.19796679 0.28105539 0.24616236 0.25917211 
##         15         16         17         18         19         20         21 
## 0.08108891 0.22616644 0.30654192 0.18529734 0.14309978 0.31111280 0.27895471 
##         22         23         24         25         26 
## 0.32310666 0.30670643 0.20723858 0.23969351 0.30640499

Extraemos los residuales

modelo1$residuals
##            1            2            3            4            5            6 
## -0.107178303 -0.041382245  0.160479858  0.163567033  0.165802154  0.087073295 
##            7            8            9           10           11           12 
## -0.096322046  0.102558747  0.142459979  0.042092570 -0.057859686 -0.052206236 
##           13           14           15           16           17           18 
## -0.130647683 -0.129457954 -0.008743403 -0.078413987 -0.256504211  0.185377490 
##           19           20           21           22           23           24 
##  0.202564794  0.031994355 -0.178224325  0.151685024 -0.093003813  0.123959184 
##           25           26 
## -0.162790594 -0.166879999

12.8 Ejercicio 2

library(rio)
data_col = import("Colombia2022.xlsx")
names(data_col)
## [1] "Region"        "Petro (%)"     "Hernández (%)" "Fico(%)"      
## [5] "IDH-2019"
data_col$Petro = data_col$`Petro (%)`
data_col$IDH2019 = data_col$`IDH-2019`
names(data_col)
## [1] "Region"        "Petro (%)"     "Hernández (%)" "Fico(%)"      
## [5] "IDH-2019"      "Petro"         "IDH2019"
modelo2=lm(Petro~IDH2019,data=data_col)
summary(modelo2)
## 
## Call:
## lm(formula = Petro ~ IDH2019, data = data_col)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25500 -0.11035 -0.02323  0.09892  0.22906 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   2.0028     0.4968   4.032 0.000334 ***
## IDH2019      -2.1193     0.6670  -3.178 0.003354 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.141 on 31 degrees of freedom
## Multiple R-squared:  0.2457, Adjusted R-squared:  0.2214 
## F-statistic:  10.1 on 1 and 31 DF,  p-value: 0.003354
ggplot(data_col, aes(x=IDH2019, y=Petro)) + 
  geom_point() +
  geom_smooth(method='lm', formula=y~x, se=FALSE, col='dodgerblue1') +
  theme_light()