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