Muestreo para inferencia estadística

En la referencia estadística se conoce como muestreo a la técnica para la selección de una muestra a partir de una población estadística.

Al elegir una muestra aleatoria se espera conseguir que sus propiedades sean extrapolables a la población. Este proceso permite ahorrar recursos, y a la vez obtener resultados parecidos a los que se alcanzarían si se realizase un estudio de toda la población. En las investigaciones llevadas por empresarios y de la medicina se usa muestreo extensivamente en recoger información sobre poblaciones.

Cabe mencionar que para que el muestreo sea válido y se pueda realizar un estudio adecuado (que consienta no solo hacer estimaciones de la población sino estimar también los márgenes de error correspondientes a dichas estimaciones), debe cumplir ciertos requisitos. Nunca podremos estar enteramente seguros de que el resultado sea una muestra representativa, pero sí podemos actuar de manera que esta condición se alcance con una probabilidad alta.

En el muestreo, si el tamaño de la muestra es más pequeño que el tamaño de la población, se puede extraer dos o más muestras de la misma población. Al conjunto de muestras que se pueden obtener de la población se denomina espacio muestral. La variable que asocia a cada muestra su probabilidad de extracción, sigue la llamada distribución muestral.

Muestreo aleatorio simple

Para lo cual usaremos datos de crímenes

crime <- data.frame(crimtab)

Para conocer la dimensiones

dim(crime)
## [1] 924   3

Selección de la muestra * Muestreo Aleatorio Simple (M.A.S.) Tomar una muestra de 30 de la población

n <- 30
muestramia <- sample(1:nrow(crime),size=n, replace = FALSE)
muestramia
##  [1] 831  47 411 270 272 883 719 682 400 213 418 751 382 396 609 759 479 462 341
## [20]  40 276 247 793  66 192  36 385 623 792  96

Asignar los elementos de la muestra al marco de datos

crimemuestramia <- crime[muestramia,  ]
head(crimemuestramia)
##     Var1   Var2 Freq
## 831 12.6  190.5    0
## 47   9.8 144.78    0
## 411 12.6  165.1    1
## 270 11.1 157.48   22
## 272 11.3 157.48   10
## 883  9.4 195.58    0

Ahora usamos tidyverse

library(dplyr)
## 
## 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
#Muestra sin remplazo
crimemuestramia2 <- crime %>%
  sample_n(size=n, replace=FALSE)

head(crimemuestramia2)
##   Var1   Var2 Freq
## 1 13.5 154.94    0
## 2  9.9 160.02    0
## 3 10.5 172.72    0
## 4 11.1 167.64   24
## 5 10.6 185.42    0
## 6 13.3 167.64    0

Muestreo ponderado (pesos)

crimemuestramia3 <- crime %>%
  sample_n(size = n, weight = Freq)

head(crimemuestramia3)
##   Var1   Var2 Freq
## 1 12.2 162.56    5
## 2 11.1 157.48   22
## 3 11.5 167.64   38
## 4 11.2 154.94    7
## 5 11.3  165.1   39
## 6 11.5  165.1   57
crimenes <- data.frame(crimtab)
n <- 50
crime <- sample(1:nrow(crimenes), size=n, replace=FALSE  )
crime
##  [1] 129 741 137 521 742 385 752 645 856 828 267  78 660 119 479 295 586 258  11
## [20] 422 623 650 219 755 779 511 570 726 646 269 778 134 551  72 600  99 588 845
## [39] 760 159 340 443 805 543 164 268 583  61 903 141
crimes <- crimenes[crime,]
head(crimes)
##     Var1   Var2 Freq
## 129  9.6 149.86    0
## 741   12 185.42    0
## 137 10.4 149.86    1
## 521   11 172.72    6
## 742 12.1 185.42    0
## 385   10  165.1    1

Entonces se va a muestrear una fracción de 0.04 de la población (4%) que representa 6 flores que se muestrearon 100% al azar

library(dplyr)
crime.pesos <- crimenes %>%
  sample_frac(0.04)
head(crime.pesos); dim(crime.pesos)
##   Var1   Var2 Freq
## 1 12.4  165.1    2
## 2  9.6 162.56    0
## 3 11.6 170.18   38
## 4 11.9 185.42    0
## 5   11 170.18   10
## 6 10.5  177.8    0
## [1] 37  3

Muestreo usando la base de datos de iris

Referencia de los datos usados: https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/iris.html

Esta base de datos tiene 150 filas y 5 columnas de 3 especies de flores de lirio llamadas: Setosa, Virginica y Versicolor.

Para conocer las dimensiones de estos datos se usa “dim”

dim(iris)
## [1] 150   5

Para conocer los primeros elementos de la base de datos:

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
levels(as.factor(iris$Species))
## [1] "setosa"     "versicolor" "virginica"
lirios <- iris
lirios$id <- 1:150
lirios[1:5, 4:6]
##   Petal.Width Species id
## 1         0.2  setosa  1
## 2         0.2  setosa  2
## 3         0.2  setosa  3
## 4         0.2  setosa  4
## 5         0.2  setosa  5
set.seed(20170704)
sample(lirios$id, size=6, replace = FALSE  )
## [1] 142 125  81 101  82  41
set.seed(20170704)
sample(lirios$id, size=30, replace = TRUE  )
##  [1] 142 125  81 101  82  41  80 110 131 116  62  56  92  28 125  59 102  23  76
## [20]  23  49  75 149  98  56  72 135  69  57 101
set.seed(20170701)
x <- 1:7 ; x
## [1] 1 2 3 4 5 6 7
sample(x, size= 6,
       replace= FALSE)
## [1] 7 1 6 3 4 5
set.seed(1)
sample_iris <- iris %>%
  group_by(Species) %>%
  sample_n(10)

sample_iris
## # A tibble: 30 x 5
## # Groups:   Species [3]
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          4.6         3.1          1.5         0.2 setosa 
##  2          4.4         3            1.3         0.2 setosa 
##  3          5.1         3.5          1.4         0.2 setosa 
##  4          5.5         4.2          1.4         0.2 setosa 
##  5          4.6         3.6          1           0.2 setosa 
##  6          4.4         3.2          1.3         0.2 setosa 
##  7          4.3         3            1.1         0.1 setosa 
##  8          5.1         3.5          1.4         0.3 setosa 
##  9          5.2         4.1          1.5         0.1 setosa 
## 10          5.4         3.4          1.7         0.2 setosa 
## # ... with 20 more rows
setwd("~/VERANOPYE")
library(readxl)
datos <- read_excel("busquedas.xlsx")

boxplot(datos$cubrebocas ~ datos$covid, col="pink" )

cor(datos)
##            cubrebocas     covid
## cubrebocas  1.0000000 0.8818728
## covid       0.8818728 1.0000000
pairs(datos)

shapiro.test(datos$covid)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$covid
## W = 0.65431, p-value = 8.358e-10
shapiro.test(datos$cubrebocas)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$cubrebocas
## W = 0.70283, p-value = 5.867e-09
hist(datos$covid)

*Se rechaza la hipótesis nula dado que los datos no son normales