hllinas2023

1 Paquetes

En R podemos encontrar diversas funciones para ello:

  • expand.grid en el paquete base de R.
  • combn en el paquete combinat.

2 Funciones

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.

2.0.1 Funció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)
}

2.0.2 Función 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”.

2.0.3 Función 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)
    }
  })
}

3 Experimento

Todo experimento se puede clasificar como se ilustra en la figura de abajo:

4 Espacio muestral

Teóricamente se simbolizará con \(\Omega\). Revisaremos algunos ejemplos para encontrar los elementos de este conjunto.

4.0.1 Ejemplo: Lanzar monedas

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

4.0.2 Ejemplo: Lanzar dados

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

5 Evento

Para obtener un evento de \(\Omega\) en R, podemos extraer filas usando el operador [].

5.0.1 Ejemplo: Lanzar monedas

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

5.0.2 Ejemplo: Lanzar dados

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

6 Funciones para encontrar subconjuntos

6.0.1 La función (b %in% a)

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

6.0.2 La función all(b %in% a)

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

6.0.3 La función any(b %in% a)

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

6.0.4 La función isin(a,b)

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

6.1 La función isin(a,b) con opción ordered

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

6.1.1 La función isin(a,b) para construir eventos

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

7 Operaciones con conjuntos

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

8 Ejercicios

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.

  1. Experimento: Un dado se lanza dos veces.
    1. \(\Omega\): El espacio muestral.
    2. Evento B: La suma de los números es 7. Sugerencia: utilizar == para indicar el símbolo de igualdad.
    3. Evento C: La suma de los números es por lo menos un 11.
    4. Evento D: La suma de los números es a lo más un 2.
    5. Evento E: Se obtiene un doble. Sugerencia: utilizar == para indicar el símbolo de igualdad.
    6. Evento F: No se obtiene un doble. Sugerencia: utilizar != para indicar el símbolo de diferente.
    7. Unión de B y F.
    8. Interseción de C y E.
    9. Diferencia C-F.
    10. Evento J: Unión de E y F. Verifique en R si J es igual a \(\Omega\).
    11. Intersección de C y D.
    12. Diferencia de B y D.
    13. Evento M: Contiene los elementos de la forma (3,4), ordenados. Sugerencia: utilizar la función isin().
    14. Evento N: Contiene los elementos de la forma (3,4), no ordenados. Sugerencia: utilizar la función isin(). Compare con el evento M.
    15. Evento O: Uno cualquiera obtenido al aplicar la función corchete.
  2. Experimento: Una moneda se lanza cuatro veces.
    1. \(\Omega\): El espacio muestral.
    2. Evento B: Las primeras 2 observaciones. Utilizar la función corchete.
    3. Evento C: Las primeras 5 observaciones. Utilizar la función corchete.
    4. Unión de B y C.
    5. Intersección de B y C.
    6. Diferencia B-C.
    7. Diferencia C-B.
    8. Evento H: El complemento de B.
    9. Evento I: El complemento de C
    10. Intersección de B y H.
    11. Evento K: Unión de C y I. Verifique en R si K es igual a \(\Omega\).
    12. Evento L: Salgan 2 caras. Sugerencia: utilizar la función isin().
    13. Evento M: Salgan 3 caras. Sugerencia: utilizar la función isin().

9 Enlaces y materiales de ayuda

  1. IPSUR (Introduction to Probability and Statistics Using R): https://www.nongnu.org/ipsur/

  2. 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.