Teorema del Límite Central

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 4.0.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(ggplot2)  
## Warning: package 'ggplot2' was built under R version 4.0.3
library(knitr)   
library(fdth)    
## 
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
## 
##     sd, var
library(gtools) 
library(mosaic)
## Warning: package 'mosaic' was built under R version 4.0.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:gtools':
## 
##     logit
## The following objects are masked from 'package:fdth':
## 
##     sd, var
## 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 4.0.3
library(Rmpfr)     
## Warning: package 'Rmpfr' was built under R version 4.0.3
## Loading required package: gmp
## 
## 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, dnbinom, dnorm, dpois, pnorm
## The following objects are masked from 'package:base':
## 
##     cbind, pmax, pmin, rbind

2. Cargar los 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. 
##    7.00   32.00   35.00   35.01   38.00   58.00
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] 32 33 35 37 35 33 38 38 33 36 32 41 33 38 28 34 31 37 35 38 38 26 32 30 42
## [26] 44 36 34 31 31 37 32 25 29 37 32 35 30 44 37 42 34 39 34 34 46 24 41 41 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] 39 35 31 38 34 39 37 36 29 32 36 41 39 37 29 36 35 42 44 36 26 34 34 34 38
## [26] 26 31 41 29 33 30 32 37 28 39 41 44 35 40 28 28 32 35 32 32 35 34 34 29 39
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.00852
## [1] 5.00019
  • 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 S^2 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.   :20.00   Min.   :16.00   Min.   :19.00   Min.   :16.00  
##  1st Qu.:32.00   1st Qu.:32.00   1st Qu.:32.00   1st Qu.:32.00  
##  Median :35.00   Median :35.00   Median :35.00   Median :35.00  
##  Mean   :35.24   Mean   :35.21   Mean   :34.76   Mean   :35.13  
##  3rd Qu.:39.00   3rd Qu.:39.00   3rd Qu.:38.00   3rd Qu.:39.00  
##  Max.   :49.00   Max.   :52.00   Max.   :53.00   Max.   :50.00  
##        m5       
##  Min.   :22.00  
##  1st Qu.:32.00  
##  Median :35.00  
##  Mean   :34.95  
##  3rd Qu.:38.00  
##  Max.   :51.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
37 44 40 44 38
31 39 31 35 40
33 46 40 24 31
31 43 34 38 41
42 34 38 27 31
31 25 36 35 31
39 32 33 38 39
38 31 37 33 38
33 44 33 30 34
38 35 40 29 30
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
37 44 40 44 38
31 39 31 35 40
33 46 40 24 31
31 43 34 38 41
42 34 38 27 31
31 25 36 35 31
39 32 33 38 39
38 31 37 33 38
33 44 33 30 34
38 35 40 29 30
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.00852 35.240 0.231475
35.00852 35.210 0.201475
35.00852 34.762 -0.246525
35.00852 35.130 0.121475
35.00852 34.948 -0.060525

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.

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,
options(scipen = 999) # Para mostrar notación normal y no científica en el valor de N: 1e+06
N; n; 
## [1] 1000000
## [1] 500
options(scipen = 0) # Regresa a notación numérica normal 
summary(edad.poblacion)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    7.00   32.00   35.00   35.01   38.00   58.00
media.pob; desv.std
## [1] 35.00852
## [1] 5.00019
  • En el anterior ejercicio se determinaron cinco muestras y cinco errores muestrales, uno de cada muestra.
  • De acuerdo al concepto de distribución muestral de la media,
  • ¿Cual es la cantidad posibles muestras de grupos de 500 que se pueden determinar para una población de 1000000?
  • Se necesita determinar la combinaciones …

\[C(N/(n))=N!/n!⋅(N−n)!\] Por lo anterior el número de muestra con una población de un millón (1000000) en grupo de 500 es demasiado grande para tratarlo.

Para ejemplificar el teorema de límite central se reduce la población a 10 con muestras de 2 personas.

Simulando una nueva población con los mismos valores de media de edad igual a 35 y desviación de 5.

Se determinan los nuevos parámetros de medias y desviaciones estándar de la población. * N = 10, tamaño de la población * n = 2, tamaño de la muestra

N <- 10; n <- 2

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

