Получение логарифмической вероятности из дерева вероятностных суффиксов
Вот мой код:
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)
Почему-то отказывается возвращать значение логарифмического правдоподобия? Почему это так? Как я могу получить значение логарифмического правдоподобия?
2 ответа
У вас плохие ценности для missing
а также right
аргументы в вашем seqdef
команда, которая затем вызывает ошибку в 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)
Обратите внимание, что, поскольку у вас есть пропущенные значения, я установил with.missing = TRUE
в pstree
команда.
===============
Чтобы игнорировать правильные пропуски, установите 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
, Вероятность генерации данных с помощью дерева S2
может быть получен с помощью predict
функция, которая возвращает вероятность каждой последовательности в данных. Логарифмическая вероятность данных должна быть
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
Действительно, была проблема при вычислении вероятности моделей, приспособленных к последовательностям неравной длины. Это исправлено. Новая версия пакета PST (0,94) будет доступна в течение нескольких часов на R-Forge для установки:
install.packages("PST", repos="http://R-Forge.R-project.org")
и позже на CRAN.
Обратите внимание, что поскольку ваши последовательности не содержат пропущенных значений, но имеют разную длину, вам не нужно устанавливать ни with.missing=TRUE
при использовании pstree
функция или любой вариант при использовании 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