0 like 0 dislike

Có ai biết tính ma trận xác suất chuyển trong R không, giúp mình với.
Trong một file dữ liệu:

abandons
abase
abased
abasement
abash
abashed
abate
abated
bodices
bodied
bodies
bodiless
bodily
boding
bodkin
body
cytotoxic
czar
czars
czech
czechs
dab
dabbed
dabbing
dabble
dabbled
...

làm sao tính được số lần chuyển từ a->a, a->b, a->c,... là bao nhiêu lần?

in R by
edited by
0 0

Bạn giải thích thêm về xác suất chuyển, cụ thể công thức xác suất đó tử số là gì và mẫu số là gì?

0 0

Giả sử (,A, P ) là một không gian xác suất $A \in A, P(A) > 0$. Xác suất của biến cố B được tính khi biết biến cố A nào đó đã xảy ra được gọi là xác suất có điều kiện và được ký hiệu là P(B|A). Ký hiệu P(B|A) thường được đọc là “xác suất để B xảy ra với điều kiện A đã xảy ra” hoặc đơn giản là “xác suất của B với điều kiện A”. Khi đó P(B|A) được xác định như sau:

$P(B|A) = P(A ∩ B)/P(A)$

Xác suất một bước chuyển:
Xác suất quá trình chuyển từ trạng thái i sang trạng thái j sau một bước chuyển

$p{ij} = P(X{n+i} = j|X_n = i)$

Ma trận xác suất một bước chuyển:
Ma trận chứa các xác suất chuyển $p_{ij}$

$$P =
p01 p02 · · · p0k
p11 p12 · · · p1k ...
...
...
pk1 pk2 · · · pkk$$

được gọi là ma trận xác suất một bước chuyển của quá trình.

0 0

Dù không đọc được hoàn thiện nội dung của bạn nhưng mình hiểu bạn đang nói về Markov switching.

Trang này có hỗ trợ trực tiếp ngôn ngữ LaTeX để có thể trình bày công thức dễ hơn, v.d. giải thích của bạn được chỉnh sửa một chút, bạn có thể chỉnh sửa những chỗ còn lại. Hoặc nếu không quen bạn có thể gõ từ trang Codecogs và dán lại code html vào bài.

1 Answer

0 like 0 dislike

Có thể làm như sau,

Tạo ma trận các hoán chuyển có thể có

allSwitch <- sapply(letters, function(x) paste(x,letters, sep = ""))

Phần đầu kết quả có dạng như sau

> head(allSwitch)
     a    b    c    d    e    f    g    h    i    j    k    l    m    n    o   
[1,] "aa" "ba" "ca" "da" "ea" "fa" "ga" "ha" "ia" "ja" "ka" "la" "ma" "na" "oa"
[2,] "ab" "bb" "cb" "db" "eb" "fb" "gb" "hb" "ib" "jb" "kb" "lb" "mb" "nb" "ob"
[3,] "ac" "bc" "cc" "dc" "ec" "fc" "gc" "hc" "ic" "jc" "kc" "lc" "mc" "nc" "oc"
[4,] "ad" "bd" "cd" "dd" "ed" "fd" "gd" "hd" "id" "jd" "kd" "ld" "md" "nd" "od"
[5,] "ae" "be" "ce" "de" "ee" "fe" "ge" "he" "ie" "je" "ke" "le" "me" "ne" "oe"
[6,] "af" "bf" "cf" "df" "ef" "ff" "gf" "hf" "if" "jf" "kf" "lf" "mf" "nf" "of"
     p    q    r    s    t    u    v    w    x    y    z   
[1,] "pa" "qa" "ra" "sa" "ta" "ua" "va" "wa" "xa" "ya" "za"
[2,] "pb" "qb" "rb" "sb" "tb" "ub" "vb" "wb" "xb" "yb" "zb"
[3,] "pc" "qc" "rc" "sc" "tc" "uc" "vc" "wc" "xc" "yc" "zc"
[4,] "pd" "qd" "rd" "sd" "td" "ud" "vd" "wd" "xd" "yd" "zd"
[5,] "pe" "qe" "re" "se" "te" "ue" "ve" "we" "xe" "ye" "ze"
[6,] "pf" "qf" "rf" "sf" "tf" "uf" "vf" "wf" "xf" "yf" "zf"

Tiếp tục tạo vector các chữ trên

foo <- c('abandons', 'abase', 'abased', 'abasement', 'abash', 'abashed', 'abate', 'abated', 'bodices', 'bodied', 'bodies', 'bodiless', 'bodily', 'boding', 'bodkin', 'body', 'cytotoxic', 'czar', 'czars', 'czech', 'czechs', 'dab', 'dabbed', 'dabbing', 'dabble', 'dabbled')

Tìm trong các dãy foo các hoán chuyển, đếm và trả về số lần tương ứng, sau đó thì công việc chỉ là xếp lại số liệu theo ý muốn,

saved <- NULL
for (i in allSwitch){
  count <- length(which(grepl(i,foo)))
  saved <- rbind(saved,cbind(i,count))
}

Kết quả

> head(saved)
     i    count
[1,] "aa" "0"  
[2,] "ab" "13" 
[3,] "ac" "0"  
[4,] "ad" "0"  
[5,] "ae" "0"  
[6,] "af" "0"  

Toàn bộ các hoán chuyển tìm được

