【问题标题】:Getting log-likelihood from probabilistic suffix tree从概率后缀树获得对数似然
【发布时间】:2017-06-11 07:27:35
【问题描述】:

这是我的代码:

library(RCurl)
library(TraMineR)
library(PST)

x <- getURL("https://gist.githubusercontent.com/aronlindberg/08228977353bf6dc2edb3ec121f54a29/raw/c2539d06771317c5f4c8d3a2052a73fc485a09c6/challenge_level.csv")
data <- read.csv(text = x)

# Load and transform data
data <- read.table("thread_level.csv", sep = ",", header = F, stringsAsFactors = F)

data.seq <- seqdef(data[2:nrow(data),2:ncol(data)], missing = "NA", right = "*")

# Make a tree
S1 <- pstree(data.seq, ymin = 0.05, L = 6, lik = TRUE, with.missing = F)
logLik(S1)

由于某种原因,它拒绝返回对数似然值?为什么会这样?如何获得对数似然值?

【问题讨论】:

    标签: markov-chains pst traminer sequence-analysis


    【解决方案1】:

    seqdef 命令中的 missingright 参数值错误,这会导致 pstree 出现错误。

    data.seq <- seqdef(data[2:nrow(data),2:ncol(data)], missing = NA, right= NA, nr = "*")
    # Make a tree
    S1 <- pstree(data.seq, ymin = 0.05, L = 6, lik = TRUE, with.missing = TRUE)
    logLik(S1)
    

    我们得到

    'log Lik.' -31011.32 (df=47179)
    

    请注意,由于您缺少值,因此我在 pstree 命令中设置了 with.missing = TRUE

    ================

    要忽略正确的缺失,请将right='DEL' 设置为seqdef

    seq <- seqdef(data[2:nrow(data),2:ncol(data)], missing = NA, right= "DEL")
    S2 <- pstree(seq, ymin = 0.05, L = 6, lik = TRUE, with.missing = F)
    logLik(S2)
    

    我不知道 PST 计算为 logLik(S2) 以及为什么我们会在这里得到 NA。可以通过predict 函数获得使用树S2 生成数据的可能性,该函数返回数据中每个序列的可能性。那么数据的对数似然应该是

    sum(log(predict(S2, seq)))
    

    给了

     [>] 984 sequence(s) - min/max length: 1/32
     [!] sequences have unequal lengths
     [>] max. context length: L=6
     [>] found 1020 distinct context(s)
     [>] total time: 0.588 secs
    [1] -4925.79
    

    【讨论】:

    • 然而,我所有的缺失值都在右边——序列“内部”没有一个缺失值。因此,我的所有事件中大约 90% 是*。这不会扭曲概率吗?
    • 例如,当我执行cmine(S1, pmin = 0, state = "good_idea", l = 1) 时,我得到e 的概率为47%——这对于这个数据集来说甚至是不可能的,因为没有序列以* 开头。
    • 我编辑了答案以显示如何忽略序列的缺失端。而且,你是对的,我们得到一个NAlogLik。我建议你向包的作者询问这个logLik 应该是什么(它不会返回与我在答案中提出的方法相同的值!)。
    【解决方案2】:

    确实,在计算模型拟合不等长度序列的可能性时存在问题。这是固定的。新版 PST 包 (0.94) 将在几个小时内在 R-Forge 上提供,安装:

    install.packages("PST", repos="http://R-Forge.R-project.org") 
    

    后来在 CRAN 上。

    请注意,由于您的序列不包含任何缺失值但长度不等,因此在使用pstree 函数时您不必设置with.missing=TRUE,在使用seqdef 时也不必设置任何选项。

    现在运行以下代码时:

    library(RCurl)
    library(TraMineR)
    library(PST)
    
    x <- getURL("https://gist.githubusercontent.com/aronlindberg/08228977353bf6dc2edb3ec121f54a29/raw/c2539d06771317c5f4c8d3a2052a73fc485a09c6/challenge_level.csv")
    data <- read.csv(text = x)
    
    data.seq <- seqdef(data[2:nrow(data),2:ncol(data)])
    
    # Make a tree
    S1 <- pstree(data.seq, ymin = 0.05, L = 6) 
    

    我明白了:

    > S1@logLik
    [1] -4925.79
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 2017-06-12
    • 2014-06-09
    • 2016-06-28
    • 1970-01-01
    • 2015-09-21
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多