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==10
m1+m2==9
m1+m2
(5,10,15)
さらに、ちょうど 12 個の制約がなければならない次の制約にさえ入っていません。それは物事をさらに困難にするでしょう。