Maximum de vraisemblance

Questions sur les fonctions statistiques de R

Modérateur : Groupe des modérateurs

Sireau Aurélien
Messages : 9
Enregistré le : 05 Juin 2006, 08:01

Maximum de vraisemblance

Messagepar Sireau Aurélien » 13 Juin 2006, 13:08

Pour ceux qui travaille dans l'économie, j'essaie d'implementer une méthode de Regime Switching avec des chaines de Markov pour prédire au mieux l'évolution de l'économie (prenez le PNB par exemple). La méthode générale se trouve sur cette page, dans la section 4.1

http://library.soa.org/library/naaj/1997-09/naaj0104_4.pdf

Il suffit donc de convertir cela sous R et de chercher le paramètre teta qui maximise la fonction de vraisemblance. J'applique ensuite mon algorithme à une série de donnée de type rendement de "EuStockMarkets" disponible dans R (que je coupe à 100 données pour le test). Mon fonction de vraisemblance est la suivante qu'il est facile de comprendre si on lit l'étude PDF précédente :

Code : Tout sélectionner

f<-function(p12,p21,mu1,mu2,sigma1,sigma2) {

   t = length(y)
   P = matrix(0,2,2)
   mu = rep(0,2)
   sigma = rep(0,2)
   mu[1] = mu1
   mu[2] = mu2
   sigma[1] = sigma1
   sigma[2] = sigma2
   P[1,2] = p12
   P[2,1] = p21
   P[1,1] = 1-p12
   P[2,2] = 1 - p21
   L = 1
   for (n in 1:t) {
      if (n == 1) {
      pi1 = p21/(p12+p21)
      pi2 = 1-pi1
      tmp = rep(0,2)
      tmp[1] = pi1*dnorm((y[1]-mu1)/sigma1)
      tmp[2] = pi2*dnorm((y[1]-mu2)/sigma2)
      F = tmp[1] + tmp[2] #f(y[1]|...)
      G = matrix(0,2,2)
         for (i in 1:2) {
            for (j in 1:2) {
            h1 = tmp[j]/F #p(ro[t-1]|...)
            h2 = P[j,i] #pp(ro[t]|ro[t-1]...)
            h3 = dnorm((y[n]-mu[i])/sigma[i]) #f(y[t]|ro[t]...)
            G[i,j] = h1*h2*h3
            }
         }
      }
      else {
      Gpast = G
      Fpast = F
      for (i in 1:2) {
            for (j in 1:2) {
            h1 = (Gpast[i,1]+Gpast[i,2])/Fpast
            h2 = P[j,i] #pp(ro[t]|ro[t-1]...)
            h3 = dnorm((y[n]-mu[i])/sigma[i]) #f(y[t]|ro[t]...)
            G[i,j] = h1*h2*h3
            }
         }
      F = G[1,1]+G[1,2]+G[2,1]+G[2,2]
      }
   L = L*F
   }
   L
}

Je cherche donc ensuite à appliquer la fonction mle contenu dans stats4 à la fonction f et aux bons paramètres
se posent alors les deux problèmes suivant (plus ou moins reliés) :
- comment choisir les paramètres que je donne en entrée à mle
- comment dois-je faire pour éviter la production de NaN
D'une manière générale je veux obtenir des probabilités entre 0 et 1, des écarts type positifs et des mu assez cohérents (les algorithmes avec contraintes ne sont également pas satisfaisant).

Voila c'est assez lourd, j'espère que ma question s'inscrit dans l'optique du forum. Sachez qu' elle s'adresse surtout aux personnes averties en économie...

Merci d'avance
Aurélien Sireau

Retourner vers « Archives : Fonctions statistiques »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité