Intervalos de confianza

Un estimador puntual es un número que representa una aproximación al parámetro poblacional, mientras que un intervalo de confianza es un intervalo de números alrededor del estimador puntual donde creemos que se encuentra el parámetro poblacional.

Un buen estimador puntual se caraceriza por: 1) está centrado alrededor del parámetro y 2) tiene el error estándar lo más pequeño posible. Es decir, es insesgado y eficiente.

Los pasos para construir un intervalo de confianza son los siguientes: 1. Calcular el estimador puntual 2. Calcular el error estándar 3. Encontrar el valor t que le corresponde al nivel de confianza 4. Calcular el margen de error 5. Construir el intervalo de confianza

Paquetes

pacman::p_load("haven", "readxl", "tidyverse", "sjlabelled")

Lectura de datos

Recuerden que establecemos nuestro directorio de trabajo.

setwd("C:/Users/molar/Dropbox/2023_Trabajos/FLACSO/Datos")

Abrimos la base de datos.

base <- read_csv("encig2021_01_sec1_A_3_4_5_8_9_10.csv")
## New names:
## Rows: 39930 Columns: 243
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (49): ID_PER, ID_VIV, ENT, NOM_ENT, MUN, NOM_MUN, AREAM, NOM_AREAM, UPM... dbl
## (194): ...1, PRO_VIV, P1_2, P3_1_1, P3_1_2, P3_1_3, P3_1_4, P3_1_5, P3_1...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`

Intervalo de confianza para una media

Primero tenemos que filtrar la base de datos para usar solamente aquellos casos válidos

base <- base %>% 
  filter(APA_1_5<99)

Paso 1. Calculamos la media

Se refiere a una escala del 1 al 10 en qué tanta confianza tienen las personas en el Gobierno Federal.

base$APA_1_5 <- as.numeric(base$APA_1_5)
xbarra <- mean(base$APA_1_5)
  1. Calculamos el error estándar
n <- 39550
se <- sd(base$APA_1_5)/sqrt(n)
  1. Calculamos el valor de t y los grados de libertad
t<- xbarra/se
gl <- n-1

Nos fijamos en la tabla, el valor t de tablas para 39549 grados de libertad y el valor t de 135. Corresponde al valor 1.96.

  1. Calculamos el margen de error
margen <- 1.96*se
  1. Intervalos de confianza
lower <- xbarra - margen
upper <- xbarra + margen

Lo podemos hacer de forma automática, aplicando el comando de la regresión.

Calculamos la media y el error estándar

l.model <- lm(APA_1_5 ~ 1, base)
summary(l.model)
## 
## Call:
## lm(formula = APA_1_5 ~ 1, data = base)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -5.599 -1.599  0.401  2.401  4.401 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.59901    0.01512   370.4   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.007 on 39549 degrees of freedom

Calculamos el intervalo

confint(l.model, level=0.95)
##                2.5 %   97.5 %
## (Intercept) 5.569383 5.628645

Para graficar, podemos crear una variable para agrupar a los estados en regiones.

base <- base %>% 
  mutate(region=
           case_when(
            NOM_ENT=="AGUASCALIENTES"~"5",
            NOM_ENT=="BAJA CALIFORNIA"~"1",
            NOM_ENT=="BAJA CALIFORNIA SUR"~"1",
            NOM_ENT=="CAMPECHE"~"8",
            NOM_ENT=="CHIAPAS"~"7",
            NOM_ENT=="CHIHUAHUA"~"1",
            NOM_ENT=="CIUDAD DE MEXICO"~"6",
            NOM_ENT=="COAHUILA DE ZARAGOZA"~"2",
            NOM_ENT=="COLIMA"~"3",
            NOM_ENT=="DURANGO"~"1",
            NOM_ENT=="ESTADO DE MEXICO"~"6",
            NOM_ENT=="GUANAJUATO"~"5",
            NOM_ENT=="GUERRERO"~"7",
            NOM_ENT=="HIDALGO"~"4",
            NOM_ENT=="JALISCO"~"3",
            NOM_ENT=="MICHOACAN DE OCAMPO"~"3",
            NOM_ENT=="MORELOS"~"6",
            NOM_ENT=="NAYARIT"~"3",
            NOM_ENT=="NUEVO LEON"~"2",
            NOM_ENT=="OAXACA"~"7",
            NOM_ENT=="PUEBLA"~"4",
            NOM_ENT=="QUERETARO"~"5",
            NOM_ENT=="QUINTANA ROO"~"8",
            NOM_ENT=="SAN LUIS POTOSI"~"5",
            NOM_ENT=="SINALOA"~"1",
            NOM_ENT=="SONORA"~"1",
            NOM_ENT=="TABASCO"~"8",
            NOM_ENT=="TAMAULIPAS"~"2",
            NOM_ENT=="TLAXCALA"~"4",
            NOM_ENT=="VERACRUZ DE IGNACIO DE LA LLAVE"~"4",
            NOM_ENT=="YUCATAN"~"8",
            NOM_ENT=="ZACATECAS"~"5"))

