En ce qui concerne l'ajustement des données à une distribution asymétrique-normale Vous pouvez calculer l'estimateur du maximum de vraisemblance à partir des premiers principes. Notez d'abord que la fonction de densité de probabilité pour la distribution normale de biais avec le paramètre de localisation , le paramètre d'échelle et le paramètre de forme estξωα
2ωϕ ( x - ξω) Φ ( α ( x - ξω) )
où est la fonction de densité normale standard et est le CDF normal standard. Notez que cette densité fait partie de la classe décrite dans ma réponse à cette question .ϕ ( ⋅ )Φ ( ⋅ )
La log-vraisemblance basée sur un échantillon de observations indépendantes de cette distribution est:n
- n log( ω ) + ∑i = 1nJournalϕ ( x - ξω) +journalΦ ( α ( x - ξω) )
C'est un fait qu'il n'y a pas de solution sous forme fermée pour ce MLE. Mais, il peut être résolu numériquement. Par exemple, dans R
, vous pouvez coder la fonction de vraisemblance comme (remarque, je l'ai rendue moins compacte / efficace que possible pour la rendre complètement transparente sur la façon dont cela calcule la fonction de vraisemblance ci-dessus):
set.seed(2345)
# generate standard normal data, which is a special case
n = 100
X = rnorm(n)
# Calculate (negative) log likelihood for minimization
# P[1] is omega, P[2] is xi and P[3] is alpha
L = function(P)
{
# positivity constraint on omega
if( P[1] <= 0 ) return(Inf)
S = 0
for(i in 1:n)
{
S = S - log( dnorm( (X[i] - P[2])/P[1] ) )
S = S - log( pnorm( P[3]*(X[i] - P[2])/P[1] ) )
}
return(S + n*log(P[1]))
}
Maintenant, nous minimisons simplement cette fonction numériquement (c.-à-d. Maximisons la probabilité). Vous pouvez le faire sans avoir à calculer les dérivées à l'aide de l' algorithme Simplex , qui est l'implémentation par défaut du optim()
package dans R
.
Concernant la façon de tester l'asymétrie: nous pouvons explicitement tester l' asymétrie normale par rapport à la normale (puisque la normale est un sous-modèle) en contraignant et en faisant un test de rapport de vraisemblance .α=0
# log likelihood constraining alpha=0.
L2 = function(Q) L(c(Q[1],Q[2],0))
# log likelihood from the constrained model
-optim(c(1,1),L2)$value
[1] -202.8816
# log likelihood from the full model
-optim(c(1,1,1),L)$value
[1] -202.0064
# likelihood ratio test statistic
LRT = 2*(202.8816-202.0064)
# p-value under the null distribution (chi square 1)
1-pchisq(LRT,1)
[1] 0.1858265
Donc nous ne rejetons donc pas l'hypothèse nulle que (ie pas de biais).α=0
Ici, la comparaison était simple, car la distribution normale était un sous-modèle. Dans d'autres cas, plus généraux, vous pouvez comparer le skew-normal à d'autres distributions de référence en comparant, par exemple, les AIC (comme ici ) si vous utilisez des estimateurs du maximum de vraisemblance dans tous les ajustements concurrents. Par exemple, vous pouvez ajuster les données selon la probabilité maximale sous une distribution gamma et sous la normale de biais et voir si la probabilité ajoutée justifie la complexité supplémentaire de la normale de biais (3 paramètres au lieu de 2). Vous pouvez également envisager d'utiliser le test de Kolmogorov Smirnov pour comparer vos données avec la meilleure estimation d'ajustement de la famille skew-normal.