Inferencia estadística

En esta parte del curso examinaremos las siguientes herramientas de inferencia estadística

Cargamos los datos de trabajo

Base de datos para estos ejercicios: Familia y roles de género 2012, a descargar de:

http://iop-data.pucp.edu.pe/busqueda/encuesta/71?

Se sugiere descargar también el cuestionario para utilizarlo como referencia de libro de códigos. Descomprimir y grabar el archivo SPSS en el directorio de trabajo de R

# Importar la base de datos del SPSS a un data frame de R
library(foreign)
genero <- as.data.frame(read.spss("IOP_1212_01_B.sav"))

Preparar las variables de trabajo

En estos ejemplos trabajaremos con las siguientes variables:

Antes de utilizar estas variables es necesario evaluar si necesitan algún tipo de acondicionamiento (identificar valores perdidos o “raros”, recodificar, etc)

Acondicionamiento de las variables

Las siguientes transformaciones nos permitirán acondicionar las variables para utilizarlas en el análisis:

genero$p1r <- genero$P1
genero$p2r <- genero$P2
genero$p1r[genero$P1 > 40] <- NA
genero$p2r[genero$P2 == 99] <- NA

genero$p19ar <- genero$P19A
genero$p19ar[genero$P19A >= 140] <- NA

genero$p28ar <- genero$P28A
genero$p28ar[genero$P28A > 120] <- NA

Intervalos de confianza

Cálculo de intervalos de confianza para una media

Para calcular el intervalo de confianza de la media de una variable que proviene de una muestra simple al azar usamos la siguiente fórmula: \[ \begin{aligned} IC_{1-\alpha}=\bar{x} \pm Z\sigma_{\bar{x}} \end{aligned} \]

Donde:

  • \(1-\alpha\) es el nivel de confianza deseado
  • Z es el valor de la distribución normal estándar que representa el nivel de confianza
  • \(\sigma_{\bar{x}}\) es el error estándar de la media que se obtiene mediante:

\[ \begin{aligned} \sigma_{\bar{x}} = \frac{S_{x}}{\sqrt{n}} \end{aligned} \]

Cálculo de intervalo de confianza al 95% para una media

Entonces para calcular el intervalo de confianza para una media podemos proceder de la siguiente manera:

media <- mean(na.omit(genero$p19ar)) # Pedimos la media
desv <- sd(na.omit(genero$p19ar)) # La desviación estándar
N <- length(na.omit(genero$p19ar)) # El tamaño válido de la muestra
error.est <- desv/sqrt(N) # Calculamos el error estándar
error <- 2*error.est # Fijamos Z=2 para indicar un nivel de confianza de 95%
lim.inf <- media-error # Límite inferior del intervalo
lim.sup <- media+error # Límite superior del intervalo

# Guardamos todos los datos generados en un objeto data frame
resultado1 <- data.frame(media, desv, N, error.est, error, lim.inf, lim.sup)
resultado1
##      media     desv    N error.est    error  lim.inf  lim.sup
## 1 22.61037 19.94936 1196 0.5768506 1.153701 21.45667 23.76407

Cálculo del intervalo de confianza al 95% usando la distribucion de t

media <- mean(na.omit(genero$p19ar))
desv <- sd(na.omit(genero$p19ar))
N <- length(na.omit(genero$p19ar))
error.est <- desv/sqrt(N)
error <- qt(0.975, df= N-1) * error.est # Usar el cuantil 0.975 de t
lim.inf <- media-error
lim.sup <- media+error
resultado2 <- data.frame(media, desv, N, error.est, error, lim.inf, lim.sup)
resultado2
##      media     desv    N error.est    error  lim.inf  lim.sup
## 1 22.61037 19.94936 1196 0.5768506 1.131753 21.47862 23.74212
resultado1
##      media     desv    N error.est    error  lim.inf  lim.sup
## 1 22.61037 19.94936 1196 0.5768506 1.153701 21.45667 23.76407

Uso de una función ad-hoc para el cálculo del intervalo de confianza

Una función es un pequeño programa en R que sirve para automatizar algunos procedimientos. En este caso la función calcula los estadísticos necesarios para generar el intervalo de confianza de una media.

Generamos la función:

int.conf <- function(x, ic = 95) {
  y <- na.omit(x)
  Media <- mean(y)
  Desv.Est <- sd(y)
  N <- length(y)
  Error.Est <- Desv.Est/sqrt(N)
  ci.y <- 1-(((100-ic)/100)/2)
  Error <- Error.Est * qt(ci.y, df = N-1)
  Lim.Inf <- Media - Error
  Lim.Sup <- Media + Error
  result <- data.frame(Media, Desv.Est, N, Error.Est, Error, Lim.Inf, Lim.Sup)
  return(result)
  }

Usamos la función para calcular un intervalo de confianza al 95% (ic por defecto de la función)

