Me gustaría generar una matriz cuadrada aleatoria tal que las filas estén normalizadas a uno y los elementos diagonales sean el máximo de su columna. ¿Existe una forma eficiente de muestrear estas matrices de manera uniforme?
$2 \times 2$ Las matrices son fáciles de crear. La primera columna se genera mediante el muestreo de dos uniformes independientes de $[0,1]$ y moviendo el máximo a la primera entrada. La segunda columna es entonces el complemento de la primera. Mis intentos de seguir un procedimiento análogo en dimensiones superiores parecen muy ad hoc y, lo que es más problemático, dan una distribución muy diferente para la columna complementada final que para las demás. ¿Será mi mejor opción algún tipo de muestreo de rechazo?
La motivación es generar matrices de probabilidad, siendo las filas estados del mundo y las columnas señales observadas. Cada señal es más probable en su estado correspondiente, pero no es necesariamente la señal más probable en ese estado.
Editar: La distribución exacta no importa, salvo que parezca natural. Sin embargo, me gustaría evitar que la diagonal también sea máxima para las filas.
Aquí está mi propio intento ah-hoc anterior.
gen.likelihood.matrix <- function(T){
# T: Number of states
mat <- matrix(runif(T^2), nrow=T) # Intialize with uniform variates
diag(mat) <- 1 # To guarantee diag is max in column
candidate.mat <- matrix(nrow=T, ncol=T)
# Loop to check for constraint satisfaction
for(k in 1:100){
weights <- runif(T-1)
weights <- weights / sum(weights)
for(i in 1:T){
# Rescale columns
candidate.mat[i,-T] <- mat[i,-T] * weights
# Replace last column with complement to meet row constraint
candidate.mat[i,T] <- 1 - sum(candidate.mat[i,-T])
}
# Does the last column meet the maximality constraint?
if(candidate.mat[T,T] > max(candidate.mat[-T,T])){
# Shuffle to minimize the distortion from last column
reorder <- sample(1:T,T)
return(candidate.mat[reorder,reorder])
}
}
# Recurse to get new initial values if necessary
return(genLikeliMatrix(T))
}
Esto funciona en términos de darme matrices eficientemente, pero obtengo una extraña distribución bimodal en la diagonal debido a cómo manejo la última columna.