Найдите каждое наблюдение, чтобы выровнять его, используя вероятность

У меня есть матрица вероятностей. Каждая строка представляет собой вероятность того, что наблюдение i попадает на уровень 1, 2, 3. Например, строка 1: это первое падение наблюдения на уровне level1 с вероятностью = 0,2, уровнем2 = 0,3 и уровнем3 = 0,5. В конце я хочу получить столбец, использующий матрицу вероятностей, чтобы расположить каждое наблюдение на уровне 1,2 или 3, что-то похожее на 1,2,3,3,2,.......

Я пытался использовать rmultinom, отбирая по одному образцу из каждой строки с соответствующей вероятностью, но я не уверен, правильный ли это путь или есть лучший метод.

px1=c(0.2, 0.3,0.5)
px2=c(0.1, 0.2,0.7)
px3=c(0.5, 0.1,0.4)
px4=c(0.3, 0.3,0.4)
px5=c(0.4, 0.3,0.3)
px6=c(0.5, 0.1,0.4)
px7=c(0.2, 0.3,0.5)
px8=c(0.5,0.4,0.1)
px9=c(0.2,0 .5,0.3)
px10=c(0.6,0.3,0.1)

prob1=matrix(c(px1,px2,px3,px4,px5,px6,px7,px8,px9,px10), ncol=3, nrow=10)
x1=rmultinom(1,1,prob=prob1[1,])
> x1
     [,1]
[1,]    0
[2,]    1
[3,]    0

Доза означает, что наблюдение 1 находится на уровне 2?


person Adam    schedule 17.01.2021    source источник


Ответы (1)


Да, в вашем примере этот вывод означает, что вы выбрали первое наблюдение как попадающее на уровень 2. Использование rmultinom - это нормально, но, вероятно, было бы удобнее использовать функцию sample:

lvls <- sapply(1:nrow(prob1),function(x) sample(1:3,1,prob=prob1[x,]))

Если вы хотите использовать rmultinom, вы можете сделать это так:

lvls <- sapply(1:nrow(prob1),function(x) which(rmultinom(1,1,prob=prob1[x,])==1))
person Izzy    schedule 17.01.2021