Muestreo aleatorio utilizando sample()

Pudimos ver como utilizar una tabla de números aleatorios para seleccionar una muestra de la clase de biometría. Ahora vamos a utilizar la función sample() para seleccionar 12 estudiantes al azar.

Muestra de 12 estudiantes al azar sin reemplazo

El comando sample() permite seleccionar \(n\) números al azar del número total de estudiantes, \(N\). Indicaremos que es sin reemplazo al indicar replace = F. Esto significa que ningún número puede salir más de una vez.

NOTA: El total de estudiantes debemos ajustarlo de acuerdo a la asistencia del día.

# de la clase de biometria seleccionar 12 estud. al azar
N <- 33
n <- 12
sample(1:N, n, replace = F)
##  [1]  3 29 15 20 28  4 23  2  7 14 24 31

Muestra de 12 estudiantes al azar con reemplazo

El comando sample() permite seleccionar \(n\) números al azar del número total de estudiantes, \(N\). Indicaremos que es con reemplazo al indicar replace = F. Esto significa que algún número puede salir más de una vez (pero no necesariamente).

# probando replace T
sample(1:N, n, replace = T)
##  [1]  4  7  2 14  4 26 33 21  5 18  9 32

Muestra de letras del alfabeto

Si queremos seleccionar una muestra de 4 letras del alfabeto, y ver si formamos una palabra luego de varios muestreos, podemos utilizar el comando sample() para seleccionar 4 letras al azar del alfabeto. Para ello utilizaremos las siguientes fórmulas:

# Muestra de letras del alfabeto
letras <- letters
n <- 4
sample(letras, n, replace = T)
## [1] "a" "t" "x" "d"
# aumentar la frecuencia de vocales
letras_v <- c(rep("a", 5), rep("e", 5), rep("i", 3), rep("o", 3), rep("u", 3), letters)
n <- 4
sample(letras_v, n, replace = T)
## [1] "e" "v" "x" "d"
# eliminar algunas consonantes
letras_c <- setdiff(letras_v, c("k", "q", "w", "x", "y", "z"))
n <- 4
sample(letras_c, n, replace = T)
## [1] "u" "v" "r" "j"

Muestreo estratificado

Si queremos seleccionar una muestra de 12 estudiantes de acuerdo a su ubicación, podemos utilizar el comando sample() para seleccionar \(n_1\) estudiantes de los ubicados en los dos primeros pupitres (\(N_1\)), y \(n_2\) estudiantes de los \(N_2\) ubicados en los restantes pupitres. Para ello utilizaremos las siguientes fórmulas:

\[n_1 = \frac{N_1}{N_t} \times 12\] y \[n_2 = 12 - n_1\]

Donde \(N_t\) es el total de estudiantes presentes.

# Muestreo estratificado
# usar los valores de N1 y N2 según la asistencia
N1 <- 12
N2 <- 18
Nt <- N1 + N2
n1 <- (N1 / Nt) * 12
n2 <- 12 - n1 + 1 # ajuste para redondear porque sample() no usa los decimales para redondear
# usamos sample() para seleccionar n1 estudiantes de N1 y n2 de N2 sin reemplazo
muestra1 <- sample(1:N1, n1, replace = F)
muestra2 <- sample(1:N2, n2, replace = F)
muestra1
## [1]  6 10  7 12
muestra2
## [1] 15 10  2  6 17 14  3  9

Coordenadas de muestras en un campo de girasoles



Queremos tomar una muestra de 30 coordenadas de un campo de girasoles, para realizar análisis del aceite. Para ello, vamos a generar dos vectores de coordenadas \(X\) y \(Y\) utilizando la función sample().

Coordenadas X

Generamos un vector de 30 coordenadas \(X\) al azar entre 1 y 30.

coor.x <- sample(1:30, 30, replace = F) # ¿por qué con reemplazo?
coor.x
##  [1] 15 19  8  1 13  4  3 16 29 28 26 21 22 24  2 14 20 18  6 17 25 23  9 30  5
## [26] 10 12 27  7 11

Coordenadas Y

Generamos un vector de 20 coordenadas \(Y\) al azar entre 1 y 20.

coor.y <- sample(1:20, 30, replace = T) # ¿por qué con reemplazo?
coor.y
##  [1] 19 20  8 13  2  5  5 12 18  8 14 14 14  6 18  8  6  6 14 13  9  2  8 11 12
## [26] 12 12 12 14  6

Unimos las coordenadas

Para tener un data.frame con las coordenadas de los girasoles, unimos los vectores de coordenadas \(X\) y \(Y\) en un data.frame llamado coord.girasol.

coord.girasol <- data.frame(coor.x, coor.y)
coord.girasol
##    coor.x coor.y
## 1      15     19
## 2      19     20
## 3       8      8
## 4       1     13
## 5      13      2
## 6       4      5
## 7       3      5
## 8      16     12
## 9      29     18
## 10     28      8
## 11     26     14
## 12     21     14
## 13     22     14
## 14     24      6
## 15      2     18
## 16     14      8
## 17     20      6
## 18     18      6
## 19      6     14
## 20     17     13
## 21     25      9
## 22     23      2
## 23      9      8
## 24     30     11
## 25      5     12
## 26     10     12
## 27     12     12
## 28     27     12
## 29      7     14
## 30     11      6

