R 一天中每分钟一项活动到另一项活动的转移概率,如从工作到旅行
下面是我用来计算活动之间转移概率的矩阵示例(从act1_1到act1_16) 主管(活动)将返回 a tibble:6x145R 一天中每分钟一项活动到另一项活动的转移概率,如从工作到旅行,r,dataframe,R,Dataframe,下面是我用来计算活动之间转移概率的矩阵示例(从act1_1到act1_16) 主管(活动)将返回 a tibble:6x145 serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9 act1_10 1 110 110 110 110 110 110 110 110 110 110 2 110 110 110
serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9 act1_10
1 110 110 110 110 110 110 110 110 110 110
2 110 110 110 110 110 110 110 110 110 110
3 110 110 110 110 110 110 110 110 110 110
4 110 110 110 110 110 110 110 110 110 110
5 110 110 110 110 110 110 110 110 110 110
6 110 110 110 110 110 110 110 110 110 110
# ... with 134 more variables: act1_11 <dbl+lbl>, act1_12 <dbl+lbl>,
系列行动1行动1行动2行动1行动3行动1行动4行动5行动1行动6行动7行动1行动8行动1行动9行动10
1 110 110 110 110 110 110 110 110 110 110
2 110 110 110 110 110 110 110 110 110 110
3 110 110 110 110 110 110 110 110 110 110
4 110 110 110 110 110 110 110 110 110 110
5 110 110 110 110 110 110 110 110 110 110
6 110 110 110 110 110 110 110 110 110 110
# ... 还有134个变量:act1_11,act1_12,
“活动”矩阵的维度为ncol=144,nrows=16533;act1_1…ac1_144是时间步长,时间以10分钟的间隔表示(例如act1_1=4.10am;act1_2=4.20am..)。时间从凌晨4点(act1_1)开始,到act1_144(凌晨4点)结束。栏目中充满了不同的活动,如110=睡觉,111=看电视,123=吃饭等
下面是我用来:
transition.matrix使用apply
和rep(…,每个=10)
假设您的数据如您所说,则以下命令将数据帧从一个包含145列的帧(一个24小时周期内串行+144个10分钟间隔)扩展为一个包含1441列的帧(一个24小时周期内串行+1440个1分钟间隔)
活动1我认为函数的最后一行应该返回t
@Edward true这是一个错误,代码应该是ttAh-yes。这更有意义答案更新。我不太理解“平行活动”或“二级、三级…”。你是说在给定的时间间隔内有两个或两个以上的活动吗?喜欢同时看电视和睡觉吗?不可能!马尔可夫理论说,在任何给定的时间,你只能处于一种状态。如果您确实想这样做,那么创建/定义另一个活动:110.111(“睡眠+看电视”)。
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))
Activities1 <- data.frame(Activities[,1],
t(apply(Activities[,-1], 1, FUN=rep, each=10)))
names(Activities1) <- c("serial", paste("act1", seq_len(1440), sep="_"))
dim(Activities1)
#[1] 16533 1441
transition.matrix <- function(X, prob=T)
{
tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
if(prob) tt <- tt / rowSums(tt)
tt
}
transitionfunction <- transition.matrix(as.matrix(Activities[,-1]))
transitionfunction
# 110 111 123
# 110 0.334 0.332 0.333
# 111 0.334 0.333 0.332
# 123 0.332 0.333 0.335
transitionfunction <- transition.matrix(as.matrix(Activities1[,-1]))
transitionfunction
# 110 111 123
# 110 0.9338 0.0331 0.0331
# 111 0.0332 0.9337 0.0331
# 123 0.0331 0.0331 0.9338
n <- 16533
ncol <- 144
set.seed(404)
Activities <- data.frame(serial=1:n,
matrix(sample(c(110,111,123), size=n*ncol, replace=TRUE), ncol=144))
dim(Activities)
names(Activities) <- c("serial", paste("act1", 1:ncol, sep="_"))
Activities[1:6, 1:11]
serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9 act1_10
1 1 111 123 110 110 111 111 111 110 110 110
2 2 123 111 123 110 111 123 123 110 111 110
3 3 111 111 111 111 123 111 123 123 110 123
4 4 123 111 110 111 111 110 123 110 111 111
5 5 110 123 110 111 110 110 111 110 123 111
6 6 111 111 111 123 123 110 123 111 110 123