Introducción

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


Ejercicio 1: Muestreo Básico Sin Reemplazo

Objetivo

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"

Pregunta

¿Qué sucede si intentamos seleccionar más elementos de los que existen? Usa el ejemplo de los colores.


Ejercicio 2: Muestreo Con Reemplazo

Objetivo

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

Visualización

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)


Ejercicio 3: Muestreo con Probabilidades

Objetivo

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

Comparación visual

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")


Ejercicio 4: Permutaciones Aleatorias

Objetivo

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

Ejercicio 5: Selección de menú semanal de frutas

Objetivo

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"

Ejercicio 6: Garantizar Reproducibilidad.

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