> saved[saved[,2]!=0,]
      i    count
 [1,] "ab" "13" 
 [2,] "an" "1"  
 [3,] "ar" "2"  
 [4,] "as" "5"  
 [5,] "at" "2"  
 [6,] "ba" "8"  
 [7,] "bb" "4"  
 [8,] "be" "1"  
 [9,] "bi" "1"  
[10,] "bl" "2"  
[11,] "bo" "8"  
[12,] "ce" "1"  
[13,] "ch" "2"  
[14,] "cy" "1"  
[15,] "cz" "4"  
[16,] "da" "5"  
[17,] "di" "6"  
[18,] "dk" "1"  
[19,] "do" "1"  
[20,] "dy" "1"  
[21,] "ec" "2"  
[22,] "ed" "6"  
[23,] "em" "1"  
[24,] "en" "1"  
[25,] "es" "3"  
[26,] "he" "1"  
[27,] "hs" "1"  
[28,] "ic" "2"  
[29,] "ie" "2"  
[30,] "il" "2"  
[31,] "in" "3"  
[32,] "ki" "1"  
[33,] "le" "3"  
[34,] "ly" "1"  
[35,] "me" "1"  
[36,] "nd" "1"  
[37,] "ng" "2"  
[38,] "ns" "1"  
[39,] "nt" "1"  
[40,] "od" "8"  
[41,] "on" "1"  
[42,] "ot" "1"  
[43,] "ox" "1"  
[44,] "rs" "1"  
[45,] "se" "3"  
[46,] "sh" "2"  
[47,] "ss" "1"  
[48,] "te" "2"  
[49,] "to" "1"  
[50,] "xi" "1"  
[51,] "yt" "1"  
[52,] "za" "2"  
[53,] "ze" "2"  
by (100 points)
0 0

cảm ơn bạn, nhưng file dữ liệu của mình nhiều lắm làm sao gõ hết vào foo <- c('abandons', 'abase', 'abased', ..................) được, có cách nào khác không bạn??

Từ kết quả tính toán trên bạn có thể tìm được ma trận xác suất phát xạ (emission probabilities) không, nếu biết bạn giúp mình với nhe, mình cảm ơn nhiều lắm.

0 0

Nếu bạn thực sự làm việc trên bảng từ tiếng Anh như trên, bạn có thể kiếm nguồn đâu đó trên mạng và copy thôi, vì đơn giản đó là dữ liệu để phân tích thì mình phải thu thập. Để biên tập nhanh bạn có thể học về Sublime Text, v.d. foo bạn cung cấp ở trên mình chuyển về dạng vector để thao tác chỉ trong ... "nháy mắt".

Bạn hãy đặt câu hỏi riêng về ma trận phát xa, mình không biết khái niệm này nhưng nếu giải thích cách tính thì sẽ tính được.

0 0

cho mình hỏi làm sao chuyển về dạng vecto được?? chỉ cần copy vào foo<-c( ) thôi phải k?, tại mình copy dữ liệu vào mà báo lỗi.

0 0

Trong R, dùng c để combine các object thành vector, do là chữ cái nên cần bỏ trong ngoặc kép và cách nhau dấu phẩy. Bạn theo dõi loạt bài này để biết thêm.

0 0

ý mình hỏi là flie dữ liệu mình nhiều lắm, copy vào và bỏ ngoặc kép từng từ sao được, làm sao để chuyển về dạng vecto như foo<-c(.........) của bạn nhanh chóng được?

0 0

:) do vậy nên ở phía trên có nhắc đến Sublime Text (hoặc Emacs, Vim editor) với chức năng multicursors bạn có thể thao tác, v.d. chọn và thêm ngoặc kép cùng lúc cho tất cả các từ.

Ở đây là cách thủ công vì không biết dữ kiện của bạn ở dạng như thế nào, nếu có một file riêng với các từ cách nhau bởi khoảng trắng, hay dấu phẩy,... thì bạn dùng read.csv() trong R để đọc file vào và thao tác.

0 0

ở trên mình nói mình có 1 file dữ liệu rồi mà,

>setwd("D/file/dulieu")
> data<-as.matrix(read.table("data.txt"))
> allSwitch <- sapply(letters, function(x) paste(x,letters, sep = "data"))
> head(allSwitch)
saved <- NULL
> for (i in allSwitch){
+ count <- length(which(grepl(i,**data**)))saved <- rbind(saved,cbind(i,count))}

tới đây lại báo lỗi:

Error: unexpected symbol

mình để data vào lệnh which vậy có ổn ko? hay phải thêm 1 biến trung gian khác vd như foo<-c(.........) rồi thay chỗ data đó = foo.

0 0

Bạn copy kết quả lệnh

head(data)

lên đây xem, vì bạn đọc vào dạng matrix, thêm nữa trong for, mỗi lệnh phải xuống hàng (chỗ saved). Cái này khá cơ bản nên rảnh bạn đọc link trước và làm theo cho quen.

0 0

HELP ME, sao làm y như mấy lệnh bạn hướng dẫn mà kết quả chuyển đổi là 0 vậy?
tới lệnh head(saved) =>count là 0...là sao??

0 0

Xem lại bình luận ở trên.

Related questions

0 like 0 dislike
0 answers
asked Sep 1, 2014 in R by Dương Thùy | 10.3k views
0 like 0 dislike
1 answer
asked Apr 9, 2015 in R by Thanh Thùy | 287 views
0 like 0 dislike
0 answers
asked Apr 8, 2015 in R by Nguyễn Minh | 179 views
0 like 0 dislike
1 answer
asked Aug 18, 2014 in R by anonymous | 500 views
0 like 0 dislike
1 answer