Objetivo

Simular el teorema del límite central.

Descripción

Con un conjunto de datos y librerías adecuadas, simular el valor de la media muestral comparado con el valor de la media poblacional asociando con ello con el teorema del límite central.

1. Cargar librerías

library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(mosaic)
## Warning: package 'mosaic' was built under R version 3.6.3
## Registered S3 method overwritten by 'mosaic':
##   method                           from   
##   fortify.SpatialPolygonsDataFrame ggplot2
## 
## The 'mosaic' package masks several functions from core packages in order to add 
## additional features.  The original behavior of these functions should not be affected by this.
## 
## Attaching package: 'mosaic'
## The following object is masked from 'package:Matrix':
## 
##     mean
## The following object is masked from 'package:ggplot2':
## 
##     stat
## The following objects are masked from 'package:dplyr':
## 
##     count, do, tally
## The following objects are masked from 'package:stats':
## 
##     binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
##     quantile, sd, t.test, var
## The following objects are masked from 'package:base':
## 
##     max, mean, min, prod, range, sample, sum
library(readr)
## Warning: package 'readr' was built under R version 3.6.3
library(ggplot2)  # Para gráficos
library(knitr)    # Para formateo de datos
## Warning: package 'knitr' was built under R version 3.6.3
library(fdth)     # Para tablas de frecuencias
## Warning: package 'fdth' was built under R version 3.6.3
## 
## Attaching package: 'fdth'
## The following objects are masked from 'package:mosaic':
## 
##     sd, var
## The following objects are masked from 'package:stats':
## 
##     sd, var
library(gtools)   # Para combinaciones y permutaciones
## Warning: package 'gtools' was built under R version 3.6.3
## 
## Attaching package: 'gtools'
## The following object is masked from 'package:mosaic':
## 
##     logit
library(Rmpfr)    # Para factoriales de números muy grandes
## Warning: package 'Rmpfr' was built under R version 3.6.3
## Loading required package: gmp
## Warning: package 'gmp' was built under R version 3.6.3
## 
## Attaching package: 'gmp'
## The following object is masked from 'package:mosaic':
## 
##     factorize
## The following objects are masked from 'package:Matrix':
## 
##     crossprod, tcrossprod
## The following objects are masked from 'package:base':
## 
##     %*%, apply, crossprod, matrix, tcrossprod
## C code of R package 'Rmpfr': GMP using 64 bits per limb
## 
## Attaching package: 'Rmpfr'
## The following object is masked from 'package:gmp':
## 
##     outer
## The following objects are masked from 'package:stats':
## 
##     dbinom, dgamma, dnorm, dpois, pnorm
## The following objects are masked from 'package:base':
## 
##     cbind, pmax, pmin, rbind

2. Cargar datos

Experimentar con una población de 1000000 de edades de personas

  • Se simula una población bajo una condición de distribución normal de N=1000000 (un millón) de personas con media de edad de 35 años y desviación estándar de 5.
  • Se muestran los parámetros principales de la edad de la población.
N <- 1000000; 

edad.poblacion <- round(rnorm(N, mean = 35, sd = 5), 0)

summary(edad.poblacion)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      12      32      35      35      38      59
paste("El valor de edad de una pobacion. Los primeros cincuenta valores ...")
## [1] "El valor de edad de una pobacion. Los primeros cincuenta valores ..."
head(edad.poblacion, 50) 
##  [1] 36 39 36 30 36 35 40 34 39 31 36 40 33 40 37 32 32 29 28 42 34 37 40 33 40
## [26] 38 41 33 45 37 40 30 37 34 35 32 38 37 27 42 41 42 35 30 38 33 33 36 34 38
paste("El valor de edad de una pobacion. Los últimos cincuenta valores ...")
## [1] "El valor de edad de una pobacion. Los últimos cincuenta valores ..."
tail(edad.poblacion, 50)
##  [1] 29 38 29 36 43 35 33 38 28 37 43 37 28 34 38 35 36 35 36 41 46 33 30 35 37
## [26] 43 40 39 33 43 27 40 32 29 33 33 29 44 26 34 30 37 32 34 34 31 28 32 34 34
media.pob <- mean(edad.poblacion)
desv.std <- sd(edad.poblacion)

paste("Los parámetros de la media y desviación estándard de la población")
## [1] "Los parámetros de la media y desviación estándard de la población"
media.pob; desv.std
## [1] 35.00206
## [1] 5.003146

El valor medio de la edad de la pobación μ es 35.002037 y el valor de la desviación estándar de la población es S2 es 5.0063637

Determinar medias y desviaciones muestrales.

  • Determinar cinco muestras de n=500 casos por medio de la función sample(), se guardan en un data.frame llamado muestras.
  • Se visualizan los estadísticos principales por medio de la función summary()
  • Se utiliza un ciclo para determinar las medias de cada muestra.
  • Se construye un data frame con los valores de los errores estadísticos
