He pasado más de un día tratando de lograr lo que parece ser algo muy simple. Tengo que crear 300 secuencias 'aleatorias' en las que los números 1,2,3 y 4 aparecen exactamente 12 veces, pero el mismo número nunca se usa dos veces 'en una fila' / consecutivamente.
Mis mejores intentos (supongo) fueron:
haga que R muestre 48 elementos sin reemplazo, pruebe si hay valores consecutivos con rle, luego use solo las secuencias que no contienen valores consecutivos. Problema: casi no hay secuencias aleatorias que cumplan este criterio, por lo que lleva una eternidad.
haga que R cree secuencias sin valores consecutivos (vea el código).
pop<-rep(1:4,12)
y=c()
while(length(y)!=48)
{
y= c(y,sample(pop,48-length(y),replace=F))
y=y[!c(FALSE, diff(y) == 0)]
}
Problema: esto crea secuencias con números variables de cada valor. Luego intenté usar solo esas secuencias con exactamente 12 de cada valor, pero eso solo me trajo de vuelta al problema 1: toma una eternidad.
Debe haber alguna manera fácil de hacer esto, ¿verdad? ¡Cualquier ayuda es muy apreciada!
Otra opción es utilizar un método de Markov Chain Monte-Carlo para intercambiar 2 números al azar y pasar a la nueva muestra solo cuando 1) no estamos intercambiando el mismo número y 2) no hay 2 números idénticos adyacentes. Para abordar muestras correlacionadas, podemos generar muchas muestras y luego seleccionar aleatoriamente 300 de ellas:
fuente
Puede sacar valores consecutivos y colocarlos donde no son consecutivos.
fuente