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
Existen dos tipos principales de bases de datos:
Asimismo, por lo general esta data está contenida en base de datos y los archivos pueden estar contenidos en los siguientes programas:
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.
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
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.
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
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.
median(data_sf$Puntuación,na.rm=T)
## [1] 59.1466
library(dplyr)
data_sf %>%
summarize(Mediana=median(Puntuación))
## Mediana
## 1 59.1466
mean(data_sf$Puntuación, na.rm=T)
## [1] 58.23674
library(dplyr)
data_sf %>%
summarize(Promedio=mean(Puntuación))
## Promedio
## 1 58.23674
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
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`.
Para variables categóricas
library(ggplot2)
ggplot(data = data_sf, aes(x=Situación)) + geom_bar(fill='red')
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
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
#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
var(data_sf$Puntuación)
## [1] 296.4559
#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
Dependiendo del porcentaje de casos que se quiere identificar al interior de una distribución se puede usar: - Deciles (10%) - Cuartiles (25%) - Quintiles (20%)
#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
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:
IQR(data_sf$Puntuación)
## [1] 25.7547
Son observaciones que se alejan del conjuto de datos. Una regla para determinar si un dato es un outlier es:
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)
library(ggplot2)
ggplot(data_sf, aes(y = Puntuación)) +
stat_boxplot(geom = "errorbar",
width = 0.25) +
geom_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.
Calcular la mediana, el percentil 25 y el percentil 75
Calcular el rango intercuartílico (IQR) como la diferencia entre el percentil 75 y el 25
Calcular la longitud máxima de las patillas multiplicando el IQR por 1.5 para identificar valores atípicos
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()
Observaciones que se alejan del conjunto de datos. Una regla para determinar si un datos es outlier es:
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:
boxplot(data_sf$Evol)
outliers <- boxplot(data_sf$Evol)$out
outliers
## [1] 54 49 -57 -47 -68 -53
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
Si la distribución es simétrica, la Media y la Mediana son exactamente iguales
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
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):
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`.
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`.
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")
“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.
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
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
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.
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.
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
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
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%
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
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)
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
Significa que la probabilidad de que en un muestreo repetido, el intervalo contenga el verdadero valor del parámetro
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
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
library(rio)
data_lb =import("Latinobarometro_2020_Esp.csv")
#seleccionamos los datos de Perú
library(dplyr)
dataperu=data_lb%>%filter(idenpa=="604")
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.
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%
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
####¿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
#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))
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
#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.
#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.
#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.
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
Analiza la relación existente entre dos variables. Presentamos las relaciones según tipos de escala que intervengan.
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)
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
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
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.
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.
Cuando al menos una de las dos variables categóricas a analizar es nominal, tenemos disponibles las siguientes pruebas:
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:
Cuando las dos variables son ordinales:
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.
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
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.
# 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)
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)
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
¿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
¿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.
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
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
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)
¿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?
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.
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)
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 |
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?
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
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.
Sería resta cada celda (Frecuencia observada - Frecuencia esperada)
**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
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")
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
La correlación es el cambio sistemático en las puntuaciones de dos variables numéricas.
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)
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
Link: https://estadistica-analisispolitico.github.io/maestriaCpRi/
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í.
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.
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)
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
pearsonf1=cor.test(f1,data=dataRegiones)[c('estimate','p.value')]
pearsonf1
## $estimate
## cor
## 0.3567442
##
## $p.value
## [1] 0.08002776
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.
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:
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:
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
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.
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.
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)
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
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
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
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
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.
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
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()