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.
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
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
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"
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
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()
.
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
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
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?
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")
numloteria <- sample(0:9, 5, replace = T)
numloteria
## [1] 0 9 7 3 8
# 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"
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
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
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