r - 将 VLMC 拟合到很长的序列

标签 r markov-chains traminer sequence-analysis

我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集。我的做法如下:

# Load libraries
library(PST)
library(RCurl)
library(TraMineR)

# Load and transform data
x <- getURL("https://gist.githubusercontent.com/aronlindberg/08228977353bf6dc2edb3ec121f54a29/raw/241ef39125ecb55a85b43d7f4cd3d58f617b2ecf/challenge_level.csv")
data <- read.csv(text = x)

data.seq <- seqdef(data[,2:ncol(data)], missing = NA, right = NA, nr = "*")
S1 <- pstree(data.seq, ymin = 0.01, lik = TRUE, with.missing = TRUE, nmin = 2)

但是,这会产生以下错误:

Error in res[i, , drop = FALSE] : subscript out of bounds

如何使模型适合序列这么长的数据?限制模型长度有什么好的理由吗?

最佳答案

问题出在您的数据上。如果不在 pstree 函数中设置 L,则意味着您想要拟合最大阶模型。拟合过程在 L=8 时产生错误,因为您有 nmin=2,但按此顺序只有一个上下文具有 nmin=2

> cprob(data.seq, L=8, nmin=2)
 [>] 21 sequences, min/max length: 19/296
 [>] computing prob., L=8, 2043 distinct context(s)
 [>] removing 1894 context(s) where n<2
 [>] total time: 0.156 secs
                        EX  FA I1  I2 I3 N1 N2 N3 NR QU TR [n]
I2-I3-FA-I3-EX-I3-EX-I2  0 0.5  0 0.5  0  0  0  0  0  0  0   2

使用 L=8 拟合模型效果很好

S1 <- pstree(data.seq, ymin = 0.01, lik = TRUE, nmin = 2, L=8) 

 [>] 21 sequence(s) - min/max length: 19/296
 [>] max. depth L=8, nmin=2, ymin=0.01
     [L]  [nodes]
       0        1
       1       11
       2       99
       3      368
       4      340
       5      126
       6       34
       7        4
       8        1
 [>] computing sequence(s) likelihood ... (0.804 secs)
 [>] total time: 2.968 secs

同样,您不需要在 seqdef() 中使用任何“missing”、“right”或“nr”选项,也不需要在 pstree() 中使用“with.missing”

最好, 亚历克西斯

关于r - 将 VLMC 拟合到很长的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968530/

相关文章:

r - 如何从 TraMineR 中的事件序列创建状态序列?

random - 简单的随机英语句子生成器

r - 通过 WeightedCluster 包进行多 channel 序列分析

r - 如何用字符串元素扩展.grid(一半!)

java - 创建 R 包时包含 jar 文件

matlab - 在 Matlab 中构建多阶马尔可夫链转移矩阵

python - 计算吸收马尔可夫链的基本矩阵的最佳方法?

traminer - 序列回归树中的缩写

r - 我想在 r 中向我的 ggmap 添加一个比例尺,但不断收到 "transform should be logical"错误。我该如何解决这个问题?

r - 如何组合多条曲线并使用 R 和 ggplot 进行绘图?