1

遷移行列の方法を知っている特定の数の状態が発生する離散マルコフ連鎖をシミュレートするアルゴリズムがあるかどうか疑問に思っています。

たとえば、以下で定義される遷移行列の状態「0」が p 回 (p < n) 出現する、長さ n のマルコフ連鎖を R でシミュレートする方法は次のとおりです。

TransitionMatrix<- matrix(c(0.7, 0.3, 0.4, 0.6),byrow=TRUE, nrow=2) 


colnames(TransitionMatrix) <- c('0','1')
row.names(TransitionMatrix) <- c('0','1')
4

1 に答える 1

0

nしたがって、あなたのような 2 つの状態の行列の場合、これは合計と1を使用して、1 と 0 のランダムなシーケンスを生成するために機能しpます。また、次の確率も得られます。

sim.sequence<-function(n,p) {
  ones<-sort(sample(1:n,p,replace=FALSE))
  x<-rep(0,n)
  x[ones]<-1
  row<-as.character(x[1:(n-1)])
  col<-as.character(x[2:n])
  probs<-TransitionMatrix[cbind(row,col)]
  list(states=x,probs=probs)
}

sim.sequence(20,12)
# $states
# [1] 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 0

# $probs
# [1] 0.7 0.3 0.6 0.6 0.4 0.3 0.4 0.3 0.6 0.4 0.3 0.4 0.3 0.6 0.6 0.6
# [17] 0.4 0.3 0.4

さて、あなたのコメントに基づいて、私はあなたが今何を望んでいるのか知っていると思います. ランダムに生成された 0 と 1 と、各状態からの遷移の割合。TransitionMatrix全く使われていません。

したがって、これは次のようになります。

sim.sequence<-function(n,p) {
  ones<-sort(sample(1:n,p,replace=FALSE))
  x<-rep(0,n)
  x[ones]<-1
  row<-as.character(x[1:(n-1)])
  col<-as.character(x[2:n])
  tab<-table(row,col)
  probs<-as.matrix(tab) / rowSums(tab)
  list(states=x,probs=probs)
}
set.seed(1)
sim.sequence(20,12)

# $states
# [1] 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 0 1 0
# 
# $probs
#    col
# row       0         1
# 0 0.2857143 0.7142857
# 1 0.5000000 0.5000000

コメントで提供されている例で、あなたが求めていることは不可能であると主張します。

状態シーケンスには 20 の状態が必要です。つまり、19 の遷移があります。これらの遷移のうち、可能性があるのは次の 4 つだけです。

(1,1) - m1
(1,0) - m2
(0,1) - n1
(0,0) - n2

したがってm1+m2+n1+n2==19、4 つすべても整数です。抑えるb==0.4ためには、m1/(m1+m2)==0.4. m1とも整数でなければならないため、これはペアの可能性が、、m2の 3 つしかないことを意味し(m1,m2)ます。19 を超える遷移を意味するため、不可能です。(2,3)(4,6)(6,9)(8,12)

同様に、 を抑制するには、 :a==0.3の可能性は 1 つしかありません。したがって、. これは、. ただし、唯一の可能性はです。そのため、基準を満たす文字列はありません。(n1,n2)(3,7)n1+n2==10m1+m2==9m1+m2(5,10,15)

さらに、ちょうど 12 個の制約がなければならない次の制約にさえ入っていません。それは物事をさらに困難にするでしょう。

于 2014-01-28T19:36:18.690 に答える