J'essaie de reproduire un algorithme de prédiction existant, transmis par un chercheur à la retraite. La première étape consiste à ajuster certaines données observées à une distribution de Weibull, pour obtenir une forme et une échelle qui seront utilisées pour prédire les valeurs futures. J'utilise R pour ce faire. Voici un exemple de mon code:
x<-c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,51,77,78,144,34,29,45,16,15,37,218,170,44,121)
f<-fitdistr(x, 'weibull')
Cela fonctionne correctement, sauf s'il y a des zéros dans le tableau d'entrée, ce qui entraîne son échec complet. La même chose se produit dans SAS. Si je comprends bien, c'est parce que l'une des étapes du calcul de la distribution de Weibull consiste à prendre le logarithme naturel, qui n'est pas défini pour 0. Existe-t-il un moyen raisonnable de contourner ce problème?
Le mieux que j'ai trouvé jusqu'à présent est d'ajouter 1 à toutes mes valeurs d'entrée, d'ajuster la courbe, puis de soustraire une de mes valeurs prédites ("déplacer" la courbe vers le haut puis la reculer de 1). Cela correspond assez bien aux données précédemment prédites, mais il semble que ce soit une mauvaise façon de le faire.
edit: Les valeurs dans le tableau d'entrée sont observées, des données du monde réel (le nombre d'occurrences de quelque chose) pour une gamme d'années. Ainsi, certaines années, le nombre d'occurrences était nul. Que ce soit la meilleure façon ou non (je conviens que ce ne soit pas le cas), l'auteur de l'algorithme d'origine prétend avoir utilisé la distribution Weibull, et je dois essayer de reproduire leur processus.
la source
Réponses:
(Comme d'autres l'ont souligné, une distribution de Weibull n'est probablement pas une approximation appropriée lorsque les données ne sont que des nombres entiers. Ce qui suit est juste destiné à vous aider à déterminer ce que le chercheur précédent a fait, à tort ou à raison.)
Il existe plusieurs méthodes alternatives qui ne sont pas affectées par les zéros dans les données, comme l'utilisation de divers estimateurs par méthode des moments. Celles-ci nécessitent généralement une solution numérique d'équations impliquant la fonction gamma, car les moments de la distribution de Weibull sont donnés en fonction de cette fonction. Je ne connais pas R, mais voici un programme Sage qui illustre l'une des méthodes les plus simples - peut-être peut-il être adapté à R? (Vous pouvez lire à ce sujet et d'autres méthodes de ce genre dans, par exemple, "La distribution Weibull: un manuel" par Horst Rinne, p. 455ff - cependant, il y a une faute de frappe dans son eq.12.4b, comme le '-1' est redondant).
Cela a produit la sortie
Si les données ci-dessus sont modifiées (juste à titre d'illustration) en remplaçant les trois plus petites valeurs par
alors la même procédure produit la sortie
EDIT: Je viens d'installer R pour l'essayer. Au risque de faire cette réponse trop longtemps, pour toute personne intéressée, voici mon code R pour la méthode Blischke-Scheuer:
Cela reproduit (à cinq chiffres significatifs) les deux exemples Sage ci-dessus:
la source
fitdistr
fitdistr
Réduisez ensuite cette fonction à l'aide de l'optimisation unidimensionnelle:
où je viens de composer le "+10" basé sur rien du tout.
Pour les données avec les trois plus petites valeurs remplacées par des zéros, nous obtenons:
bar$minimum
fitdistr
la source
Cela devrait échouer, vous devriez être reconnaissant d'avoir échoué.
Vos observations ont montré que des échecs se sont produits au moment même où vous avez commencé à les observer. S'il s'agit d'un processus réel, provenant de données réelles (et non simulées), vous devez en quelque sorte expliquer la raison pour laquelle vous obtenez des zéros. J'ai vu des études de survie où 0 fois apparaissait comme une conséquence de plusieurs choses:
Donc pour le cas 1: vous devez utiliser des méthodes de censure appropriées, même si cela signifie tirer rétrospectivement des enregistrements. Le cas 2 signifie que vous pouvez utiliser l'algorithme EM car vous avez un problème de précision. Les méthodes bayésiennes fonctionnent également de la même manière ici. Le cas 3 signifie que vous avez juste besoin d'exclure les valeurs qui étaient censées être manquantes.
la source
Je suis d'accord avec la réponse du cardinal ci-dessus. Cependant, il est également assez courant d'ajouter une constante pour éviter les zéros. Une autre valeur couramment utilisée est 0,5, mais toute constante positive aurait pu être utilisée. Vous pouvez essayer une plage de valeurs pour voir si vous pouvez identifier la valeur exacte utilisée par le chercheur précédent. Ensuite, vous pouvez être sûr que vous êtes en mesure de reproduire ses résultats, avant de rechercher une meilleure distribution.
la source
[En supposant que Weibull est approprié] Le livre de Johnson Kotz et Balakrishnan a beaucoup de façons d'estimer les paramètres de Weibull. Certains d'entre eux ne dépendent pas des données n'incluant pas les zéros (par exemple en utilisant la moyenne et l'écart type, ou en utilisant certains centiles).
Johnson, NL, Kotz, S. et Balakrishnan, N. (1994). Distributions univariées continues. New York: Wiley, grosso modo à la page 632.
la source