使用概率将每个观测值定位到水平

Locate each observation to level by using the probability

我有一个概率矩阵。每行是观测值 i 落入级别 1、2、3 的概率。例如,第 1 行:这表示第一个观测值落入级别 1,概率 = 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 的剂量?

是的,在您的示例中,该输出意味着您将第一个观察值采样为落入级别 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))