การประมาณความน่าจะเป็นของการเปลี่ยนแปลงมาร์คอฟจากข้อมูลลำดับ


16

ฉันมีชุดเต็มของลำดับ (การสังเกต 432 จะแม่นยำ) ของ 4 รัฐAD : เช่น

Y=(ACDDBACBAACABCADABA)

แก้ไข : ลำดับการสังเกตมีความยาวไม่เท่ากัน! สิ่งนี้เปลี่ยนแปลงอะไรหรือไม่?

มีวิธีคำนวณเมทริกซ์การเปลี่ยนแปลง

Pij(Yt=j|Yt1=i)
ใน Matlab หรือ R หรือคล้ายกันหรือไม่? ฉันคิดว่าแพ็คเกจ HMM อาจช่วยได้ ความคิดใด ๆ

เช่นการประมาณความน่าจะเป็นของห่วงโซ่มาร์คอฟ


3
คุณมีรัฐ: S = { 1 : = , 2 : = B , 3 : = C , 4 : = D } ให้n ฉันเจเป็นจำนวนครั้งที่ห่วงโซ่ที่ทำการเปลี่ยนแปลงจากรัฐฉันไปยังรัฐเจสำหรับฉันเจ, = 1 , 2 , 3 , 4 คำนวณnจากตัวอย่างของคุณและประเมินเมทริกซ์การเปลี่ยนแปลง4S={1:=A,2:=B,3:=C,4:=D}nijijij,=1,2,3,4nijโดยโอกาสสูงสุดโดยใช้ประมาณการ PฉันJ = n ฉันJ / Σ 4 J = 1 n ฉันเจ (pij)p^ij=nij/j=14nij
Zen

หมายเหตุเหล่านี้ได้รับการประมาณ MLE: stat.cmu.edu/~cshalizi/462/lectures/06/markov-mle.pdf
Zen

2
คำถามที่คล้ายกัน: stats.stackexchange.com/questions/26722/ …
B_Miner

@B_Miner คุณสามารถเขียนรหัสของคุณในรูปแบบหลอกรหัสสำหรับฉันได้อย่างไร หรืออธิบายมันในแง่ของการวาง ... แต่ฉันเห็นมันทำงานในคอนโซล R ของฉัน
HCAI

ฉันมีคำถาม: ฉันเข้าใจการใช้งานของคุณและมันก็ดีสำหรับฉัน แต่ฉันสงสัยว่าทำไมฉันไม่สามารถใช้ฟังก์ชัน hmmestimate Matlab เพื่อคำนวณเมทริกซ์ T ได้? บางอย่างเช่น: states = [1,2,3,4] [T, E] = hmmestimate (x, state); ที่ T คือเมทริกซ์การเปลี่ยนแปลงที่ฉันสนใจฉันยังใหม่กับ Markov chains และ HMM ดังนั้นฉันจึงต้องการเข้าใจความแตกต่างระหว่างการใช้งานทั้งสอง (ถ้ามี)
ใด ๆ ที่

คำตอบ:


18

กรุณาตรวจสอบความคิดเห็นด้านบน นี่คือการดำเนินการอย่างรวดเร็วใน R.

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

ดูดี! ฉันไม่แน่ใจว่าบรรทัดที่ 3 ทำอะไรในโค้ดของคุณ (ส่วนใหญ่เป็นเพราะฉันคุ้นเคยกับ Matlab) โอกาสใดที่คุณสามารถเขียนมันใน matlab หรือหลอกรหัส? ฉันจะต้องรับผิดชอบมาก
HCAI

2
บรรทัดที่สามไม่นี้: ค่าห่วงโซ่ที่มี n สำหรับT = 1 , ... , n - 1 , เพิ่มP x , t , x T + 1 x1,,xnt=1,,n1pxt,xt+1
Zen

บรรทัดที่สี่ normalizes แต่ละบรรทัดของเมทริกซ์ ) (pij)
Zen

forxxixj

1
No, x is just one row. Don't concatenate because you will introduce "false" transitions: last state of one line first state of the next line. You have to change the code to loop through the lines of your matrix and count the transitions. At the end, normalize each line of the transition matrix.
Zen

9

Here is my implementation in R

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 can you comment on how to deal with sequences of unequal lengths (I cannot concatenate) please in your package?
HCAI

@HCAI, please see the current vignette page 35-36
Giorgio Spedicato

@GiorgioSpedicato thank you for the reference cran.r-project.org/web/packages/markovchain/vignettes/…. I still have n transition matrices, one for each sequence. What I’m after is one general one that takes into account all the sequence observations. Is there something I’m missing?
HCAI

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.