¿Cuál es el riesgo de utilizar la función sample() con reemplazo en este caso?

Gráfico de dispersión de las coordenadas

Para visualizar las coordenadas de los girasoles en el campo, vamos a realizar un gráfico de dispersión utilizando la función plot(). En el gráfico, la coordenada \(X\) se representa en el eje horizontal y la coordenada \(Y\) en el eje vertical. Con esta gráfica podemos verificar si hay pares de coordenadas repetidas, ¿cómo?

# Gráfico de dispersión de las coordenadas
plot(coor.x, coor.y, main = "Coordenadas de los girasoles", xlab = "Coordenada X", ylab = "Coordenada Y", pch = 19, col = "blue")

EJERCICIOS

1. Calcular el número de muestras del ejercicio de muestreo estratificado de la clase.

2. Simular la lotería tradicional

numloteria <- sample(0:9, 5, replace = T)
numloteria
## [1] 0 9 7 3 8

3. Simular la LOTTO

4. Preparar un menú semanal de una fruta diaria al azar con y sin repeticiones

# sin repeticiones
fruits <- c("manzana", "guineo", "mango", "pera", "fresa", "uva", "naranja", "piña", "sandía", "papaya")
selected_fruitsF <- sample(fruits, 5, replace = F)
selected_fruitsF
## [1] "sandía"  "piña"    "guineo"  "manzana" "pera"
# con repeticiones
selected_fruitsT <- sample(fruits, 5, replace = T)
selected_fruitsT
## [1] "manzana" "fresa"   "uva"     "piña"    "guineo"

5. Simular el lanzamiento de un dado 5 veces, con probabilidades diferentes para cada cara.

die_roll <- sample(1:6, size = 5, replace = TRUE, 
                   prob = c(0.1, 0.2, 0.2, 0.2, 0.1, 0.2))
die_roll
## [1] 6 6 4 3 4

6. Hacer el ejercicio con las frutas, dándole más probabilidad a las frutas más baratas.

7. Crear un juego de cartas con 4 palos y 13 cartas cada uno y seleccionar 5 cartas al azar.

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
palos <- c("corazones", "diamantes", "picas", "treboles")
cartas <- c("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A")
baraja <- expand.grid(cartas, palos) # crea todas las combinaciones de palos y cartas
colnames(baraja) <- c("carta", "palo")
baraja
##    carta      palo
## 1      2 corazones
## 2      3 corazones
## 3      4 corazones
## 4      5 corazones
## 5      6 corazones
## 6      7 corazones
## 7      8 corazones
## 8      9 corazones
## 9     10 corazones
## 10     J corazones
## 11     Q corazones
## 12     K corazones
## 13     A corazones
## 14     2 diamantes
## 15     3 diamantes
## 16     4 diamantes
## 17     5 diamantes
## 18     6 diamantes
## 19     7 diamantes
## 20     8 diamantes
## 21     9 diamantes
## 22    10 diamantes
## 23     J diamantes
## 24     Q diamantes
## 25     K diamantes
## 26     A diamantes
## 27     2     picas
## 28     3     picas
## 29     4     picas
## 30     5     picas
## 31     6     picas
## 32     7     picas
## 33     8     picas
## 34     9     picas
## 35    10     picas
## 36     J     picas
## 37     Q     picas
## 38     K     picas
## 39     A     picas
## 40     2  treboles
## 41     3  treboles
## 42     4  treboles
## 43     5  treboles
## 44     6  treboles
## 45     7  treboles
## 46     8  treboles
## 47     9  treboles
## 48    10  treboles
## 49     J  treboles
## 50     Q  treboles
## 51     K  treboles
## 52     A  treboles
# seleccionar dos grupos de 5 cartas al azar sin que se vayan a repetir entre los grupos
muestra1 <- baraja %>% sample_n(5)
baraja2 <- anti_join(baraja, muestra1)
## Joining with `by = join_by(carta, palo)`
muestra2 <- baraja2 %>% sample_n(5)
muestra1
##   carta      palo
## 1     7     picas
## 2     3     picas
## 3     9  treboles
## 4     A corazones
## 5     5 diamantes
muestra2
##   carta      palo
## 1     K diamantes
## 2     Q diamantes
## 3     J  treboles
## 4     6     picas
## 5     Q corazones

8. Simulación de herencia de alelos

Simular la herencia de alelos donde cada descendiente hereda uno de dos alelos (A o a) de cada padre.

parent1 <- sample(c("A", "a"), 100, replace = TRUE)
parent2 <- sample(c("A", "a"), 100, replace = TRUE)
offspring <- paste(parent1, parent2, sep = "")
table(offspring)
## offspring
## aa aA Aa AA 
## 22 23 28 27

Podemos cambiar las probabilidades de herencia de los alelos modificando las probabilidades de los alelos en sample().

parent1 <- sample(c("A", "a"), 100, replace = TRUE, prob = c(0.7, 0.3))

parent2 <- sample(c("A", "a"), 100, replace = TRUE, prob = c(0.5, 0.5))
offspring <- paste(parent1, parent2, sep = "")
table(offspring)
## offspring
## aa aA Aa AA 
## 17 18 31 34