R中的三维矩阵概率误差

R中的三维矩阵概率误差,r,matrix,R,Matrix,我有3个矩阵,它们被组合成一个3D矩阵。我必须找到一个概率,使得隐藏序列中的一个值与p中的一个矩阵值相匹配。我主要在“obssim”的最后一个编码区域中得到一个错误 P1=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4)) P2=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4)) P3=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4)) P=ar

我有3个矩阵,它们被组合成一个3D矩阵。我必须找到一个概率,使得隐藏序列中的一个值与p中的一个矩阵值相匹配。我主要在“obssim”的最后一个编码区域中得到一个错误

P1=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4))
P2=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4))
P3=cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4),c(1,2,3,4))

P=array(c(P1,P2,P3),c(4,4,3))

hssim=function(n,lambda)
{
        r=dim(lambda)[1]
        states=1:r
        s=vector("numeric",n)
        pi.lam=equil(lambda)
        s[1]=sample(states,1,FALSE,pi.lam)
        for (t in 2:n) {
                s[t]=sample(states,1,FALSE,prob=lambda[s[t-1],])
        }
        s
}

lambda=rbind(c(1,2,3),c(4,5,5),c(6,7,8))
s=hssim(10000,lambda) #(gives a hidden sequence)
obssim=function(s,P)
{
        n=length(s)
        r=dim(P)[3]
        q=dim(P)[2]
    states=1:q
        obs=vector("numeric",n)
        for (t in 1:n) {
        obs[t]=sample(states,1,FALSE,prob=P[,s[t],])
        }
        obs
}
我在尝试调用“obs”时出错,无法成功解决:

obs=obssim(s,P)

Error in sample(states, 1, FALSE, prob = P[, s[t],]) : 
  incorrect number of probabilities

问题是,作为参数
prob
传递的是一个4x3矩阵,而对象
状态
(从中选择)是一个由四个元素组成的向量

> states
[1] 1 2 3 4
> P[,s[1],]
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
prob
的长度应与函数
sample
中的
x
的长度相同。我想,取矩阵的第一列(或任何列,因为它们是相同的)就足够了

# replace line starting with obs[t] <- ...
obs[t]=sample(states,1,FALSE,prob=P[,s[t],1])

#将以obs[t]开头的行替换为
hssim
中的
equil
功能是什么?equil是平衡概率的函数:equil=函数(P){e=特征向量(t(P))$vectors[,1]e/sum(e)}我明白了,但从哪个包?它不是基本R安装的一部分。我没有安装任何附加软件包。