int.conf(genero$p19ar)
##      Media Desv.Est    N Error.Est    Error  Lim.Inf  Lim.Sup
## 1 22.61037 19.94936 1196 0.5768506 1.131753 21.47862 23.74212

En vez de un intervalo de 95% podemos usar otros niveles de confianza:

int.conf(genero$p19ar, ic=99) # Intervalo de 99% de confianza
##      Media Desv.Est    N Error.Est    Error  Lim.Inf  Lim.Sup
## 1 22.61037 19.94936 1196 0.5768506 1.488246 21.12212 24.09861
int.conf(genero$p19ar, ic=90) # Intervalo de 90% de confianza
##      Media Desv.Est    N Error.Est    Error Lim.Inf  Lim.Sup
## 1 22.61037 19.94936 1196 0.5768506 0.949571 21.6608 23.55994

Cálculo de intervalo de confianza para una proporción

También podemos calcular un intervalo de confianza para una proporción a partir de una muestra grande.

\[ \begin{aligned} IC_{1-\alpha}= p \pm Z\sigma_{p} \end{aligned} \]

Donde:

  • \(1-\alpha\) es el nivel de confianza deseado
  • Z es el valor de la distribución normal estándar que representa el nivel de confianza
  • \(\sigma_{p}\) es el error estándar de la propoción que se obtiene mediante:

\[ \begin{aligned} \sigma_{p} = \sqrt{\frac{pq}{n}} \end{aligned} \]

Donde:

  • p es la proporción de la categoría de análisis en nuestra muestra
  • q es igual a 1 - p

Ejemplo

Vamos a usar la variable P32

library(descr)
freq(genero$P32, plot = FALSE)
## genero$P32 
##                                           Frequency Percent Valid Percent
## Hago mucho más de lo que me corresponde         147  12.219        21.304
## Hago algo más de lo que me corresponde          141  11.721        20.435
## Hago más o menos lo que me corresponde          256  21.280        37.101
## Hago algo menos de lo que me corresponde         65   5.403         9.420
## Hago mucho menos de lo que me corresponde        53   4.406         7.681
## No contesta                                      28   2.328         4.058
## NA's                                            513  42.643              
## Total                                          1203 100.000       100.000

Preparamos los datos para el cálculo del intervalo de confianza, en este caso vamos a seleccionar una categoría: las personas que a la pregunta P32 responden “Hago más o menos lo que me corresponde” en la distribución de las tareas domésticas en su hogar.

p32r <- na.omit(genero$P32)
cat <- ifelse(p32r=="Hago más o menos lo que me corresponde", 1, 0)
prop.table(table(cat))
## cat
##         0         1 
## 0.6289855 0.3710145
p <- mean(cat)
p # Esta es la proporción de personas que respondieton esta opción
## [1] 0.3710145

Preparamos el resto de la información

n <- length(cat) # Tamaño de la muestra 
error.est.p <- sqrt((p*(1-p))/n) # Error estándar de la propoción
error.p <- 2 * error.est.p # Usamos Z = 2 para indicar un nivel de confianza del 95%
lim.inf.p <- p - error.p 
lim.sup.p <- p + error.p
result.p <- data.frame(p, n, error.est.p, error.p, lim.inf.p, lim.sup.p)
result.p
##           p   n error.est.p   error.p lim.inf.p lim.sup.p
## 1 0.3710145 690   0.0183904 0.0367808 0.3342337 0.4077953

Funcion para cálculo de intervalo de confianza de proporción

Generamos la función

int.conf.p <- function(x, cat, ic = 95){
  vcat <- na.omit(x)
  p <- mean(ifelse(vcat==cat, 1, 0))
  n <- length(vcat)
  error.est.p <- sqrt((p*(1-p))/n)
  beta <- 1-(((100-ic)/100)/2)
  error <- error.est.p * qt(beta, df = n-1)
  lim.inf.p <- p - error
  lim.sup.p <- p + error
  result.p <- data.frame(p, n, error.est.p, error, lim.inf.p, lim.sup.p)
  return(result.p)
}

Usamos la función

int.conf.p(genero$P32, "Hago más o menos lo que me corresponde")# IC95%
##           p   n error.est.p      error lim.inf.p lim.sup.p
## 1 0.3710145 690   0.0183904 0.03610795 0.3349065 0.4071224
int.conf.p(genero$P32, "Hago más o menos lo que me corresponde", ic=99)# IC99%
##           p   n error.est.p      error lim.inf.p lim.sup.p
## 1 0.3710145 690   0.0183904 0.04750211 0.3235124 0.4185166
int.conf.p(genero$P32, "Hago más o menos lo que me corresponde", ic=90)# IC90%
##           p   n error.est.p      error lim.inf.p lim.sup.p
## 1 0.3710145 690   0.0183904 0.03029025 0.3407242 0.4013047