n <- 500
muestras <- data.frame(m1=sample(edad.poblacion, n),
                       m2=sample(edad.poblacion, n),
                       m3=sample(edad.poblacion, n),
                       m4=sample(edad.poblacion, n),
                       m5=sample(edad.poblacion, n))

summary(muestras)
##        m1              m2              m3              m4       
##  Min.   :21.00   Min.   :22.00   Min.   :18.00   Min.   :21.00  
##  1st Qu.:31.00   1st Qu.:32.00   1st Qu.:32.00   1st Qu.:31.00  
##  Median :35.00   Median :35.00   Median :35.00   Median :35.00  
##  Mean   :34.58   Mean   :34.91   Mean   :35.01   Mean   :34.69  
##  3rd Qu.:38.00   3rd Qu.:38.00   3rd Qu.:38.00   3rd Qu.:38.00  
##  Max.   :50.00   Max.   :50.00   Max.   :58.00   Max.   :50.00  
##        m5       
##  Min.   :23.00  
##  1st Qu.:32.00  
##  Median :35.00  
##  Mean   :35.06  
##  3rd Qu.:39.00  
##  Max.   :50.00
kable(head(muestras, 10), caption = "Muestras de la población. Los primeros diez de 500 registros")
Muestras de la población. Los primeros diez de 500 registros
m1 m2 m3 m4 m5
39 28 58 40 36
28 28 38 37 34
35 27 34 33 40
32 42 35 34 31
31 31 36 32 42
42 29 40 39 41
36 37 26 36 43
34 42 35 28 32
45 42 42 37 34
36 35 34 31 29
kable(head(muestras, 10), caption = "Muestras de la población. Los últimos diez de 500 registros")
Muestras de la población. Los últimos diez de 500 registros
m1 m2 m3 m4 m5
39 28 58 40 36
28 28 38 37 34
35 27 34 33 40
32 42 35 34 31
31 31 36 32 42
42 29 40 39 41
36 37 26 36 43
34 42 35 28 32
45 42 42 37 34
36 35 34 31 29
medias <- 0
error <- 0

for(i in 1:5) {
  medias[i] <- mean(muestras[,i])
  error[i] <- medias[i] - media.pob
}

error.muestreo <- data.frame(Media.Poblacion = media.pob, Media.Muestras = medias, Errores = error)

kable(error.muestreo, caption = "Error de media de edad de cada muestra con respecto a la media de la población")
Error de media de edad de cada muestra con respecto a la media de la población
Media.Poblacion Media.Muestras Errores
35.00206 34.578 -0.424062
35.00206 34.910 -0.092062
35.00206 35.014 0.011938
35.00206 34.686 -0.316062
35.00206 35.064 0.061938

Cada una de estas diferencias en la columna de Errores, representa el error de muestreo cometido al calcular la media de la población. A veces estos errores son valores positivos, lo cual indica que la media muestral sobre excedió la media poblacional; otras veces son negativos, lo cual indica que la media muestral es inferior a la media poblacional (Lind et al., 2015).

Visualizando la población y la muestra

hist(edad.poblacion, main = "Histrograma de la edad de la población")

hist(muestras$m1, main = "Histrograma de la edad de la muestra 1", ylab = "Edades", xlab="Observacaiones")

hist(muestras$m2, main = "Histrograma de la edad de la muestra 2", ylab = "Edades", xlab="Observacaiones")

hist(muestras$m3, main = "Histrograma de la edad de la muestra 3", ylab = "Edades", xlab="Observacaiones")

hist(muestras$m4, main = "Histrograma de la edad de la muestra 4", ylab = "Edades", xlab="Observacaiones")

hist(muestras$m5, main = "Histrograma de la edad de la muestra 5", ylab = "Edades", xlab="Observacaiones")

Con el ejercicio anterior, anterior se encontró el error de muestreo y se presentaron los resultados de comparar un estadístico para una muestra (como la media de la muestra) con la media de la población; bajo este contexto, cuando se usa la media muestral para estudiar la media de la población, ¿cómo se determina la exactitud de la estimación?, es decir, como saber si la media de la muestra es un estimador real con respecto a la población.

Para responder estas preguntas, primero hay que precisar el concepto de distribución muestral de la media: es la distribución de probabilidad de todas las posibles medias de las muestras de un determinado tamaño muestral de la población (Lind et al., 2015).

  • Se recapitulan los datos iniciales
  • N = 1000000, tamaño de la población
  • n = 500, tamaño de la muestra
  • edad.poblacion es la edad conocida y recabada de las personas.
  • media.pob es la media de toda la población,
  • desv.std es la desviación estándar de toda la población,
N <- 10; n <- 2

edad.poblacion <- round(rnorm(N, mean = 35, sd = 5), 0)

edad.poblacion
##  [1] 38 47 33 33 35 33 40 29 43 36
media.pob <- mean(edad.poblacion)
desv.std <- sd(edad.poblacion)

media.pob; desv.std
## [1] 36.7
## [1] 5.396501

De acuerdo al concepto distribución muestral de la media ¿cuál es el número de muestras que hay que determinar en grupos de 2 para una población de 10?

