अनुक्रम डेटा से मार्कोव संक्रमण संभावनाओं का अनुमान लगाना


16

मेरे पास 4 राज्यों AD : उदा जैसे अनुक्रमों (432 अवलोकनों का सटीक होना) का पूरा सेट है

Y=(ACDDBACBAACABCADABA)

संपादित करें : अवलोकन अनुक्रम असमान लंबाई के हैं! क्या यह कुछ बदलता है?

क्या मैटलैब या R या इसी तरह के ट्रांज़िशन मैट्रिक्स की गणना करने का कोई तरीका है ? मुझे लगता है कि HMM पैकेज मदद कर सकता है। कोई विचार?

Pij(Yt=j|Yt1=i)

उदाहरण: मार्कोव श्रृंखला की संभावनाओं का अनुमान लगाना


3
आपके राज्य हैं: S = { 1 : = A , 2 : = B , 3 : = C , 4 : = D } । चलो n मैं j समय की संख्या श्रृंखला राज्य से एक परिवर्तन किया हो मैं राज्य के लिए जे , के लिए मैं j , = 1 , 2 , 3 , 4 । अपने नमूने से गणना करें और संक्रमण मैट्रिक्स का अनुमान लगाएं (4S={1:=A,2:=B,3:=C,4:=D}nijijij,=1,2,3,4nij अधिकतम संभावना अनुमान का उपयोग करके पी मैं j = n मैं j / Σ 4 j = 1 n मैं जे(pij)p^ij=nij/j=14nij
जेन

ये नोट MLE का अनुमान लगाते हैं: stat.cmu.edu/~cshalizi/462/lectures/06/markov-mle.pdf
Zen

2
इसी तरह के सवाल: आंकड़े.stackexchange.com/questions/26722/…
B_Miner

@B_Miner क्या आप अपना कोड मेरे लिए छद्म कोड रूप में लिख सकते हैं? या इसे स्पष्ट शब्दों में समझाएँ ... हालाँकि मैं देख रहा हूँ कि यह मेरे आर कंसोल में काम करता है।
एचसीएआई

मेरे पास एक सवाल है: मैं आपके कार्यान्वयन को समझता हूं और यह मेरे लिए ठीक है, लेकिन मैं सोच रहा था कि मैं टी मैट्रिक्स की गणना करने के लिए केवल मैटलैब हमेस्टिमेट फ़ंक्शन का उपयोग क्यों नहीं कर सकता हूं? कुछ इस तरह: राज्यों = [१,२,३,४] [टी, ई] = हम्मस्टीम (एक्स, राज्यों); जहां टी संक्रमण मैट्रिक्स है, मुझे इसमें दिलचस्पी है। मैं मार्कोव श्रृंखला और एचएमएम के लिए नया हूं, इसलिए मैं दो कार्यान्वयन (यदि कोई है) के बीच अंतर को समझना चाहता हूं।
कोई भी

जवाबों:


18

कृपया, उपरोक्त टिप्पणियों की जाँच करें। यहाँ आर में त्वरित कार्यान्वयन है।

x <- c(1,2,1,1,3,4,4,1,2,4,1,4,3,4,4,4,3,1,3,2,3,3,3,4,2,2,3)
p <- matrix(nrow = 4, ncol = 4, 0)
for (t in 1:(length(x) - 1)) p[x[t], x[t + 1]] <- p[x[t], x[t + 1]] + 1
for (i in 1:4) p[i, ] <- p[i, ] / sum(p[i, ])

परिणाम:

> p
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1666667 0.3333333 0.3333333 0.1666667
[2,] 0.2000000 0.2000000 0.4000000 0.2000000
[3,] 0.1428571 0.1428571 0.2857143 0.4285714
[4,] 0.2500000 0.1250000 0.2500000 0.3750000

MATLAB में ए (शायद गूंगा) कार्यान्वयन (जिसका मैंने कभी उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि यह काम करने जा रहा है। मैंने सिंटैक्स प्राप्त करने के लिए केवल "वेक्टर मैट्रिक्स MATLAB घोषित" किया है):

x = [ 1, 2, 1, 1, 3, 4, 4, 1, 2, 4, 1, 4, 3, 4, 4, 4, 3, 1, 3, 2, 3, 3, 3, 4, 2, 2, 3 ]
n = length(x) - 1
p = zeros(4,4)
for t = 1:n
  p(x(t), x(t + 1)) = p(x(t), x(t + 1)) + 1
end
for i = 1:4
  p(i, :) = p(i, :) / sum(p(i, :))
end

अच्छा लग रहा है! मुझे यकीन नहीं है कि आपके कोड में तीसरी पंक्ति क्या करती है (मुख्यतः क्योंकि मैं मतलूब से परिचित हूं)। कोई भी मौका आप इसे matlab या छद्म कोड में लिख सकते हैं? मैं बहुत मजबूर हो जाएगा।
एचसीएआई

2
तीसरी पंक्ति ऐसा करती है: श्रृंखला मान । के लिए टी = 1 , ... , n - 1 , वेतन वृद्धि पी एक्स टी , एक्स टी + 1x1,,xnt=1,,n1pxt,xt+1
झेन

चौथी पंक्ति मैट्रिक्स की प्रत्येक पंक्ति सामान्य करती है । (pij)
झेन

यहां मेरे धीमेपन के साथ नंगे। मैं MATLAB कोड अनुवाद की सराहना करता हूं, हालांकि मैं अभी भी यह नहीं देख सकता कि यह आपके पहले forलूप में क्या करने का प्रयास कर रहा है । मूल कोड से तीसरी पंक्ति की संख्या x को राज्य x i से राज्य x j पर जाने की संख्या गिन रही है ? यदि आप इसे शब्दों में कह सकते हैं तो मैं इसकी सराहना करूंगा। चीयर्सxxixj
HCAI

1
x

9

यहाँ आर में मेरा कार्यान्वयन है

x <- c(1,2,1,1,3,4,4,1,2,4,1,4,3,4,4,4,3,1,3,2,3,3,3,4,2,2,3)
xChar<-as.character(x)
library(markovchain)
mcX<-markovchainFit(xChar)$estimate
mcX

1
user32041's request (posted as an edit instead of a comment since he/she lacks reputation): How can I coerce the transitionMatrix of the markovchainFit result to a data.frame?
chl

You can convert to data.frame using as(mcX,"data.frame")
Giorgio Spedicato

@GiorgioSpedicato आप असमान लंबाई के अनुक्रमों से निपटने के बारे में टिप्पणी कर सकते हैं (मैं अपने कॉन्टेक्ट नहीं कर सकता) कृपया अपने पैकेज में?
एचसीएआई

@HCAI, कृपया मौजूदा विगनेट पेज 35-36
जियोर्जियो स्पेडेटाटो

@GiorgioSpedicato ने संदर्भ cran.r-project.org/web/packages/markovchain/vignettes/… के लिए धन्यवाद दिया । मेरे पास अभी भी n संक्रमण मैट्रिसेस हैं, प्रत्येक अनुक्रम के लिए एक। मैं एक के बाद एक सामान्य है जो सभी अनुक्रम टिप्पणियों को ध्यान में रखता है। क्या मुझे कुछ याद आ रहा है?
एचसीएआई

2

यह मतलब में करने का एक तरीका है:

x = [1,2,1,1,3,4,4,1,2,4,1,4,3,4,4,4,3,1,3,2,3,3,3,4,2,2,3];
counts_mat = full(sparse(x(1:end-1),x(2:end),1));
trans_mat = bsxfun(@rdivide,counts_mat,sum(counts_mat,2))

Acknowledgement owed to SomptingGuy: http://www.eng-tips.com/viewthread.cfm?qid=236532

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.