Instalamos un paquete

#install.packages("Rmisc")
library(Rmisc)
## Loading required package: lattice
## Loading required package: 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)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following object is masked from 'package:purrr':
## 
##     compact

Creamos base de datos.

dat <- summarySE(base, measurevar="APA_1_5", groupvars="region")

Graficamos.

# Las barritas de los erroes se van a traslapar entonces las movemos
pd <- position_dodge(0.1) # move them .05 to the left and right

ggplot(dat, aes(x=region, y=APA_1_5)) + 
    geom_errorbar(aes(ymin=APA_1_5-ci, ymax=APA_1_5+ci), colour="black", width=.1, position=pd) +
    geom_line(position=pd) +
    geom_point(position=pd, size=3, shape=21, fill="white") + # 21 es círculo
    xlab("Region") +
    ylab("Promedio en la confianza en el Gobierno Federal") +
    ggtitle("Confianza en el Gobierno Federal Por Region") +
    theme_bw() +
    theme(legend.justification=c(1,0),
          legend.position=c(1,0))              
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?

Intervalo de confianza para una proporción

  1. Calcular la proporción

Es la frecuencia de corrupción. La pregunta es:

La corrupción es una práctica que sucede cuando un servidor público o empleado del gobierno abusa de sus funciones para obtener beneficios personales como dinero, regalos o favores por parte del ciudadano. Por lo que usted sabe, en (ESTADO) estas prácticas son: muy frecuentes, frecuentes, poco frecuentes, nunca se dan.

Convertiremos esa variable en una variable dummy.

base <- read_csv("encig2021_01_sec1_A_3_4_5_8_9_10.csv") %>% 
  filter(P3_2!=9) %>% 
  mutate(corrup = ifelse(P3_2 <= 3,1,0))
## New names:
## Rows: 39930 Columns: 243
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (49): ID_PER, ID_VIV, ENT, NOM_ENT, MUN, NOM_MUN, AREAM, NOM_AREAM, UPM... dbl
## (194): ...1, PRO_VIV, P1_2, P3_1_1, P3_1_2, P3_1_3, P3_1_4, P3_1_5, P3_1...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`

Calculamos la proporción

table(base$corrup)
## 
##     0     1 
##   570 38517
n <- 38517+570
pgorro <- 38517/n
  1. Calcular el error estándar
se <- sqrt(pgorro*(1-pgorro)/n)
  1. Encontrar el valor z que le corresponde al nivel de confianza
z<- qnorm(0.975)

Nos fijamos en la tabla.

  1. Calcular el margen de error
margen <- 1.96*(se/n)
  1. Construir el intervalo de confianza
lower <- pgorro - margen
upper <- pgorro + margen

Para graficar, creamos una base de datos

dat <- base %>%
  group_by(corrup) %>%
  dplyr::summarise(n = n()) %>% 
  mutate(prop = n/sum(n),
         lower = prop-1.96*sqrt(prop*(1-prop)/sum(n)),
         upper = prop+1.96*sqrt(prop*(1-prop)/sum(n)))

Graficamos

ggplot(dat, aes(x=corrup, y = prop))+ 
   geom_bar(position = "dodge", stat = "identity") + 
geom_errorbar(aes(ymin = lower, ymax = upper),width = .2)+
  labs(x="Frecuencia de Corrupción",y="Proporción")+
  theme_classic()

Intervalo de confianza para diferencia de medias

Vamos a abrir la base de datos.

base_marginacion <- read_excel("C:/Users/molar/Dropbox/2023_Trabajos/FLACSO/Datos/IMM_2020.xlsx", sheet = "IMM_2020")

Obtenemos una muestra de 1235 municipios.

set.seed(1234)
muestra <- base_marginacion[sample(nrow(base_marginacion), size=1235), ]

Vamos a crear dos grupos de municipios. Aquellos con grado de marginación “muy bajo” y “bajo” y aquellos con grado de marginación “medio”, “alto” y “muy alto”.

Primero vemos cómo están escritos.

table(muestra$GM_2020)
## 
##     Alto     Bajo    Medio Muy alto Muy bajo 
##      293      263      251      102      326

Recodificamos nuestra variable.

muestra <- muestra %>% 
  mutate(grado=
           case_when(
            GM_2020=="Alto"~"1",
            GM_2020=="Bajo"~"0",
            GM_2020=="Medio"~"1",
            GM_2020=="Muy alto"~"1",
            GM_2020=="Muy bajo"~"0"))

