簡體   English   中英

R馬爾可夫鏈的可視化| 手動更改轉換矩陣中的值

[英]R Visualization of markov chains | change values in transition matrix by hand

我主要是在R中運行markov模型,以獲得markov圖。 在此處輸入圖片說明

我想從概率矩陣中排除所有概率小於0.4的行(在這種情況下,應該刪除從開始到c2的行。)。 我通過將這些值設置為0進行了嘗試。但是更改轉換矩陣中的值會導致錯誤:請參見以下內容:我用“ ##################標記了間隔位置######“(第76行)

# creating a data sample
df1 <- data.frame(path = c('c1 > c2 > c3', 'c1', 'c2 > c3'), conv = c(1, 0, 0), conv_null = c(0, 1, 1)) # original
df1

# calculating the models
mod1 <- markov_model(df1,
                     var_path = 'path',
                     var_conv = 'conv',
                     var_null = 'conv_null',
                     out_more = TRUE)          
mod1                 


# extracting the results of attribution:
df_res1 <- mod1$result
df_res1

# extracting a transition matrix: 
df_trans1 <- mod1$transition_matrix                
df_trans1

df_trans1 <- dcast(df_trans1, channel_from ~ channel_to, value.var = 'transition_probability')
df_trans1



### plotting the Markov graph ###
df_trans <- mod1$transition_matrix
df_trans

# adding dummies in order to plot the graph
df_dummy <- data.frame(channel_from = c('(start)', '(conversion)', '(null)'),
                       channel_to = c('(start)', '(conversion)', '(null)'),
                       transition_probability = c(
                         0,
                         1,
                         1
                         )) # die Übergangswarhscheinlichkeit von zu sich selber eintragen
df_dummy

df_trans <- rbind(df_trans, df_dummy)
df_trans

# ordering channels
df_trans$channel_from <- factor(df_trans$channel_from,
                                levels = c('(start)', '(conversion)', '(null)',
                                           'c1',
                                           'c2',
                                           'c3'
                                           ))

df_trans$channel_from

df_trans$channel_to <- factor(df_trans$channel_to,
                              levels = c('(start)', '(conversion)', '(null)', 
                                         'c1',
                                         'c2',
                                         'c3'
                              ))

df_trans$channel_to

df_trans <- dcast(df_trans, channel_from ~ channel_to, value.var = 'transition_probability')
df_trans


# creating the markovchain object
trans_matrix <- matrix(data = as.matrix(df_trans[, -1]),
                       nrow = nrow(df_trans[, -1]), ncol = ncol(df_trans[, -1]),
                       dimnames = list(c(as.character(df_trans[, 1])), c(colnames(df_trans[, -1]))))

trans_matrix[is.na(trans_matrix)] <- 0
trans_matrix


####################### I want to delete transition-propabilities < 0.4 from markov graph by setting these values to 0.
trans_matrix[trans_matrix < 0.4] <- 0 # 


####################### After doing this, the following querie gives me an error: Error! Row sums not equal to one check positions: 1
trans_matrix1 <- new("markovchain", transitionMatrix = trans_matrix)  
trans_matrix1

# plotting the graph
plot(trans_matrix1, edge.arrow.size = 0.5, size = 100, cex.main = 0.11, cex.lab = 0.5, cex.axis = 0.5)

如果將某些正項設置為0,則過渡矩陣不再是過渡矩陣,因為行總和必須等於1。 因此new("markovchain", ....)不適用於這種矩陣。

但是,如果只需要繪圖,則可以通過修改slot transitionMatrix

library(markovchain)
tm <- rbind(c(0.3, 0.5, 0.2), c(0.1, 0.1, 0.8), c(0.6, 0.2, 0.2))
states <- c("a", "b", "c")
mc <- new("markovchain", states=states, transitionMatrix=tm, name="X")

tm[tm<0.4] <- 0
dimnames(tm) <- list(states, states)
mc@transitionMatrix <- tm

plot(mc)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM