r - 绘制时间步长?
问题描述
我想绘制转换概率与时间的关系。
The dimension of the ["Activities"][1] matrix is ncol=144 and nrows=16533; act1_1...ac1_144 are time-steps, and time is represented in 10 minutes intervals (e.g. act1_1 = 4.10am; act1_2=4.20am..). Time start from 4am (act1_1) and ends at act1_144(4am).The columns are filled in with different activities, such 2=sleep, 48=watching Tv, 5=eating, etc.
使用这个函数,我设法计算了活动之间的转移概率(活动矩阵)。
我想绘制 x 轴时间(10 分钟间隔)和 y 轴概率,例如 2 跟随 3。
我怎样才能做到这一点?
谢谢
这是我想要的情节
解决方案
要绘制转换概率随时间的变化,您(根据定义)需要多次观察从一个动作a
到另一个动作的转换b
。
一旦你有多个交易概率矩阵,绘制它们随时间的发展实际上是非常简单的。在下面的示例中,大部分代码实际上都专门用于(重新)创建您的数据和不同的转移概率矩阵。
library(ggplot2)
num_samples <- 1000
num_actions <- 20
# 1. generate activities dataframe (dropped ID column):
activ <- data.frame(v1 = sample(1:num_actions, num_samples, replace = TRUE),
v2 = sample(1:num_actions, num_samples, replace = TRUE),
v3 = sample(1:num_actions, num_samples, replace = TRUE),
v4 = sample(1:num_actions, num_samples, replace = TRUE),
v5 = sample(1:num_actions, num_samples, replace = TRUE),
v6 = sample(1:num_actions, num_samples, replace = TRUE),
v7 = sample(1:num_actions, num_samples, replace = TRUE))
num_transp <- ncol(activ) - 1
# 2. calculate transition probabilities for each time step:
l_transp <- vector("list", num_transp)
for (t in 1:num_transp){
transp <- matrix(0, nrow = num_actions, ncol = num_actions)
data = activ[, t:(t+1)]
for (action in 1:num_actions){
rows_to_keep <- data[,1] == action
counts <- table(data[rows_to_keep,])
probs <- as.data.frame(counts/sum(rows_to_keep))
follow_actions <- as.integer(as.character(probs[,2]))
transp[action, follow_actions] <- probs$Freq
}
l_transp[[t]] <- transp
}
# 3. get development of transition probability from action 2 to action 3 over time:
to_plot <- vector("numeric", num_transp)
for (i in 1:num_transp){
to_plot[i] <- l_transp[[i]][2, 3]
}
# plot development of transition probability from action 2 to action 3 over time:
ggplot(data.frame(x=1:num_transp, y=to_plot), aes(x=x, y=y)) +
geom_line() +
xlab("time") +
ylab("transition probability")
它看起来非常像人们对随着时间的推移随机且独立地选择 20 个不同动作的场景所期望的那样。
推荐阅读
- laravel - 如何在树多对多表之间创建关系?
- mysql - 在具有 3 个表的 mysql 中查找不匹配的记录
- mysql - MySQL中的模式VS表VS列CHARSET有什么区别?
- wordpress - 如何知道 WooCommerce REST API 中哪个产品变体具有哪个变体 ID
- db2 - 是否建议或可以同时在两个不同的物理文件上运行 RGZPFM?
- swift - 如何使用 Swift 格式化开头没有“0”的日期?
- php - 如何防止使用 CodeIgniter 直接访问文件
- pandas - 如何找到模式
- reactjs - Redux Store Change 不会重新渲染 Login 组件以重定向
- python - PySpark 2.4.5:使用 PandasUDF 时出现 IllegalArgumentException