Etiquetamos la variable

etiqueta_grado<-c("Bajo", "Medio o alto") #creamos un vector

muestra<-muestra %>%
mutate(grado=as_numeric(grado)) %>% # para quitar el "string"
sjlabelled::set_labels(grado, labels=etiqueta_grado)

Vemos si quedó bien

table(muestra$grado)
## 
##   0   1 
## 589 646
table(sjlabelled::as_label(muestra$grado))
## 
##         Bajo Medio o alto 
##          589          646

Vamos a construir el intervalo de confianza para la diferencia de la media del porcentaje de viviendas particulares con hacinamiento.

Con fórmula.

  1. Calculamos el estimador puntual (resta de las medias)
muestra %>% 
  group_by(grado) %>% 
  summarise(media=mean(VHAC))
##    media
## 1 26.525

Hacemos la resta

diferencia <- 32.6-20.0
  1. Error estándar
muestra %>% 
  group_by(grado) %>% 
  summarise(sd=sd(VHAC)) #desviación estándar
##         sd
## 1 10.42489
n1 <-634 #tamaño de muestra grupo 1
n2 <-601  #tamaño de muestra grupo 2
s1<- 9.71^2 #varianza grupo 1
s2 <- 6.45^2 #varianza grupo 2

#calculamos sp
numerador <- sqrt(((n1-1)*s1)+((n2-1)*s2))
denominador <-sqrt((n1+n2)-2)
sp <- numerador/denominador

se <- sp*sqrt((1/n1)+(1/n2)) #error estándar asumiendo que varianzas son iguales
  1. Valor t
t <- 1.96
  1. Margen
margen <- t*se
  1. Intervalo
lower <- diferencia - margen
upper <- diferencia + margen

Gráfico

ggplot(muestra, aes(x = as.factor(grado), y = VHAC)) +
    geom_point(color = "firebrick", size = 3, shape = 1) +
    stat_summary(fun.data = mean_cl_normal, geom = "errorbar", 
        width = 0.1, position=position_nudge(x = 0.15)) +
    stat_summary(fun.y = mean, geom = "point", color = "firebrick",
        size = 3, position=position_nudge(x = 0.15)) +
    labs(x = "Grado de marginación", y = "Porcentaje de viviendas con hacinamiento") + 
    theme_classic()
## Warning: `fun.y` is deprecated. Use `fun` instead.

Manera corta

