Besoin d'un algorithme pour calculer la probabilité relative que les données proviennent de la distribution normale vs lognormale

13

Disons que vous avez un ensemble de valeurs et que vous voulez savoir s'il est plus probable qu'elles aient été échantillonnées à partir d'une distribution gaussienne (normale) ou échantillonnées à partir d'une distribution lognormale?

Bien sûr, idéalement, vous devriez savoir quelque chose sur la population ou sur les sources d'erreur expérimentale, donc vous auriez des informations supplémentaires utiles pour répondre à la question. Mais ici, supposons que nous ayons seulement un ensemble de chiffres et aucune autre information. Quel est le plus probable: échantillonnage à partir d'une gaussienne ou échantillonnage à partir d'une distribution log-normale? Combien plus probable? Ce que j'espère, c'est un algorithme pour sélectionner entre les deux modèles et, espérons-le, quantifier la probabilité relative de chacun.

Harvey Motulsky
la source
1
Ce pourrait être un exercice amusant d'essayer de caractériser la distribution sur les distributions dans la nature / la littérature publiée. Là encore, ce ne sera jamais qu'un exercice amusant. Pour un traitement sérieux, vous pouvez soit rechercher une théorie justifiant votre choix, soit donner suffisamment de données - visualiser et tester la qualité de l'ajustement de chaque distribution candidate.
JohnRos
3
S'il s'agit de généraliser par l'expérience, je dirais que les distributions asymétriques positives sont le type le plus courant, en particulier pour les variables de réponse qui sont d'un intérêt central, et que les log-normales sont plus courantes que les normales. Un volume de 1962 Le scientifique spécule édité par le célèbre statisticien IJ Good, y compris une pièce anonyme "Les règles de travail de Bloggins", contenant l'affirmation "La distribution normale du log est plus normale que la normale". (Plusieurs des autres règles sont fortement statistiques.)
Nick Cox
Je semble interpréter votre question différemment de JohnRos et anxoestevez. Pour moi, votre question sonne comme une question de sélection de modèle simple , c'est-à-dire une question de calcul de , où M est la distribution normale ou log-normale et D est vos données. Si la sélection du modèle n'est pas ce que vous recherchez, pouvez-vous clarifier? P(M)M
Lucas
@lucas Je pense que votre interprétation n'est pas tellement différente de la mienne. Dans les deux cas, vous devez faire des hypothèses a priori .
anxoestevez
2
Pourquoi ne pas simplement calculer le rapport de vraisemblance généralisé et alerter l'utilisateur lorsqu'il favorise la log-normale?
Scortchi - Réintégrer Monica

Réponses:

7

Vous pouvez faire une meilleure estimation du type de distribution en ajustant chaque distribution (normale ou lognormale) aux données par maximum de vraisemblance, puis en comparant la log-vraisemblance sous chaque modèle - le modèle avec la plus forte probabilité logarithmique étant le meilleur ajustement. Par exemple, dans R:

# log likelihood of the data given the parameters (par) for 
# a normal or lognormal distribution
logl <- function(par, x, lognorm=F) {
    if(par[2]<0) { return(-Inf) }
    ifelse(lognorm,
    sum(dlnorm(x,par[1],par[2],log=T)),
    sum(dnorm(x,par[1],par[2],log=T))
    )
}

# estimate parameters of distribution of x by ML 
ml <- function(par, x, ...) {
    optim(par, logl, control=list(fnscale=-1), x=x, ...)
}

# best guess for distribution-type
# use mean,sd of x for starting parameters in ML fit of normal
# use mean,sd of log(x) for starting parameters in ML fit of lognormal
# return name of distribution type with highest log ML
best <- function(x) {
    logl_norm <- ml(c(mean(x), sd(x)), x)$value
        logl_lognorm <- ml(c(mean(log(x)), sd(log(x))), x, lognorm=T)$value
    c("Normal","Lognormal")[which.max(c(logl_norm, logl_lognorm))]
}

Maintenant, générez des nombres à partir d'une distribution normale et ajustez une distribution normale par ML:

set.seed(1)
x = rnorm(100, 10, 2)
ml(c(10,2), x)

Produit:

$par
[1] 10.218083  1.787379

$value
[1] -199.9697
...

Comparez la log-vraisemblance pour l'ajustement ML des distributions normales et log-normales:

ml(c(10,2), x)$value # -199.9697
    ml(c(2,0.2), x, lognorm=T)$value # -203.1891
best(x) # Normal

Essayez avec une distribution lognormale:

best(rlnorm(100, 2.6, 0.2)) # lognormal

L'affectation ne sera pas parfaite, selon n, moyenne et sd:

> table(replicate(1000, best(rnorm(500, 10, 2))))

Lognormal    Normal 
        6       994 
> table(replicate(1000, best(rlnorm(500, 2.6, 0.2))))

Lognormal    Normal 
      999         1 
