我想确定活动随时间的变化。下面是我用来计算活动之间的转移概率的矩阵的一个示例(从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))
使用此函数,我设法计算了活动之间的转移概率(活动矩阵)。下面是这种矩阵的示例:
使用transitionfunction
I would like to plot on x axis time (10 minutes intervals) and y axis probabilities。
我该怎么做?如何确定活动之间最频繁的转换?
这是我想要的情节:
答案 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行,仅足以使其有趣。)