过渡概率表示

时间:2018-12-24 13:49:26

标签: r dataframe matrix ggplot2

我想确定活动随时间的变化。下面是我用来计算活动之间的转移概率的矩阵的一个示例(从act1_1到act1_16)。

头(活动)将返回     小声:6 x 145

  serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9  act1_10
     1 1.22e7 110    110    110    110    110    110    110    110    110    110    
     2 1.43e7 110    110    110    110    110    110    110    110    110    110    
     3 2.00e7 110    110    110    110    110    110    110    110    110    110    
     4 2.71e7 110    110    110    110    110    110    110    110    110    110    
     5 1.61e7 110    110    110    110    110    110    110    110    110    110    
     6 1.60e7 110    110    110    110    110    110    110    110    110    110    

# ... with 134 more variables: act1_11 <dbl+lbl>, act1_12 <dbl+lbl>,

“活动”矩阵的维数为ncol = 144和nrows = 16533; act1_1 ... ac1_144是时间步长,并且以10分钟为间隔表示时间(例如act1_1 = 4.10am; act1_2 = 4.20am ..)。时间从凌晨4点(act1_1)开始,结束于act1_144(4am)。这些列填充了不同的活动,例如110 =睡眠,111 =正在观看电视,123 =饮食等。

在我用于calculate the transition probabilities的功能下面:

transition.matrix <- function(X, prob=T)
{
    tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
    if(prob) t <- tt / rowSums(tt)
    tt
}
I call the function as:

transitionfunction <- trans.matrix(as.matrix(Activities))

使用此函数,我设法计算了活动之间的转移概率(活动矩阵)。下面是这种矩阵的示例:

Transition probability matrix

使用transitionfunction I would like to plot on x axis time (10 minutes intervals) and y axis probabilities

我该怎么做?如何确定活动之间最频繁的转换?

这是我想要的情节:

enter image description here

1 个答案:

答案 0 :(得分:0)

给定一个转换矩阵m,您可以找到最频繁的n转换,如下所示:

n <- 3 # or whatever
sorted <- sort(m, decreasing = TRUE)
which(m >= sorted[n], arr.ind = TRUE)

联系可能意味着您将获得超过n个结果。

鉴于您的数据,您可能要忽略对角线。您可以使用

diag(m) <- 0

,然后使用上面的代码。

一个问题是您没有每次都具有单独的转换矩阵。如果以可用形式发布一些数据,则可能会获得帮助。 (并非所有16533行,仅足以使其有趣。)