La función sample() es una herramienta fundamental en R
para el muestreo aleatorio. Su sintaxis básica es:
sample(x, size, replace = FALSE, prob = NULL)
Donde:
- x: vector de elementos a muestrear
- size: número de elementos a seleccionar
- replace: si permite reemplazo (TRUE/FALSE)
- prob: vector de probabilidades para cada elemento
Seleccionar 5 números del 1 al 30 y 3 colores de un vector, sin repeticiones.
# Crear un vector de números del 1 al 30
numeros <- 1:30
print("Vector de números:")
## [1] "Vector de números:"
print(numeros)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
# Seleccionar 5 números sin reemplazo
set.seed(123) # Para reproducibilidad)
muestra_sin_reemplazo <- sample(numeros, size = 5)
print("Muestra sin reemplazo de 5 números:")
## [1] "Muestra sin reemplazo de 5 números:"
print(muestra_sin_reemplazo)
## [1] 15 19 14 3 10
# Seleccionar 3 colores de una lista
colores <- c("rojo", "azul", "verde", "amarillo", "morado")
muestra_colores <- sample(colores, size = 3)
print("Muestra sin reemplazo de 3 colores:")
## [1] "Muestra sin reemplazo de 3 colores:"
print(muestra_colores)
## [1] "azul" "morado" "verde"
¿Qué sucede si intentamos seleccionar más elementos de los que existen? Usa el ejemplo de los colores.
Permitir que los elementos puedan ser seleccionados múltiples veces.
Tirar un dado 10 veces y lanzar una moneda 20 veces.
# Simular lanzamiento de dados
dados <- 1:6
lanzamientos <- sample(dados, size = 10, replace = TRUE)
print("Lanzamientos de dados:")
## [1] "Lanzamientos de dados:"
print(lanzamientos)
## [1] 5 4 6 6 1 2 3 5 3 3
# Contar frecuencias
table(lanzamientos)
## lanzamientos
## 1 2 3 4 5 6
## 1 1 3 1 2 2
# Simular cara o cruz
moneda <- c("Cara", "Cruz")
lanzamientos_moneda <- sample(moneda, size = 20, replace = TRUE)
print("Lanzamientos de moneda:")
## [1] "Lanzamientos de moneda:"
print(lanzamientos_moneda)
## [1] "Cara" "Cruz" "Cara" "Cara" "Cara" "Cara" "Cruz" "Cruz" "Cara" "Cruz"
## [11] "Cara" "Cruz" "Cara" "Cruz" "Cruz" "Cara" "Cara" "Cara" "Cara" "Cruz"
table(lanzamientos_moneda)
## lanzamientos_moneda
## Cara Cruz
## 12 8
Crearemos un histograma para visualizar la distribución de los lanzamientos del dado.
# Histograma de lanzamientos de dados
hist(lanzamientos,
xlab = "Valor del Dado",
ylab = "Frecuencia",
col = "lightblue",
breaks = 0.5:6.5)
Asignar diferentes probabilidades a cada elemento.
# Dado cargado (no equilibrado)
dados <- 1:6
# El 6 tiene mayor probabilidad de salir
probabilidades <- c(0.1, 0.1, 0.1, 0.1, 0.1, 0.5)
# Verificar que suman 1
sum(probabilidades)
## [1] 1
# Muestreo con probabilidades
dado_cargado <- sample(dados, size = 1000, replace = TRUE, prob = probabilidades)
# Análisis de resultados
frecuencias <- table(dado_cargado)
print(frecuencias)
## dado_cargado
## 1 2 3 4 5 6
## 86 105 104 95 96 514
# Proporciones
prop.table(frecuencias)
## dado_cargado
## 1 2 3 4 5 6
## 0.086 0.105 0.104 0.095 0.096 0.514
Vamos a comparar los histogramas de un dado normal y un dado cargado.
par(mfrow = c(1, 2))
# Dado normal
dado_normal <- sample(1:6, size = 1000, replace = TRUE)
barplot(table(dado_normal),
main = "Dado Normal",
col = "lightgreen",
ylab = "Frecuencia")
# Dado cargado
barplot(table(dado_cargado),
main = "Dado Cargado",
col = "lightcoral",
ylab = "Frecuencia")
Reordenar todos los elementos de forma aleatoria.
# Barajar cartas
cartas <- c("As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")
cartas_barajadas <- sample(cartas)
print("Cartas barajadas:")
## [1] "Cartas barajadas:"
print(cartas_barajadas)
## [1] "8" "3" "4" "7" "2" "6" "K" "J" "10" "As" "Q" "5" "9"
# Asignación aleatoria de estudiantes a grupos
estudiantes <- c("Ana", "Luis", "María", "Pedro", "Carmen", "Jorge")
orden_aleatorio <- sample(estudiantes)
print("Orden aleatorio de estudiantes:")
## [1] "Orden aleatorio de estudiantes:"
print(orden_aleatorio)
## [1] "María" "Pedro" "Luis" "Carmen" "Ana" "Jorge"
# Crear grupos
grupo1 <- orden_aleatorio[1:3]
grupo2 <- orden_aleatorio[4:6]
cat("Grupo 1:", paste(grupo1, collapse = ", "), "\n")
## Grupo 1: María, Pedro, Luis
cat("Grupo 2:", paste(grupo2, collapse = ", "), "\n")
## Grupo 2: Carmen, Ana, Jorge
Seleccionar el menú semanal de frutas de forma aleatoria.
# sin repeticiones
fruits <- c("manzana", "guineo", "mango", "pera", "fresa", "uva", "naranja", "piña", "sandía", "papaya")
selected_fruitsF <- sample(fruits, 5, replace = F)
print("Frutas seleccionadas sin repeticiones:")
## [1] "Frutas seleccionadas sin repeticiones:"
selected_fruitsF
## [1] "papaya" "naranja" "manzana" "mango" "guineo"
# con repeticiones
selected_fruitsT <- sample(fruits, 5, replace = T)
print("Frutas seleccionadas con repeticiones:")
## [1] "Frutas seleccionadas con repeticiones:"
selected_fruitsT
## [1] "sandía" "sandía" "manzana" "uva" "uva"
Selección de menú semanal de frutas de forma aleatoria, con diferentes cantidades de frutas.
fruits_prob <- c(rep("manzana", 6), rep("guineo", 6), rep("mango", 3), rep("pera", 2), rep("fresa", 2), rep("uva", 2), rep("naranja", 4), rep("piña", 1), rep("sandía", 1), rep("papaya", 1))
selected_fruitsP <- sample(fruits_prob, 5, replace = F)
selected_fruitsP
## [1] "naranja" "naranja" "guineo" "mango" "manzana"
Siempre usa set.seed() al inicio de tus análisis para
garantizar reproducibilidad:
# Sin semilla - resultados diferentes cada vez
sample(1:10, 3)
## [1] 8 6 2
sample(1:10, 3)
## [1] 9 10 7
# Con semilla - resultados reproducibles
set.seed(123)
sample(1:10, 3)
## [1] 3 10 2
set.seed(123)
sample(1:10, 3) # Mismo resultado
## [1] 3 10 2