过渡状态图 R

Transition State Diagram R

我的数据看起来像这样:

dput(sequence_data) 的输出;

    structure(list(Obs = 1:13, Seq.1 = structure(c(1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("a", "b", "c"
), class = "factor"), Seq.2 = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("c", "d"), class = "factor"), 
    Seq.3 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L), .Label = c("", "d", "e"), class = "factor"), 
    Seq.4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    1L, 1L, 2L), .Label = c("", "f"), class = "factor")), .Names = c("Obs", 
"Seq.1", "Seq.2", "Seq.3", "Seq.4"), class = "data.frame", row.names = c(NA, 
-13L))

我正在尝试获取过渡状态图。这是代码:

transitions <- table(sequence_data$Seq.1,sequence_data$Seq.2) %>%
getRefClass("Transition")$new(label=c("1st Iteration", "2nd Iteration"))
transitions$box_width = 0.25;
transitions$box_label_cex = 0.7;
transitions$arrow_type = "simple";
transitions$arrow_rez = 300;
table(sequence_data$Seq.2,sequence_data$Seq.3) %>% transitions$addTransitions(label = '3rd Iteration')
transitions$render()

这是输出:

能否从图表中删除空值,使其看起来更清晰?我尝试删除,但 table 语句需要值的长度相同。

我正在为图表使用 GMISC 包 (library(Gmisc))。

谢谢

这可能有点老套,但可以帮助您。基本上你手动设置转换 (transitions$transitions) 到 0.

transitions$transitions[[2]][1,1] = 0
transitions$transitions[[2]][2,1] = 0
transitions$render()

也许这个循环可以自动将所有值更改为0(虽然我还没有检查大数据)

for (level_n in 1:length(transitions$transitions)){
    x =  transitions$transitions[[level_n]]
    for (cols in 1:ncol(transitions$transitions[[level_n]])){            
        if (dimnames(x)[[2]][cols] == ""){
            transitions$transitions[[level_n]][,cols] = 0
        }
    }
}

您可以使用 lapply 将列名称为空字符串的每一列的值设置为零。那么当你 运行 transition$render() 时,空的转换就会消失。一开始我想,这可以简单地按如下方式完成:

# Set transitions table columns with a blank name to zeros
transitions$transitions = lapply(transitions$transitions, function(tab) {
  tab[ , which(colnames(tab)=="")] = 0
  tab
})

但是,lapply 从输出列表中删除了 "transitions" 属性,导致错误(如果有人知道解决这个问题的方法,请告诉我)。因此,我将更新后的列表保存在名为 tmp 的临时对象中,恢复 "transitions" 属性,然后重置 transitions$transitions:

的值
# Set transitions table columns with a blank name to zeros
tmp = lapply(transitions$transitions, function(tab) {
  tab[ , which(colnames(tab)=="")] = 0
  tab
})

# Restore "transition" attribute
attributes(tmp)$transitions = TRUE

# Set transitions to the new values we just created
transitions$transitions = tmp

当我处理这个问题时,我想知道空白过渡值应该发生什么。上图似乎具有误导性,因为它似乎表明第二次迭代的所有 c 值都变成了 d,而第二次迭代的所有 d 值都变成了 e.但实际上,13 个值中有 5 个进入 ""(即空字符串)。他们就这样消失了吗?如果是这样,第三个迭代条的总高度不应该是第一个和第二个迭代条的高度的 7/13 吗?或者尝试这样的事情,只是为了表明一些价值观已经转变为遗忘:

transitions$fill_clr[[3]] = c("white", transitions$fill_clr[[3]][-1])
transitions$render()

或者,空白实际上是否代表从第 2 次到第 3 次转换保持不变的值?如果是这种情况,那么用上一个转换中的相应值填充空白值可能会更好。这种情况的图表如下所示:

library(zoo)

# Convert empty values to NA
sequence_data[sequence_data==""] = NA

# Fill NA values with last value carried forward
sequence_data=as.data.frame(t(apply(sequence_data, 1, na.locf)))

transitions <- table(sequence_data$Seq.1, sequence_data$Seq.2) %>%
getRefClass("Transition")$new(label=c("1st Iteration", "2nd Iteration"))
transitions$box_width = 0.25;
transitions$box_label_cex = 1;
transitions$box_cex = 2;
transitions$arrow_type = "simple";
transitions$arrow_rez = 300;
table(sequence_data$Seq.2,sequence_data$Seq.3) %>% transitions$addTransitions(label = '3rd Iteration')
transitions$render()