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
pacman::p_load("haven", "readxl", "tidyverse", "sjlabelled")
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`
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)
n <- 39550
se <- sd(base$APA_1_5)/sqrt(n)
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.
margen <- 1.96*se
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?
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
se <- sqrt(pgorro*(1-pgorro)/n)
z<- qnorm(0.975)
Nos fijamos en la tabla.
margen <- 1.96*(se/n)
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()
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.
muestra %>%
group_by(grado) %>%
summarise(media=mean(VHAC))
## media
## 1 26.525
Hacemos la resta
diferencia <- 32.6-20.0
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
t <- 1.96
margen <- t*se
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
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
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
se <- sqrt((prop0*(1-prop0)/n0)+(prop1*(1-prop1)/n1))
z <- 1.96
margen <- z*se
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))
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%.
xbarra <- mean(muestra$IM_2020)
xbarra
## [1] 53.95035
Ho: xbarra es igual a mu. Ha: xbarra es diferente de mu.
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
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%.
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
Ho: la diferencia es igual a 0. Ha: la diferencia es distinta a 0.
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
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%.
table(muestra$rural)
##
## 0 1
## 1040 195
prop <- 195/(195+1040)
Ho: prop es igual a prop0. Ha: prop es diferente de prop0.
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
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%.
Obtener el estimador puntual
¿Cuál es la hipótesis nula y la alternativa?
Ho: diferencia es igual a 0. Ha: diferencia es diferente de 0.
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