freq(genero$P10, plot=FALSE)
## genero$P10 
##             Frequency   Percent
## Si               1070  88.94431
## No                132  10.97257
## No contesta         1   0.08313
## Total            1203 100.00000
int.conf.p(genero$P10, "Si")
##           p    n error.est.p      error lim.inf.p lim.sup.p
## 1 0.8894431 1203 0.009041058 0.01773801  0.871705 0.9071811

Gráficar el intervalo de confianza

Podemos crear un gráfico del intervalo de confianza de la media de una variable. En este ejemplo usaremos el gráfico de puntos del paquete ggplot2. Vamos a representar gráficamente el promedio de horas semanales dedicadas a labores domésticas que le dedican los hombres y las mujeres.

Primero vamos a generar un data frame que contenga los estadísticos que necesitamos graficar (la media, los límites inferior y superior del intervalo de confianza). Para ello usaremos la función “summarySE” del paquete “Rmisc” (que debe instalarse en su sistema). Esta función summaySE hace algo parecido a la función que hemos creado en una de las diapositivas anteriores.

library(Rmisc)
## Loading required package: lattice
## Loading required package: plyr
df <- summarySE(genero, measurevar="p19ar", groupvars="SEXO", na.rm=T)
df
##        SEXO   N    p19ar       sd        se       ci
## 1 Masculino 587 13.70187 13.50444 0.5573881 1.094722
## 2  Femenino 609 31.19704 21.35332 0.8652803 1.699301

Generar un gráfico de puntos:

Un gráfico de puntos que muestra las medias de p19ar según sexo

library(ggplot2)
graf.punto1 <- ggplot(df, aes(x=SEXO, y=p19ar)) + 
  geom_point(size = 3) + ylim(0, 40)

graf.punto1

Ahora añadimos las barras que indican el intervalo de confianza, con títulos

graf.punto <- graf.punto1 +  geom_errorbar(aes(ymin=p19ar-ci, ymax=p19ar+ci), width = 0.2) +  ylab("Horas semanales") + 
  ggtitle("Intervalo de confianza al 95% para la media de las horas semanales\n dedicadas al trabajo doméstico, según sexo")
graf.punto

grafpunto

Gráfico de barras para intervalo de confianza

Podemos graficar el mismo concepto con barras:

graf.barra1 <- ggplot(df, aes(x=SEXO, y=p19ar)) + 
  geom_bar(width=0.5, fill="white", colour="black", stat="identity") + 
  geom_errorbar(aes(ymin=p19ar-ci, ymax=p19ar+ci), width = 0.2) +
  ylab("Horas semanales") + ggtitle("Intervalo de confianza al 95% para la media de las horas semanales\n dedicadas al trabajo doméstico, según sexo")
graf.barra1

grafbarra

Algunas variaciones

Según ámbito y sexo del entrevistado

df2 <- summarySE(genero, measurevar="p19ar", groupvars=c("SEXO", "Ambito"), 
                 na.rm=T)
df2
##        SEXO          Ambito   N    p19ar       sd        se       ci
## 1 Masculino     Lima-Callao 218 14.49083 14.27131 0.9665754 1.905078
## 2 Masculino Interior Urbano 246 12.68293 12.26298 0.7818591 1.540023
## 3 Masculino  Interior Rural 123 14.34146 14.42552 1.3007051 2.574876
## 4  Femenino     Lima-Callao 229 30.15721 19.83378 1.3106528 2.582541
## 5  Femenino Interior Urbano 264 29.62500 19.59105 1.2057460 2.374144
## 6  Femenino  Interior Rural 116 36.82759 26.70557 2.4795498 4.911511

El gráfico de puntos

graf.punto2 <- ggplot(df2, aes(x=Ambito, y=p19ar, colour=SEXO)) +
  geom_point(size = 3) + ylim(0, 50) + 
  geom_errorbar(aes(ymin=p19ar-ci, ymax=p19ar+ci), width = 0.2) + 
  ylab("Horas semanales") + 
  ggtitle("Intervalo de confianza al 95% para la media\n de las horas semanales dedicadas al trabajo\n doméstico, según ámbito, por sexo")

graf.punto2

grafpunto2

El gráfico de barras

graf.bar2 <- ggplot(df2, aes(x=Ambito, y=p19ar, fill=SEXO)) +
  geom_bar(position="dodge", stat = "identity") +
  geom_errorbar(aes(ymin=p19ar-ci, ymax=p19ar+ci), width = 0.2, 
  position=position_dodge(.9)) + ylab("Horas semanales") + 
  ggtitle("Intervalo de confianza al 95% para la media\n de las horas semanales dedicadas al trabajo\n doméstico, según ámbito, por sexo")

graf.bar2

grafbarra2