Ich versuche, einen vorhandenen Vorhersagealgorithmus zu reproduzieren, der von einem pensionierten Forscher überliefert wurde. Der erste Schritt besteht darin, einige beobachtete Daten an eine Weibull-Verteilung anzupassen, um eine Form und einen Maßstab zu erhalten, die zur Vorhersage zukünftiger Werte verwendet werden. Ich benutze R, um dies zu tun. Hier ist ein Beispiel für meinen 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')
Dies funktioniert einwandfrei, es sei denn, das Eingabearray enthält Nullen, wodurch ein vollständiger Fehler auftritt. Dasselbe passiert in SAS. Ich verstehe das, weil einer der Schritte bei der Berechnung der Weibull-Verteilung das natürliche Protokoll ist, das für 0 undefiniert ist. Gibt es eine vernünftige Möglichkeit, dies zu umgehen?
Das Beste, was ich bisher gefunden habe, ist, zu allen meinen Eingabewerten 1 hinzuzufügen, die Kurve anzupassen und dann einen von meinen vorhergesagten Werten zu subtrahieren (die Kurve um 1 nach oben und dann wieder nach unten "verschieben"). Dies passt ziemlich gut zu den vorhergesagten Daten, scheint aber ein falscher Weg zu sein.
Bearbeiten: Die Werte im Eingabearray werden für einen Zeitraum von Jahren als reale Daten (die Anzahl der Vorkommen von etwas) betrachtet. So war in einigen Jahren die Anzahl der Vorkommen Null. Ob es nun der beste Weg ist oder nicht (ich stimme dem zu), der ursprüngliche Algorithmusautor behauptet, die Weibull-Distribution verwendet zu haben, und ich muss versuchen, ihren Prozess zu replizieren.
quelle
Antworten:
(Wie andere bereits ausgeführt haben, ist eine Weibull-Verteilung wahrscheinlich keine angemessene Annäherung, wenn die Daten nur Ganzzahlen sind. Das Folgende soll Ihnen nur dabei helfen, festzustellen, was der vorherige Forscher zu Recht oder zu Unrecht getan hat.)
Es gibt mehrere alternative Methoden, die nicht von Nullen in den Daten betroffen sind, z. B. die Verwendung verschiedener Schätzmethoden für Momente. Diese erfordern typischerweise eine numerische Lösung von Gleichungen, an denen die Gammafunktion beteiligt ist, da die Momente der Weibull-Verteilung in Bezug auf diese Funktion angegeben sind. Ich bin nicht mit R vertraut, aber hier ist ein Sage- Programm, das eine der einfacheren Methoden veranschaulicht - vielleicht kann es an R angepasst werden? (Über diese und andere Methoden können Sie zB in "Die Weibull-Verteilung: Ein Handbuch" von Horst Rinne, S. 455ff nachlesen. In seiner Gl. ist überflüssig).
Dies erzeugte die Ausgabe
Wenn die obigen Daten geändert werden (nur zur Veranschaulichung), indem die drei kleinsten Werte durch , d. H
dann erzeugt die gleiche Prozedur die Ausgabe
EDIT: Ich habe gerade R installiert, um es zu versuchen. Auf die Gefahr, dass diese Antwort zu lange auf sich warten lässt, habe ich hier meinen R-Code für die Blischke-Scheuer-Methode:
Dies gibt (bis auf fünf signifikante Stellen) die beiden obigen Sage-Beispiele wieder:
quelle
fitdistr
fitdistr
Dann minimieren Sie diese Funktion durch eindimensionale Optimierung:
wo ich gerade die "+10" gemacht habe basierend auf gar nichts.
Für die Daten mit den drei kleinsten durch Nullen ersetzten Werten erhalten wir:
bar$minimum
fitdistr
quelle
Es sollte fehlschlagen, Sie sollten dankbar sein, dass es fehlgeschlagen ist.
Ihre Beobachtungen haben gezeigt, dass Fehler in dem Moment aufgetreten sind, in dem Sie begonnen haben, sie zu beobachten. Wenn dies ein realer Prozess ist, der von realen (und nicht simulierten) Daten ausgeht, müssen Sie den Grund, warum Sie Nullen erhalten, irgendwie erklären. Ich habe Überlebensstudien gesehen, bei denen 0-mal als Folge einer von mehreren Dingen auftaucht:
Also für Fall 1: Sie müssen die richtigen Zensierungsmethoden anwenden, auch wenn dies bedeutet, dass Sie nachträglich Datensätze abrufen müssen. Fall 2 bedeutet, dass Sie den EM-Algorithmus verwenden können, da Sie ein Präzisionsproblem haben. Auch hier funktionieren Bayes'sche Methoden ähnlich. Fall 3 bedeutet, dass Sie nur die Werte ausschließen müssen, die eigentlich fehlen sollten.
quelle
Ich stimme der obigen Antwort des Kardinals zu. Es ist jedoch auch üblich, eine Konstante hinzuzufügen, um Nullen zu vermeiden. Ein anderer häufig verwendeter Wert ist 0,5, es könnte jedoch auch eine andere positive Konstante verwendet worden sein. Sie können einen Wertebereich ausprobieren, um festzustellen, ob Sie den genauen Wert ermitteln können, der vom vorherigen Forscher verwendet wurde. Dann können Sie sicher sein, dass Sie seine Ergebnisse reproduzieren können, bevor Sie sich auf die Suche nach einer besseren Distribution machen.
quelle
[Angenommen, Weibull ist angemessen] Johnson Kotz und Balakrishnans Buch bieten viele Möglichkeiten, die Weibull-Parameter abzuschätzen. Einige davon hängen nicht von den Daten ab, die keine Nullen enthalten (z. B. unter Verwendung des Mittelwerts und der Standardabweichung oder unter Verwendung bestimmter Perzentile).
Johnson, NL, Kotz, S. und Balakrishnan, N. (1994). Kontinuierliche univariate Verteilungen. New York: Wiley, ungefähr auf Seite 632.
quelle