2017-05-02 5 views
0

J'essaie de comprendre certaines fonctionnalités du package MSwM afin que je puisse l'utiliser dans un document que j'écris. Il y a deux choses que je ne comprends pas en reproduisant l'exemple fourni par les auteurs. Le premier est lié à la méthode de résumé utilisée dans le paquet: pourquoi le logLikel est un nombre positif quand j'appelle [email protected]@logLikel et un nombre négatif quand j'appelle summary(mod.mswm)? Est-il possible d'obtenir logLik (et non le logLikel), AIC et BIC directement de l'objet de résumé?AIC et BIC dans Markov Switching package MSwM

La seconde concerne les critères d'information AIC et BIC. La documentation pour le paquet dit que pour nous d'obtenir ces valeurs, nous devrions utiliser la fonction AIC, en choisissant la valeur appropriée pour k pour obtenir AIC ou BIC. Donc pour AIC, k devrait être 2 et pour BIC, je pense qu'il devrait être log(length(y)), où y est ma série temporelle univariée. Le problème est que lorsque je fais cette procédure les valeurs pour AIC et BIC que je reçois sont différentes de celles qui sont dans le summary. Pourquoi donc? Qu'est-ce que je rate??

Ce code J'utilise:

library(MSwM) 
data(example) 
mod=lm(y~x,example) 
mod.mswm=msmFit(mod,k=2,p=1,sw=c(T,T,T,T),control=list(parallel=F)) 
summary(mod.mswm) 

Les premières lignes du résultat sont:

Markov Switching Model 

Call: msmFit(object = mod, k = 2, sw = c(T, T, T, T), p = 1, control = list(parallel = F)) 

     AIC  BIC logLik 
    637.0736 693.479 -312.5368 

Cependant, si j'essaie de calculer l'AIC et BIC en utilisant une fonction ou par main, j'ai des résultats différents:

#Akaike 
AIC(mod.mswm,k=2) #using function. Result:641.0736 
8*2-((-1)*2*[email protected]@logLikel)#by hand. Result:641.0736 

#Bayesian 
AIC(mod.mswm,k=log(length(example$y))) #using function. Result: 670.7039 
8*log(length(example$y))-((-1)*2*[email protected]@logLikel) #by hand. Result: 670.7039 

Merci beaucoup à l'avance!

Répondre

0

J'ai rencontré le même problème. Je ne peux pas expliquer, pourquoi les développeurs choisissent une formule légèrement différente, mais je peux vous montrer, qui a été utilisé.

# Extracted from package --------------------------------------------------- 
object <- mod.mswm 
(swi <- [email protected][-length([email protected])]) 
(np <- object["k"]*sum(swi)+sum(!swi)) 

(AIC=2*object["Fit"]["logLikel"]+2*np) 
#[1] 637.0736 
(BIC=2*object["Fit"]["logLikel"]+2*np*log(nrow([email protected]$model))) 
#[1] 693.479 

J'ai trouvé cet extrait dans leur code source sur Internet. Comme vous pouvez le voir, les résultats sont les mêmes.

J'extrait la formule suivante:

'#': = Nombre de ...

AIC = 2 * logvraisemblance + 2 * (. #parameters incl constant) * (#regimes)

BIC = 2 * logvraisemblance + 2 * (#parameters incl. constant) * (#regimes) * ln (#observations)

Avec mes meilleures salutations.

+0

Merci beaucoup pour votre réponse, Alexander! – Fer