t.test(VHAC ~ grado, data=muestra, var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  VHAC by grado
## t = -26.748, df = 1233, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -13.56985 -11.71526
## sample estimates:
## mean in group 0 mean in group 1 
##        19.91198        32.55453

Diferencia de proporciones

Creamos una variable dummy =1 para aquellos municipios cuyo valor en el porcentaje de analfabetimso sea mayor o igual que el promedio, =0 para aquellos municipios cuyo valor en el porcentaje de analfabetimso sea menor que el promedio.

mean(muestra$ANALF)
## [1] 10.27287
muestra <- muestra %>% 
  mutate(analfabetismo = ifelse(ANALF >= 10.27287,1,0))

table(muestra$analfabetismo)
## 
##   0   1 
## 752 483
  1. Calculamos el estimador puntual (resta de las proporciones)
table(muestra$analfabetismo,muestra$grado)
##    
##       0   1
##   0 572 180
##   1  17 466
prop0 <- 17/(17+572)
prop1 <- 466/(466+180)

n0 <- 17+572
n1 <- 466+180
diferencia <- prop1-prop0   
  1. Error estándar
se <- sqrt((prop0*(1-prop0)/n0)+(prop1*(1-prop1)/n1))
  1. Valor Z
z <- 1.96
  1. Margen
margen <- z*se
  1. Intervalo
lower <- diferencia - margen
upper <- diferencia + margen

Manera corta

prop.test(x = c(17, 466), n = c(589,646), alternative = c("two.sided"), correct= FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(17, 466) out of c(589, 646)
## X-squared = 620.42, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.7296219 -0.6553776
## sample estimates:
##     prop 1     prop 2 
## 0.02886248 0.72136223

Creamos base de datos

dat1 <- muestra %>%
  group_by(grado, analfabetismo) %>%
  dplyr::summarise(n = n()) %>% 
  mutate(prop = n/sum(n),
         se = sqrt(prop*(1-prop)/n))
## `summarise()` has grouped output by 'grado'. You can override using the
## `.groups` argument.

Graficamos

ggplot(dat1, aes(x = as.factor(grado), y = prop, fill = as.factor(analfabetismo))) + 
geom_bar(stat = 'identity', position = 'dodge')+
geom_errorbar(aes(ymin = prop - se, ymax = prop + se),                            
                width = 0.2,
                position = position_dodge(0.9))

Prueba de hipótesis para una media

El promedio del índice de marginación a nivel municipal es de 53.95558. Nosotros queremos demostrar, a partir de nuestra muestra, que el promedio del índice de marginación no es igual a ese valor. Para corroborarlo debemos hacer una prueba de hipótesis con un nivel de confianza del 95%.

  1. Obtener el estimador puntual
xbarra <- mean(muestra$IM_2020)
xbarra
## [1] 53.95035
  1. ¿Cuál es la hipótesis nula y la alternativa?

Ho: xbarra es igual a mu. Ha: xbarra es diferente de mu.

  1. ¿Cuál es el intervalo de confianza?
t.test(mu=53.95558, muestra$IM_2020, conf.level= 0.95, var.equal=TRUE)
## 
##  One Sample t-test
## 
## data:  muestra$IM_2020
## t = -0.046413, df = 1234, p-value = 0.963
## alternative hypothesis: true mean is not equal to 53.95558
## 95 percent confidence interval:
##  53.72908 54.17161
## sample estimates:
## mean of x 
##  53.95035
  1. ¿Cuál es nuestra conclusión? *Rechazo la hipótesis nula.

Prueba de hipótesis para una diferencia de medias

Nosotros queremos demostrar, a partir de nuestra muestra, que la diferencia en el promedio del índice de marginación (por zonas) no es igual a cero. Para corroborarlo debemos hacer una prueba de hipótesis con un nivel de confianza del 95%.

  1. Obtener el estimador puntual
muestra <- muestra %>% 
  mutate(rural = ifelse(POB_TOT <= 2500,1,0))

muestra %>% 
  group_by(rural) %>% 
  summarise(media=mean(IM_2020))
##      media
## 1 53.95035
diferencia <- 54.14529-52.91064 
  1. ¿Cuál es la hipótesis nula y la alternativa?

Ho: la diferencia es igual a 0. Ha: la diferencia es distinta a 0.

  1. ¿Cuál es el intervalo de confianza?
t.test(muestra$IM_2020 ~ muestra$rural, conf.level= 0.95, var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  muestra$IM_2020 by muestra$rural
## t = 4.0163, df = 1233, p-value = 6.269e-05
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  0.6315456 1.8377595
## sample estimates:
## mean in group 0 mean in group 1 
##        54.14529        52.91064
  1. ¿Cuál es nuestra conclusión? *Rechazo la hipótesis nula.

Prueba de hipótesis para una proporción

La proporción de municipios rurales en México es de 0.1498582. Nosotros queremos demostrar, a partir de nuestra muestra, que la proporción no es igual a ese valor. Para corroborarlo debemos hacer una prueba de hipótesis con un nivel de confianza del 95%.

  1. Obtener el estimador puntual
table(muestra$rural)
## 
##    0    1 
## 1040  195
prop <- 195/(195+1040)
  1. ¿Cuál es la hipótesis nula y la alternativa?

Ho: prop es igual a prop0. Ha: prop es diferente de prop0.

  1. ¿Cuál es el intervalo de confianza?
prop.test(p= 0.1498582, x = 195, n = 1235, alternative = c("two.sided"), correct= FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  195 out of 1235, null probability 0.1498582
## X-squared = 0.62608, df = 1, p-value = 0.4288
## alternative hypothesis: true p is not equal to 0.1498582
## 95 percent confidence interval:
##  0.1386227 0.1792884
## sample estimates:
##         p 
## 0.1578947
  1. ¿Cuál es nuestra conclusión? *Rechazo la hipótesis nula.

Prueba de hipótesis para una diferencia de proporciones

Nosotros queremos demostrar, a partir de nuestra muestra, que la diferencia de esa proporción en cuanto a municipios rurales y urbanos es distinta de cero. Para corroborarlo debemos hacer una prueba de hipótesis con un nivel de confianza del 95%.

  1. Obtener el estimador puntual

  2. ¿Cuál es la hipótesis nula y la alternativa?

Ho: diferencia es igual a 0. Ha: diferencia es diferente de 0.

  1. ¿Cuál es el intervalo de confianza?
prop.test(x = c(408,98), n = c(1040,195), alternative = c("two.sided"), correct= FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(408, 98) out of c(1040, 195)
## X-squared = 8.254, df = 1, p-value = 0.004066
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.18644963 -0.03406319
## sample estimates:
##    prop 1    prop 2 
## 0.3923077 0.5025641
  1. ¿Cuál es nuestra conclusión? *Rechazo la hipótesis nula.