आर में संक्रमण मैट्रिक्स (मार्कोव) की गणना करें


29

क्या आर (एक अंतर्निहित फ़ंक्शन) में एक तरीका है जो टिप्पणियों के एक सेट से मार्कोव श्रृंखला के लिए संक्रमण मैट्रिक्स की गणना करने के लिए है?

उदाहरण के लिए, निम्नलिखित की तरह एक डेटा सेट लेना और पहले ऑर्डर ट्रांजिशन मैट्रिक्स की गणना करना?

dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))

इस मैट्रिक्स को किसका प्रतिनिधित्व करना है? प्रत्येक पंक्ति (या स्तंभ) के लिए मार्कोव श्रृंखला का एक रन? या ...?
कार्डिनल

यह राज्य अनुक्रमों (उनमें से 20) के 100 नमूने हैं।
B_Miner

क्या आप संभावना अनुमानों की तलाश कर रहे हैं या सिर्फ मायने रखता है?
कार्डिनल

संभाव्यता का अनुमान। देखे गए अनुक्रमों का उपयोग करके, संक्रमण संभावना मैट्रिक्स (इस उदाहरण में 4x4) क्या है।
B_Miner

जवाबों:


33

मुझे तुरंत एक "बिल्ट-इन" फ़ंक्शन (जैसे, baseया समान) के बारे में पता नहीं है , लेकिन हम कोड की एक जोड़ी में यह बहुत आसानी से और कुशलता से कर सकते हैं।

यहाँ एक समारोह है कि एक लेता है मैट्रिक्स एक इनपुट के रूप (नहीं एक डेटा फ्रेम) और या तो संक्रमण मायने रखता है (पैदा करता है prob=FALSE) या, डिफ़ॉल्ट रूप से ( prob=TRUE), अनुमानित संक्रमण संभावनाओं।

# Function to calculate first-order Markov transition matrix.
# Each *row* corresponds to a single run of the Markov chain
trans.matrix <- function(X, prob=T)
{
    tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
    if(prob) tt <- tt / rowSums(tt)
    tt
}

यदि आपको इसे एक डेटा फ़्रेम पर कॉल करने की आवश्यकता है तो आप हमेशा कर सकते हैं

trans.matrix(as.matrix(dat))

यदि आप किसी तृतीय-पक्ष पैकेज की तलाश कर रहे हैं, तो Rseek या R खोज साइट अतिरिक्त संसाधन प्रदान कर सकती है।


1
+1 कई आर पैकेज भी हैं, जिनमें शामिल हैं HMMऔर RHMMजो मददगार हो सकते हैं।
वेन

@Wayne: (+1) मैंने पिछले समय में उपलब्ध विभिन्न HMM पैकेजों Rको बहुत बारीक पाया है , खासकर जब यह फिटिंग की बात आती है और मुझे कभी ऐसा नहीं मिला जो मुझे वास्तव में पसंद या विश्वसनीय लगा हो। शायद अब स्थिति बेहतर है। मैं कल्पना करूंगा कि उन्हें यह अधिकार मिलेगा, हालांकि। यदि आप इस तरह के समाधान के बारे में जानते हैं, तो कृपया इसे उत्तर के रूप में प्रस्तुत करें; मुझे वोट देने में खुशी होगी!
कार्डिनल

1
मैंने कोशिश की, लेकिन कोई सफलता नहीं मिली। इस समस्या में छिपे हुए राज्य शामिल नहीं हैं और जिन पैकेजों को मैंने पाया है उनमें कोई उपयोगिता कार्य नहीं हैं जो पूर्ण विकसित एचएमएम से कम कुछ भी करेंगे। (एक साइड नोट के रूप में, datओपी एक उदाहरण के रूप में जो डेटा फ्रेम देता है, उसमें डेटा के कॉलम होते हैं, और क्या वे प्रति कॉलम एक ट्रांज़िशन मैट्रिक्स चाहते हैं, या एक समग्र ट्रांस्फ़ॉर्म मैट्रिक्स या हम मैट्रिक्स को वेक्टर में बदल सकते हैं?)
वेन

@Wayne: (+1) आप एक अच्छी बात उठाते हैं। मैंने मान लिया है कि प्रत्येक पंक्ति मार्कोव श्रृंखला का एक स्वतंत्र रन है और इसलिए हम संक्रमण संभावना अनुमानों की मांग कर रहे हैं ताकि ये श्रृंखलाएं समानांतर में चल सकें। लेकिन, भले ही यह एक श्रृंखला थी, जो कहते हैं, एक पंक्ति के एक छोर से नीचे की ओर अगले की शुरुआत तक लिपटे हुए हैं, मार्कोव संरचना के कारण अनुमान अभी भी काफी करीब होंगे।
कार्डिनल

1
@B_Miner: हां, यह तब तक होता है, जब तक आप यथोचित रूप से मान सकते हैं कि प्रत्येक ग्राहक स्वतंत्र रूप से अन्य सभी के साथ व्यवहार करता है। उपयोगकर्ता के व्यवहार का विश्लेषण करने में ऐसे मॉडल और कई एक्सटेंशन अपेक्षाकृत सामान्य हैं, उदाहरण के लिए, किसी वेबसाइट पर बार-बार आने पर, आदि
कार्डिनल

25

मैंने अभी markovchainS4 प्रोग्रामिंग शैली के आधार पर , एक नया R पैकेज अपलोड किया है । एस 4 मार्कोवचिन वस्तुओं को संभालने के लिए विभिन्न तरीकों के साथ इसमें राज्यों के अनुक्रम से मार्कोव श्रृंखला को फिट करने के लिए एक फ़ंक्शन होता है। अच्छी तरह से देखिए:

library(markovchain) 
sequence <- c("a", "b", "a", "a", "a", "a", "b", "a", "b", "a", 
              "b", "a", "a", "b", "b", "b", "a")
mcFit <- markovchainFit(data=sequence)

यह मदद कर सकता है।


एक बहुत अच्छा पैकेज! क्या आप उच्च-क्रम मार्कोव चेन का समर्थन करेंगे?
वेन

मुझे उच्च क्रम मार्कोव श्रृंखला के लिए कहा गया है और एक अन्य व्यक्ति कुछ कोड लिख रहा है। यदि आप कोड डेवलपिंग में पार्टिसिपेट करना चाहते हैं तो मंटेनर एड्रेस पर एक ईमेल भेजें और हम चर्चा कर सकते हैं ...
जियोर्जियो स्पेडेटा

नमस्ते, मार्कोवचिनफ़िट और ऊपर पोस्ट किए गए फ़ंक्शन के बीच क्या अंतर है? क्या वे समान परिणाम देते हैं? धन्यवाद
aaaaa

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