edad.poblacion
##  [1] 28 31 42 29 30 42 32 32 28 27
media.pob <- mean(edad.poblacion)
desv.std <- sd(edad.poblacion)

media.pob; desv.std
## [1] 32.1
## [1] 5.486347

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 28 31 29.5 32.1 -2.6
2 1 3 28 42 35.0 32.1 2.9
3 1 4 28 29 28.5 32.1 -3.6
4 1 5 28 30 29.0 32.1 -3.1
5 1 6 28 42 35.0 32.1 2.9
6 1 7 28 32 30.0 32.1 -2.1
7 1 8 28 32 30.0 32.1 -2.1
8 1 9 28 28 28.0 32.1 -4.1
9 1 10 28 27 27.5 32.1 -4.6
10 2 3 31 42 36.5 32.1 4.4
11 2 4 31 29 30.0 32.1 -2.1
12 2 5 31 30 30.5 32.1 -1.6
13 2 6 31 42 36.5 32.1 4.4
14 2 7 31 32 31.5 32.1 -0.6
15 2 8 31 32 31.5 32.1 -0.6
16 2 9 31 28 29.5 32.1 -2.6
17 2 10 31 27 29.0 32.1 -3.1
18 3 4 42 29 35.5 32.1 3.4
19 3 5 42 30 36.0 32.1 3.9
20 3 6 42 42 42.0 32.1 9.9
21 3 7 42 32 37.0 32.1 4.9
22 3 8 42 32 37.0 32.1 4.9
23 3 9 42 28 35.0 32.1 2.9
24 3 10 42 27 34.5 32.1 2.4
25 4 5 29 30 29.5 32.1 -2.6
26 4 6 29 42 35.5 32.1 3.4
27 4 7 29 32 30.5 32.1 -1.6
28 4 8 29 32 30.5 32.1 -1.6
29 4 9 29 28 28.5 32.1 -3.6
30 4 10 29 27 28.0 32.1 -4.1
31 5 6 30 42 36.0 32.1 3.9
32 5 7 30 32 31.0 32.1 -1.1
33 5 8 30 32 31.0 32.1 -1.1
34 5 9 30 28 29.0 32.1 -3.1
35 5 10 30 27 28.5 32.1 -3.6
36 6 7 42 32 37.0 32.1 4.9
37 6 8 42 32 37.0 32.1 4.9
38 6 9 42 28 35.0 32.1 2.9
39 6 10 42 27 34.5 32.1 2.4
40 7 8 32 32 32.0 32.1 -0.1
41 7 9 32 28 30.0 32.1 -2.1
42 7 10 32 27 29.5 32.1 -2.6
43 8 9 32 28 30.0 32.1 -2.1
44 8 10 32 27 29.5 32.1 -2.6
45 9 10 28 27 27.5 32.1 -4.6

La media de la distribución muestral de la media se obtiene al sumar las medias muestrales y dividir el resultado entre el número de muestras. La media de todas las medias muestrales se representa mediante μx¯

Entonces … la media de la distribución muestral comparado con la media poblaciónal

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:  32.1  y la media de la edad de la distribución muestral es:  32.1"

INTERPRETACION DEL CASO:

En este caso se hablo sobre el teorema del limite central el cual es un resultado matemático que garantiza que, si sumamos variables cualesquiera (no necesariamente normales), la variable suma también seguirá una distribución normal (esto siempre que se cumplan algunas condiciones básicas).

Este teorema asegura, de manera esquemática, que, cuando sumamos un número grande de variables, la variable resultante sigue una distribución normal, de tal manera que en el ejercicio se da uso de las edades de la poblacion en donde se simula una poblacion bajo cierta condicion de distribucion normal por lo cual se obtiene el el vaor de la edad de la blacion de los primeros y ultimos 50 registros.

Aqui se dio uso de la obtencion de las medias y desviaciones muestrales en donde se aplica dicho teorema el cual nos dice que Si se seleccionan muestras aleatorias de n observaciones de una población con media y desviación estándar , entonces, cuando n es grande, la distribución muestral de medias tendrá aproximadamente una distribución normal con una media igual a y una desviación estándar de . La aproximación será cada vez más exacta a medida de que n sea cada vez mayor.