我想读取一堆因子数据,并据此创建一个过渡矩阵,以便很好地可视化。我找到了一个非常甜美的包装,叫做“ heemod”,它与“ diagram”一起做得不错。
对于我的第一个快捷方法,运行了一段Python代码以获取矩阵,然后使用该R代码段绘制图形。请注意,转换概率来自该未公开且不太重要的Python代码,但您也可以假设我在纸上进行了计算。
library('heemod')
library('diagram')
mat_dim <- define_transition(
state_names = c('State_A', 'State_B', 'State_C'),
.18, .73, .09,
.22, .0, .78,
.58, .08, .33);
plot(mat_dim)
但是,我想将所有内容集成到R中,并直接从序列数据中生成R中的转换矩阵和图。
这是我到目前为止所拥有的:
library(markovchain)
library('heemod')
library('diagram')
# the data --- this is normally read from a file
data = c(1,2,1,1,1,2,3,1,3,1,2,3,1,2,1,2,3,3,3,1,2,3,2,3,1,2,3,3,1,2,3,3,1)
fdata = factor(data)
rdata = factor(data,labels=c("State_A","State_B","State_C"))
# create transition matrix
dimMatrix = createSequenceMatrix(rdata, toRowProbs = TRUE)
dimMatrix
问题:如何传输dimMatrix,以便define_transition可以处理它?</ p>
mat_dim <- define_transition( ??? );
plot(mat_dim)
有什么想法吗?有更好/更简便的解决方案吗?
答案 0 :(得分:2)
define_transition
的输入似乎很尴尬。也许这是由于我对heemod
软件包的经验不足,但似乎输入过渡的唯一方法是逐个元素。
这是一种解决方法
library(heemod)
library(diagram)
首先将转换矩阵转换为列表。我使用四舍五入的数字是可选的。这对应于...
define_transition
变量
lis <- as.list(round(dimMatrix, 3))
现在将所需的所有其他命名参数添加到列表中:
lis$state_names = colnames(dimMatrix)
现在使用define_transition
将这些参数传递给do.call
:
plot(do.call(define_transition, lis))
更新:对评论中的问题:
lis <- as.list(t(round(dimMatrix, 3)))
lis$state_names = colnames(dimMatrix)
plot(do.call(define_transition, lis))
do.call
最明显的方法(在这里不起作用)是:
define_transition(dimMatrix, state_names = colnames(dimMatrix))
但是这会引发错误,因为define_transition
希望将每个转换作为参数而不是矩阵或列表来提供。为了避免键入:
define_transition(0.182, 0.222,..., state_names = colnames(dimMatrix))
一个人可以将所有参数放在列表中,然后像我一样在该列表上调用do.call
。