n.combinaciones <- factorialMpfr(N) / (factorialMpfr(n) * (factorialMpfr(N-n)))
as.integer(n.combinaciones)
## [1] 45

Ahora bien ¿cuál es el valor estadístico de la media de la edad de la primera muestra, de la segunda, de la tercera y de la 45 ava muestra.

  • Determinando muestras en grupos de 2
muestras <- cbind(1:as.integer(n.combinaciones))

muestras <- cbind(muestras, combinations(N, n, 1:N))

muestras <- cbind(muestras, edad.poblacion[muestras[,2]], edad.poblacion[muestras[,3]])

medias <- 0
error <- 0

for(i in 1:as.integer(n.combinaciones)) {
  medias[i] <- mean(muestras[i,c(4,5)])
  error[i] <- medias[i] - media.pob
}

muestras <- cbind(muestras, medias)
muestras <- cbind(muestras, media.pob)
muestras <- cbind(muestras, error)

muestras <- data.frame(muestras)

colnames(muestras) <- c("Muestra", "Pos.1", "Pos.2", "Valor.1", "Valor.2", "Media muestra", "Media pob.", "Error")

kable(muestras, caption = "Las muestras")
Las muestras
Muestra Pos.1 Pos.2 Valor.1 Valor.2 Media muestra Media pob. Error
1 1 2 38 47 42.5 36.7 5.8
2 1 3 38 33 35.5 36.7 -1.2
3 1 4 38 33 35.5 36.7 -1.2
4 1 5 38 35 36.5 36.7 -0.2
5 1 6 38 33 35.5 36.7 -1.2
6 1 7 38 40 39.0 36.7 2.3
7 1 8 38 29 33.5 36.7 -3.2
8 1 9 38 43 40.5 36.7 3.8
9 1 10 38 36 37.0 36.7 0.3
10 2 3 47 33 40.0 36.7 3.3
11 2 4 47 33 40.0 36.7 3.3
12 2 5 47 35 41.0 36.7 4.3
13 2 6 47 33 40.0 36.7 3.3
14 2 7 47 40 43.5 36.7 6.8
15 2 8 47 29 38.0 36.7 1.3
16 2 9 47 43 45.0 36.7 8.3
17 2 10 47 36 41.5 36.7 4.8
18 3 4 33 33 33.0 36.7 -3.7
19 3 5 33 35 34.0 36.7 -2.7
20 3 6 33 33 33.0 36.7 -3.7
21 3 7 33 40 36.5 36.7 -0.2
22 3 8 33 29 31.0 36.7 -5.7
23 3 9 33 43 38.0 36.7 1.3
24 3 10 33 36 34.5 36.7 -2.2
25 4 5 33 35 34.0 36.7 -2.7
26 4 6 33 33 33.0 36.7 -3.7
27 4 7 33 40 36.5 36.7 -0.2
28 4 8 33 29 31.0 36.7 -5.7
29 4 9 33 43 38.0 36.7 1.3
30 4 10 33 36 34.5 36.7 -2.2
31 5 6 35 33 34.0 36.7 -2.7
32 5 7 35 40 37.5 36.7 0.8
33 5 8 35 29 32.0 36.7 -4.7
34 5 9 35 43 39.0 36.7 2.3
35 5 10 35 36 35.5 36.7 -1.2
36 6 7 33 40 36.5 36.7 -0.2
37 6 8 33 29 31.0 36.7 -5.7
38 6 9 33 43 38.0 36.7 1.3
39 6 10 33 36 34.5 36.7 -2.2
40 7 8 40 29 34.5 36.7 -2.2
41 7 9 40 43 41.5 36.7 4.8
42 7 10 40 36 38.0 36.7 1.3
43 8 9 29 43 36.0 36.7 -0.7
44 8 10 29 36 32.5 36.7 -4.2
45 9 10 43 36 39.5 36.7 2.8

Entonces … la media de la distribución muestral comparado con la media poblaciónale s:

paste("La media poblacional es: ", media.pob, " y la media de la edad de la distribución muestral es: ", mean(muestras$`Media muestra`))
## [1] "La media poblacional es:  36.7  y la media de la edad de la distribución muestral es:  36.7"

Interpretación

Como pudimos comprobar en los ejercicios una muestra nos puede servir de estimador en comparacion a una poblacion muy grande, siempre que nos basemos en su valor estadistico.Esto queda demostrado mediante el teorema de límite central. El teorema describe la distribución de la media de una muestra aleatoria proveniente de una población con varianza finita. Cuando el tamaño de la muestra es lo suficientemente grande, la distribución de las medias sigue aproximadamente una distribución normal. Sin embargo, hay que tener en cuenta que mientras mas grande la muestra que se tome mejor sera la estimacion en cuanto a resultados, es decir no es lo mismo tomar 1/20 de la muestra que 1/5 de la muestra el segundo tendra menor variacion en comparación al original al momento de buscar algun valor estadistico en la poblacion total.