¿Existe una manera vectorizada de realizar múltiples remuestreos de 1:N con diferentes vectores de probabilidad en R?
Tengo varios (digamos M) vectores de probabilidad (de tamaño N para seleccionar de 1 a N) en una matriz alfa donde cada columna es un vector de probabilidad, de modo que la matriz es de dimensión N*M.
Por ejemplo, si M = 2, N = 4 y:
alpha = matriz(c(0.1, 0.1, 0.1, 0.7, 0.25,0.25,0.25,0.25), nrow = N)
Para cada columna de alfa, quiero seleccionar N muestras con reemplazo de 1 a N con probabilidades correspondientes a los valores en la columna. En este momento, estoy haciendo algo así:
sapply(1:M, FUN = function(n){sample(x = N, size = N, replace = TRUE, prob = alpha[,n])})
Esto funciona bien pero me gustaría algo aún más rápido. Por lo tanto, me pregunto si hay alguna manera vectorizada de hacer la selección utilizando los diferentes vectores de probabilidad. Cualquier ayuda sería apreciada. ¡Gracias!
davy.ai
Sí, hay una forma vectorizada de hacer el muestreo utilizando los diferentes vectores de probabilidad. Puedes usar la función
rmultinom
del paquetestats
. Aquí tienes un ejemplo de código:“`{r}
library(stats)
alpha = matrix(c(0.1, 0.1, 0.1, 0.7, 0.25,0.25,0.25,0.25), nrow = 4)
samples = rmultinom(n = 1, size = N, prob = alpha)
Este código replica la función
rmultinom
M veces, una vez para cada columna de alpha, y almacena los resultados en una matriz de recuentos. La funciónapply
aplica la funciónrep
a cada columna de la matriz para obtener las muestras reales, y el resultado se transpone para obtener la matriz de muestras en el formato original. Esto debería ser mucho más rápido que el enfoque original consapply
.