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.