Otras respuestas se han centrado en la ocurrencia general de diferentes letras en la secuencia, que puede ser un aspecto de la "aleatoriedad" esperada. Sin embargo, otro aspecto de interés es la aparente aleatoriedad en la pedir de las letras de la secuencia. Como mínimo, creo que la "aleatoriedad" implica la intercambiabilidad del vector de letras, que puede comprobarse mediante una "prueba de carreras". La prueba de carreras cuenta el número de "carreras" en la secuencia y compara el número total de carreras con su distribución nula bajo la hipótesis nula de intercambiabilidad, para un vector con las mismas letras. La definición exacta de lo que constituye una "carrera" depende de la prueba concreta (véase, por ejemplo, una respuesta similar aquí ), pero en este caso, con categorías nominales, la definición natural es contar cualquier secuencia consecutiva que conste de una sola letra como una sola "carrera".
Por ejemplo, su secuencia BABD-CABC-DACD-BACD
mira a primera vista no me parece aleatorio (ninguna letra aparece con ella misma, lo que probablemente es inusual para una secuencia tan larga). $^\dagger$ Para comprobarlo formalmente, podemos realizar una prueba de intercambiabilidad. En esta secuencia tenemos $n = 16$ letras (cuatro de cada letra) y hay $r = 16$ carreras, cada una de las cuales consiste en una sola instancia de una letra. El número de ejecuciones observado puede compararse con su distribución nula bajo la hipótesis de intercambiabilidad. Podemos hacerlo mediante una simulación, que arroja una distribución nula simulada y un valor p para la prueba. El resultado para esta secuencia de caracteres se muestra en el siguiente gráfico.
Para esta secuencia, el valor p de la prueba de las carreras (bajo la hipótesis nula de intercambiabilidad) es $p=0.0537$ . Esto es significativo al nivel de significación del 10%, pero no al del 5%. Hay algunas pruebas que sugieren una serie no intercambiable (es decir, un orden no aleatorio), pero las pruebas no son especialmente sólidas. Con una serie observada más larga, la prueba de corridas tendría mayor poder para distinguir una serie intercambiable de una no intercambiable. (Como puede ver, mi a primera vista El juicio de que esta cadena no es aleatoria puede ser erróneo: el valor p no es en realidad tan bajo como esperaba).
Por último, es importante tener en cuenta que esta prueba sólo examina la aleatoriedad del pedir de las letras de la cadena - toma el número de letras de cada tipo como entrada fija. Esta prueba detectará la no aleatoriedad en el sentido de la no intercambiabilidad de las letras de la cadena, pero no comprobará la "aleatoriedad" en el sentido de las probabilidades globales de las diferentes letras. Si esto último también forma parte del significado especificado de "aleatoriedad", esta prueba de ejecución podría aumentarse con otra prueba que examine los recuentos globales de las letras y los compare con una distribución nula hipotética.
Código R: El gráfico anterior y el valor p se generaron utilizando lo siguiente R
código:
#Define the character string vector (as factors)
x <- factor(c(2,1,2,4, 3,1,2,3, 4,1,3,4, 2,1,3,4),
labels = c('A', 'B', 'C', 'D'))
#Define a function to calculate the runs for an input vector
RUNS <- function(x) { n <- length(x);
R <- 1;
for (i in 2:n) { R <- R + (x[i] != x[i-1]) }
R; }
#Simulate the runs statistic for k permutations
k <- 10^5;
set.seed(12345);
RR <- rep(0, k);
for (i in 1:k) { x_perm <- sample(x, length(x), replace = FALSE);
RR[i] <- RUNS(x_perm); }
#Generate the frequency table for the simulated runs
FREQS <- as.data.frame(table(RR));
#Calculate the p-value of the runs test
R <- RUNS(x);
R_FREQ <- FREQS$Freq[match(R, FREQS$RR)];
p <- sum(FREQS$Freq*(FREQS$Freq <= R_FREQ))/k;
#Plot estimated distribution of runs with test
library(ggplot2);
ggplot(data = FREQS, aes(x = RR, y = Freq/k, fill = (Freq <= R_FREQ))) +
geom_bar(stat = 'identity') +
geom_vline(xintercept = match(R, FREQS$RR)) +
scale_fill_manual(values = c('Grey', 'Red')) +
theme(legend.position = 'none',
plot.title = element_text(hjust = 0.5, face = 'bold'),
plot.subtitle = element_text(hjust = 0.5),
axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0))) +
labs(title = 'Runs Test - Plot of Distribution of Runs under Exchangeability',
subtitle = paste0('(Observed runs is black line, p-value = ', p, ')'),
x = 'Runs', y = 'Estimated Probability');
$^\dagger$ He dividido la secuencia con guiones únicamente para facilitar la lectura; los guiones no tienen ninguna importancia para el análisis.
12 votos
¿Qué quiere decir exactamente con "aleatorio" en este contexto?
3 votos
Podrías hacer una máquina de estado de n bits y luego registrar cuántas predicciones erróneas hace. Algo así como el predictor de rama de una CPU.
1 votos
Se puede calcular la probabilidad de que una cadena de caracteres haya sido generada por algún proceso particular conocido. No se puede saber si es "aleatorio" (y probablemente no sea una pregunta significativa).
2 votos
Podrías consultar con contabilidad .
2 votos
Si te centras en las frecuencias de las letras y no en las secuencias, la prueba de Chi-cuadrado de la frecuencia real frente a la esperada es habitual. Es decir, si su primer ejemplo es "impar" porque tiene demasiadas "D", mientras que el segundo tiene un número bastante igual de "A", "B", "C" y "D", entonces querrá comparar el número de cada una de las A, B, C y D frente a lo esperado. (Quizá un número más o menos igual de A, B, C y D, o quizá el doble de A que de B y el doble de B que de C o D).
0 votos
Que un resultado sea de baja probabilidad no significa que no sea aleatorio. La probabilidad de que una persona concreta gane la lotería es extremadamente baja, pero sigue siendo el resultado de un proceso aleatorio.
0 votos
Cualquier tiene la misma probabilidad de ser creada al azar. Utilizando la lotería como ejemplo, si jugamos los números
1
,2
,3
,4
,5
,6
tiene exactamente las mismas posibilidades de ganar el bote que cualquier otro conjunto de números. Q: Si lanzas una moneda diez veces y las primeras 9 salenHeads
¿cuál será probablemente el próximo giro? ( A: sigue siendo un 50/50 de posibilidades en el décimo volteo).0 votos
La aleatoriedad como falta de estructura: cs.stackexchange.com/questions/14772/
0 votos
DDDDDDDDCDDDDDD
tiene 15 letras mientras queBABDCABCDACDBACD
tiene 16, por lo que es más probable que aparezca el primero.