Como prever probabilidades ou estados de estado para novos dados com o pacote DepmixS4, para modelos de Markov ocultos


8

Parece que posso aprender bem os parâmetros e encontrar as probabilidades posteriores para os dados de treinamento, mas não tenho idéia de como fazer novas previsões sobre novos dados. O problema, em particular, vem das probabilidades de transição alteradas nas covariáveis, por isso não é trivial escrever código para prever novos dados.

A abordagem padrão é definir a mistura (dependente) e ajustar o modelo:

mod <- depmix(EventTime ~ 1, data = data[1:40320,], nstates = 2, family
=multinomial("identity"), transition = ~ Count, instart = runif(2))

fm <- fit(mod, emcontrol=em.control(classification="soft", maxit = 60))

O que temos acima deve funcionar de maneira semelhante a um HMM binário, pois está tentando classificar se um evento ocorreu como uma variável dependente de 1/0 que se move pela sequência. A covariável de transição é uma variável de contagem de frequências que deve afetar diretamente as probabilidades de transição dos estados que devem posteriormente controlar as probabilidades de emissão da variável dependente 1/0.

É possível obter os parâmetros do modelo e configurá-los para outro novo modelo. No entanto, não existe um método claro de previsão, mesmo que deva haver algum lugar nas entranhas da biblioteca.

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

Observe que, na documentação, é possível executar o algoritmo viterbi para gerar estados para novos dados. No entanto, isso não é particularmente útil para mim e parece se encaixar perfeitamente nos dados, sugerindo que ele ainda aprende a se encaixar nos novos dados.

probs2 <- viterbi(modNew)

Note, eu sou novo neste tópico. Esse estágio de implementação é difícil para mim, mas de alguma forma parece ser uma parte básica de uma análise.


Após setpars, aplicar Viterbi (modNew) Ele irá gerar uma tabela com as probabilidades de estado
Andrei Boarão

Respostas:


0

Ajuste o novo modelo e ligue posterior().

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

modNew <- fit(modNew)

predStates <- posterior(modNew)

predStates$state

3
Não entendo por que devemos reequipar o modelo, pois os parâmetros foram "aprendidos" na primeira vez, estou errado?
Patrick

0

Você resolveu isso? Caso contrário, talvez você possa tentar:

sum(forwardbackward(setpars(depmix(list(var~1), data=newData, nstates=3,family=list(gaussian())), getpars(originalModel)))[["alpha"]][nrow(data),])

Essa linha única obtém a probabilidade de novos dados executando o algoritmo de avanço no seu modelo original. Informe-me se você chegou a uma solução melhor, pois estou enfrentando esse problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.