各位高手前辈大家好,
在一个论文中看到一个马尔科夫链simulation的小程序,实际运行时有一行总是出现问题,我试了多次都没改好,希望有人能帮助改一下。谢谢大家!
全程序粘贴如下,问题处已标红
mk<-function(n,s,mu,p,d){
#Einfuehrungsfunktion:
psi<-function(x,s,mu){
y<-cumsum(mu)
i<-2
if(x>=0 & x<mu[1]){i<-1}
else{
repeat{
if(x>=y[i-1] & x< y){i&break}
else{i<-i+1}
}
}
return(i)
}
#Update-Funktion:
phi<-function(x,t,p){
z<-cumsum(p[t, ])
j<-2
if(x>=0 & x<p[t,1]){j<-1} 此处抛出错误 missing value where T/F needed (实际运行程序为尾段蓝字)
else{
repeat{
if(x>=z[j-1] & x< z[j]){j&break}
else{j<-j+1}
}
}
return(j)
}
#Erzeugen der X
u<-runif(n+1,min=0,max=1)
X<-rep(3,n+1)
Y<-rep(0,n+1)
j<-rep(0,n+1)
j[1]<-psi(u[1],s,mu)
X[1]<-s[j[1]]
z<-0
if(X[1]==d){Y[1]<-1}
if(X[1]==d){z<-1}
i<-1
repeat{
i<-i+1
j<-phi(u,j[i-1],p)
X<-s[j]
if(X==d){z<-z+1} #Summe 1_[Xi=z]
Y<-(1/i)*z #Berechnung von Y + if(i==n+1)break
}
print(X)
plot(Y,type="l",xlab="Zeitpunkt n")
}
s<-c("Regen","Sonne","Schnee")
p<-matrix(c(0.5,0.15,0.2,0.3,0.7,0.3,0.2,0.15,0.5),nrow=3)
mu<-c(0,0,1)
set.seed(100)
mk(20,s,mu,p,"Schnee")