26/07/25
Abstract
La teoría mencionada puede revisarse en el capítulo 2 de mis notas de clase que aparecen en el siguiente documento: 1.1. Estadística básica. En Rpubs:: toc se pueden ver otros documentos de posible interés.
En R podemos encontrar diversas funciones para ello:
expand.grid
en el paquete base
de R.combn
en el paquete combinat
.Para nuestros cálculos, utilizaremos la función
expand.grid
. En este caso, creamos la siguientes TRES
funcione: tosscoin(n)
, rolldie(n)
y
isin()
. Se describirán a continuación.
tosscoin(n)
La idea de esta función es generar el espacio muestral de lanzar una
moneda exactamente \(n\) veces, con
valores cara (H
) y sello (T
):
tosscoin <- function(n) {
df <- expand.grid(replicate(n, c("H", "T"), simplify = FALSE),
KEEP.OUT.ATTRS = FALSE,
stringsAsFactors = FALSE)
names(df) <- paste0("X", seq_len(n))
return(df)
}
rolldie(n)
Con ella se genera el espacio muestral al lanzar un dado exactamente \(n\) veces, con valores de 1 a 6 por lanzamiento.
rolldie <- function(n, sides = 6, makespace = FALSE) {
df <- expand.grid(replicate(n, 1:sides, simplify = FALSE),
KEEP.OUT.ATTRS = FALSE)
names(df) <- paste0("X", seq_len(n))
if (makespace) {
df$prob <- rep(1 / nrow(df), nrow(df)) # Agrega la columna de probabilidad
}
return(df)
}
NOTA: En esta función, makespace = TRUE
agregará una
columna de probabilidades (prob = 1/n) al espacio muestral, para
convertirlo en un “objeto tipo espacio de probabilidad”.
isin()
Con ella se verifica si ciertos valores están presentes en cada fila de una matriz o data frame. Se puede usar con o sin tener en cuenta el orden.
isin <- function(x, table, ordered = FALSE) {
# Si x es un vector, lo convertimos en una matriz con una sola fila
if (is.vector(x)) {
x <- matrix(x, nrow = 1)
}
# Validación
if (!is.data.frame(x) && !is.matrix(x)) stop("x debe ser un vector, data.frame o matriz")
# Aplicar fila por fila
apply(x, 1, function(row) {
row_vals <- as.character(row)
tab_vals <- as.character(table)
if (ordered) {
# Buscar subsecuencia exacta
len_row <- length(row_vals)
len_tab <- length(tab_vals)
if (len_tab > len_row) return(FALSE)
for (i in 1:(len_row - len_tab + 1)) {
if (all(row_vals[i:(i + len_tab - 1)] == tab_vals)) return(TRUE)
}
return(FALSE)
} else {
# Verificar si todos los valores de 'table' están presentes (sin importar orden)
all(tab_vals %in% row_vals)
}
})
}
Todo experimento se puede clasificar como se ilustra en la figura de abajo:
Teóricamente se simbolizará con \(\Omega\). Revisaremos algunos ejemplos para encontrar los elementos de este conjunto.
Considere el experimento aleatorio de lanzar n veces una moneda. Los resultados elementales son H (head, cara) y T (tail, sello). Con la librería “prob”, Podemos hallar los elementos del espacio muestral con la función “tosscoin” (lanzamiento de monedas):
tosscoin(1) #A) Espacio muestral con n=1 lanzamiento de una moneda
## X1
## 1 H
## 2 T
tosscoin(2) #B) Espacio muestral con n=2 lanzamientos de una moneda
## X1 X2
## 1 H H
## 2 T H
## 3 H T
## 4 T T
tosscoin(3) #C) Espacio muestral con n=3 lanzamientos de una moneda
## X1 X2 X3
## 1 H H H
## 2 T H H
## 3 H T H
## 4 T T H
## 5 H H T
## 6 T H T
## 7 H T T
## 8 T T T
Para determinar el número de elementos que tiene el espacio muestral \(\Omega\) y el de la muestra, se puede utilizar la función “dim”:
Omega<- tosscoin(10) #D) Espacio muestral con n=10 lanzamientos de una moneda
dim(Omega) #E) Tamaños de Omega y de la muestra
## [1] 1024 10
Ahora considere el experimento aleatorio de lanzar n veces un dado. Los resultados elementales son 1, 2, 3,4, 5 y 6. Con la librería “prob”, Podemos hallar los elementos del espacio muestral con la función “rolldie” (lanzamiento de dados):
Omega<- rolldie(2); Omega #F) Espacio muestral con n=2 lanzamientos de un dado
## X1 X2
## 1 1 1
## 2 2 1
## 3 3 1
## 4 4 1
## 5 5 1
## 6 6 1
## 7 1 2
## 8 2 2
## 9 3 2
## 10 4 2
## 11 5 2
## 12 6 2
## 13 1 3
## 14 2 3
## 15 3 3
## 16 4 3
## 17 5 3
## 18 6 3
## 19 1 4
## 20 2 4
## 21 3 4
## 22 4 4
## 23 5 4
## 24 6 4
## 25 1 5
## 26 2 5
## 27 3 5
## 28 4 5
## 29 5 5
## 30 6 5
## 31 1 6
## 32 2 6
## 33 3 6
## 34 4 6
## 35 5 6
## 36 6 6
dim(Omega) #G) Tamaños de Omega y de la muestra
## [1] 36 2
Para obtener un evento de \(\Omega\) en R, podemos extraer filas usando el operador [].
Omega <- tosscoin(3); Omega #A) Espacio muestral
## X1 X2 X3
## 1 H H H
## 2 T H H
## 3 H T H
## 4 T T H
## 5 H H T
## 6 T H T
## 7 H T T
## 8 T T T
dim(Omega) #B) Tamaños de Omega y de la muestra
## [1] 8 3
B<- Omega[1:4, ]; B #C) Evento B
## X1 X2 X3
## 1 H H H
## 2 T H H
## 3 H T H
## 4 T T H
C<- Omega[c(1,4),]; C #D) Evento C
## X1 X2 X3
## 1 H H H
## 4 T T H
Omega <- rolldie(2); head(Omega) #E) Espacio muestral
## X1 X2
## 1 1 1
## 2 2 1
## 3 3 1
## 4 4 1
## 5 5 1
## 6 6 1
dim(Omega) #F) Tamaños de Omega y de la muestra
## [1] 36 2
G <- subset(Omega, X1 + X2 > 10); G #G) Evento G
## X1 X2
## 30 6 5
## 35 5 6
## 36 6 6
Retornará TRUE si el valor de un vector b está en algún lugar dentro de otro vector a.
x <- 1:6 #A)
y <- 2:4 #B)
z <- c(2,2,4) #C)
y %in% x #D)
## [1] TRUE TRUE TRUE
x %in% y #E)
## [1] FALSE TRUE TRUE TRUE FALSE FALSE
x %in% z #F)
## [1] FALSE TRUE FALSE TRUE FALSE FALSE
La función retornará TRUE si todos los valores del vector b están dentro de otro vector a.
all(y %in% x) #G)
## [1] TRUE
all(x %in% y) #H)
## [1] FALSE
all(x %in% z) #I)
## [1] FALSE
La función retornará TRUE si al menos uno de los valores lógicos dentro de un vector es TRUE.
any(y %in% x) #G)
## [1] TRUE
any(x %in% y) #H)
## [1] TRUE
any(x %in% z) #I)
## [1] TRUE
La función retornará TRUE si cada elemento de b está presente en el vector a, contando multiplicidades.
isin(y, x) #J)
## [1] FALSE
isin(x, y) #K)
## [1] TRUE
isin(x, y) #L)
## [1] TRUE
Hay un argumento opcional que prueba si un elemento del vector b aparece en el a en el mismo orden en que ellos aparecen en b. Por ejemplo:
isin(x, c(2, 3, 4), ordered = TRUE) #M)
## [1] TRUE
isin(x, c(3, 2, 4), ordered = TRUE) #N)
## [1] FALSE
La función “isin” se puede aplicar a cada fila del data frama para encontrar el evento deseado. Por ejemplo,
Omega <- rolldie(3); head(Omega) #O) Dados, n=3
## X1 X2 X3
## 1 1 1 1
## 2 2 1 1
## 3 3 1 1
## 4 4 1 1
## 5 5 1 1
## 6 6 1 1
dim(Omega) #P) Tamaños de Omega y muestra
## [1] 216 3
A <- subset(Omega, isin(Omega, c(2, 1), ordered = TRUE)); A #Q) Evento
## X1 X2 X3
## 2 2 1 1
## 7 1 2 1
## 8 2 2 1
## 9 3 2 1
## 10 4 2 1
## 11 5 2 1
## 12 6 2 1
## 38 2 1 2
## 74 2 1 3
## 110 2 1 4
## 146 2 1 5
## 182 2 1 6
dim(A) #R) Tamaños del evento y de la muestra
## [1] 12 3
La tabla de abajo resume las operaciones que se pueden calcular con R:
Operación | Código |
---|---|
Unión (\(A\cup B\)) | union(A,B) |
Intersección (\(A\cap B\)) | intersect(A,B) |
Diferencia (\(A\setminus B\)) | setdiff(A,B) |
Igualdad (\(A=B\)) | setequal(A,B) |
Revisemos algunos ejemplos:
# Crear espacio muestral
Omega <- rolldie(2)
# Definir eventos
A <- subset(Omega, isin(Omega, c(2, 1), ordered = TRUE)) # Evento A
B <- subset(Omega, isin(Omega, c(1, 2), ordered = FALSE)) # Evento B
# Convertir a representaciones de fila únicas
rows_A <- apply(A, 1, paste, collapse = "_")
rows_B <- apply(B, 1, paste, collapse = "_")
# Operaciones de conjuntos
union_rows <- union(rows_A, rows_B)
intersect_rows <- intersect(rows_A, rows_B)
setdiff_A_B <- setdiff(rows_A, rows_B)
setdiff_B_A <- setdiff(rows_B, rows_A)
set_equal <- setequal(rows_A, rows_B)
# Reconstruir los data.frames desde las filas originales
reconstruct <- function(keys, original_df) {
subset(original_df, apply(original_df, 1, paste, collapse = "_") %in% keys)
}
cat("C) Unión\n"); print(reconstruct(union_rows, Omega))
## C) Unión
## X1 X2
## 2 2 1
## 7 1 2
cat("D) Intersección\n"); print(reconstruct(intersect_rows, Omega))
## D) Intersección
## X1 X2
## 2 2 1
cat("E) Diferencia A-B\n"); print(reconstruct(setdiff_A_B, Omega))
## E) Diferencia A-B
## [1] X1 X2
## <0 rows> (or 0-length row.names)
cat("F) Diferencia B-A\n"); print(reconstruct(setdiff_B_A, Omega))
## F) Diferencia B-A
## X1 X2
## 7 1 2
cat("G) Igualdad A == B ? ", set_equal, "\n")
## G) Igualdad A == B ? FALSE
Dado el experimento aleatorio, encuentre los elementos de los eventos indicados abajo, el número de elementos que contiene y el tamaño de la muestra. Para ello, debe crear un nuevo documento R Markdown. Explique siempre sus afirmaciones y los códigos utilizados. Interprete los resultados hallados.
IPSUR (Introduction to Probability and Statistics Using R): https://www.nongnu.org/ipsur/
LLinás, H.; Rojas, C., Estadística descriptiva y distribuciones de probabilidad. Barranquilla: Ediciones Uninorte, 2005.
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.