waferthin
la source
1
Vous n'avez pas besoin de trouver numériquement les estimations du paramètre de probabilité maximale pour la normale ou la normale (bien que cela montre comment vous généraliseriez l'idée à la comparaison d'autres distributions). A part ça, approche très sensée.
Scortchi - Réintégrer Monica
J'ai à peine utilisé R ou le concept de maximum de vraisemblance, voici donc une question fondamentale. Je sais que nous ne pouvons pas comparer l'AIC (ou le BIC) d'ajustement d'une distribution normale aux données par rapport aux journaux des données, car l'AIC ou le BIC ne seraient pas comparables. Il faut adapter deux modèles à un seul ensemble de données (sans transformation; pas d'exclusion de valeurs aberrantes, etc.), et la transformation des données changera AIC ou BIC indépendamment de la fausse comparaison. Et ML? Cette comparaison est-elle légitime?
Harvey Motulsky
Nous trouvons les distributions normales et lognormales les mieux adaptées aux données, puis calculons la probabilité d'observer les données en supposant qu'elles proviennent de ces distributions (la probabilité ou p(X|\theta)). Nous ne transformons pas les données. Nous imprimons la distribution pour laquelle la probabilité d'observer les données est la plus élevée. Cette approche est légitime mais présente l'inconvénient de ne pas inférer la probabilité du modèle compte tenu des données p(M|X), c'est-à-dire la probabilité que les données proviennent d'une distribution normale vs lognormale (par exemple p (normal) = 0,1, p (lognormal) = 0.9) contrairement à l'approche bayésienne.
waferthin
1
@Harvey C'est vrai, mais hors de propos - vous avez demandé comment ajuster les distributions normales vs log-normales aux mêmes données, et c'est à cela que répond whannymahoots. Étant donné que le nombre de paramètres libres est le même pour les deux modèles, la comparaison des AIC ou des BIC se réduit à la comparaison des log-vraisemblances.
Scortchi - Réintégrer Monica
@wannymahoots Tout préalable raisonnable pour une approche bayésienne dans ce contexte - en s'appuyant sur l'estimation des probabilités relatives qu'un utilisateur de logiciel essaie d'ajuster des données normales ou log-normales - va être si peu informatif qu'il donnera des résultats similaires à une approche basé uniquement sur la probabilité.
Scortchi - Réintégrer Monica
11

M{Normal,Log-normal}X={x1,...,xN}

P(MX)P(XM)P(M).

La partie difficile est d'obtenir la probabilité marginale ,

P(XM)=P(Xθ,M)P(θM)θ.

p(θM)XY={logx1,...,logxNYX . N'oubliez pas de prendre en compte le jacobien de la transformation

P(XM=Log-Normal)=P(OuiM=Ordinaire)je|1Xje|.

P(θM)P(σ2,μM=Ordinaire)P(M)

Exemple:

P(μ,σ2M=Ordinaire)m0=0,v0=20,une0=1,b0=100

enter image description here

Selon Murphy (2007) (équation 203), la probabilité marginale de la distribution normale est alors donnée par

P(XM=Ordinaire)=|vN|12|v0|12b0une0bnuneNΓ(uneN)Γ(une0)1πN/22N

uneN,bN, et vN sont les paramètres de la partie postérieure P(μ,σ2X,M=Ordinaire) (Équations 196 à 200),

vN=1/(v0-1+N),mN=(v0-1m0+jeXje)/vN,uneN=une0+N2,bN=b0+12(v0-1m02-vN-1mN2+jeXje2).

J'utilise les mêmes hyperparamètres pour la distribution log-normale,

P(XM=Log-normal)=P({JournalX1,...,JournalXN}M=Ordinaire)je|1Xje|.

Pour une probabilité antérieure de la log-normale de 0,1, P(M=Log-normal)=0,1et des données tirées de la distribution log-normale suivante,

entrez la description de l'image ici

le postérieur se comporte comme ceci:

entrez la description de l'image ici

La ligne continue montre la probabilité postérieure médiane de différents tirages de Npoints de données. Notez que pour peu ou pas de données, les croyances sont proches des croyances antérieures. Pour environ 250 points de données, l'algorithme est presque toujours certain que les données ont été tirées d'une distribution log-normale.

Lors de la mise en œuvre des équations, ce serait une bonne idée de travailler avec des densités logarithmiques au lieu de densités. Mais sinon, cela devrait être assez simple. Voici le code que j'ai utilisé pour générer les tracés:

https://gist.github.com/lucastheis/6094631

Lucas
la source
4

Il semble que vous recherchiez quelque chose d'assez pragmatique pour aider les analystes qui ne sont probablement pas des statisticiens professionnels et qui ont besoin de quelque chose pour les inciter à faire ce qui devrait être des techniques d'exploration standard telles que regarder des parcelles qq, des parcelles de densité, etc.

Dans ce cas, pourquoi ne pas simplement faire un test de normalité (Shapiro-Wilk ou autre) sur les données d'origine, et un sur les données transformées en log, et si la deuxième valeur p est plus élevée, déclenchez un indicateur pour que l'analyste envisage d'utiliser une transformée en log ? En prime, crachez un graphique 2 x 2 du tracé de la ligne de densité et un tracé qqnorm des données brutes et transformées.

Techniquement, cela ne répondra pas à votre question sur la probabilité relative, mais je me demande si c'est tout ce dont vous avez besoin.

Peter Ellis
la source
Intelligent. Peut-être que cela suffit et évite d'avoir à expliquer les calculs de vraisemblance ... Merci.
Harvey Motulsky