2014-02-12 5 views
0

나는 3 차원 matrix.i에 결합 된 3 개의 매트릭스가 있는데, 숨겨진 시퀀스의 값이 P의 매트릭스 값 중 하나와 일치 할 확률을 찾아야합니다. 'obssim'R에서 3d 매트릭스 확률 오류

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 
+0

? 그것은 어떤 패키지에서 왔습니까? equil = 함수 (P) I 볼 { E = 고유 (t (P)) $ 벡터 [1] E/합 (E) } – Zbynek

+0

equil 평형 확률에 대한 함수 ? 기본 R 설치의 일부가 아닙니다. – user3301661

+0

하지만 어떤 패키지 : – Zbynek

답변

0

문제는, 매개 변수 prob으로 전달하는 것은 4x3 행렬이고 객체는 states 인 반면, 당신이 선택하는 네 요소의 벡터입니다.

> 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의 길이의 함수 samplex의 길이와 같아야한다. 나는 (그들이 때문에 또는이 같은) 처음 복용하는 행렬의 열이

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

보다 충분 것이라고 생각, 코드가 오류없이 실행 hssim``에서 함수`equil`을 무엇