Wie passt man eine Weibull-Verteilung an Eingabedaten an, die Nullen enthalten?

14

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.

Ethan Shepherd
quelle
5
Der Weibull ist eine stetige Verteilung, so dass die Wahrscheinlichkeit, genau Null zu werden, die Wahrscheinlichkeit Null hat. Wenn Ihre Daten viele Nullen enthalten, ist dies ein unmittelbarer Hinweis darauf, dass der Weibull ungeeignet ist. Auf jeden Fall sehen Sie Ihre Daten wie Zählerdaten (oder zumindest, sind diskret) und so ein Weibull ist wahrscheinlich nicht die beste Wahl.
Kardinal
Wenn Sie einen Kontext hinzufügen, aus dem hervorgeht, woher die Daten stammen, kann dies jedem helfen, der versucht, eine enorme Antwort zu geben.
Kardinal

Antworten:

8

(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).

"""
Blischke-Scheuer method-of-moments estimation of (a,b)
for the Weibull distribution F(t) = 1 - exp(-(t/a)^b)
""" 

x = [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]
xbar = mean(x)
varx = variance(x)
var("b"); f(b) = gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2
bhat = find_root(f, 0.01, 100)
ahat = xbar/gamma(1+1/bhat)
print "Estimates: (ahat, bhat) = ", (ahat, bhat)

Dies erzeugte die Ausgabe

Estimates: (ahat, bhat) =  (81.316784310814455, 1.3811394719075942)


Wenn die obigen Daten geändert werden (nur zur Veranschaulichung), indem die drei kleinsten Werte durch , d. H0

x = [23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121]

dann erzeugt die gleiche Prozedur die Ausgabe

Estimates: (ahat, bhat) =  (78.479354097488923, 1.2938352346035282)


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:

fit_weibull <- function(x)
{
    xbar <- mean(x)
    varx <- var(x)
    f <- function(b){return(gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2)}
    bhat <- uniroot(f,c(0.02,50))$root
    ahat <- xbar/gamma(1+1/bhat)
    return(c(ahat,bhat))
}

Dies gibt (bis auf fünf signifikante Stellen) die beiden obigen Sage-Beispiele wieder:

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)
fit_weibull(x)
[1] 81.316840  1.381145

x <- c(23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121)
fit_weibull(x)
[1] 78.479180  1.293821
res
quelle
4

θfitdistrθθfitdistr

foo <- function(theta, x)
{
  if (theta <= -min(x)) return(Inf);
  f <- fitdistr(x+theta, 'weibull')
  -2*f$loglik
}

Dann minimieren Sie diese Funktion durch eindimensionale Optimierung:

bar <- optimize(foo, lower=-min(x)+0.001, upper=-min(x)+10, x=x)

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
[1] 2.878442

$objective
[1] 306.2792

> fitdistr(x+bar$minimum, 'weibull')
     shape        scale   
   1.2836432   81.1678283 
 ( 0.1918654) (12.3101211)
> 

bar$minimumθfitdistrθ

Bogenschütze
quelle
2

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:

  1. Die Daten sind tatsächlich abgeschnitten: Objekte waren vor Beginn der Studie gefährdet und ausgefallen, und Sie möchten so tun, als hätten Sie sie die ganze Zeit beobachtet.
  2. Die Instrumente sind schlecht kalibriert: Sie haben nicht genügend Messgenauigkeit für die Studie und daher wurden Fehler, die nahe der Startzeit auftreten, als genau Null codiert.
  3. Das als Null kodierte Ding ist keine Null. Es sind Personen oder Objekte, die auf die eine oder andere Weise von der Analyse ausgeschlossen wurden. Die Null wird nur in den Daten angezeigt, wenn fehlende Werte zusammengeführt, sortiert oder auf andere Weise neu codiert werden.

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.

AdamO
quelle
Das OP erklärte, dass ein früherer Forscher sich für die Anpassung einer Weibull-Verteilung entschieden habe, obwohl es sich bei den Daten um reale Zahlen handele - nicht negative ganzzahlige Zahlen für die Anzahl der Vorkommen von etwas. Es ist unklar, in welcher Beziehung Ihre drei Fälle zu einer solchen Situation stehen.
Res
Oh, gute Nachricht! Die Anpassung an die Weibull-Verteilung ist ungeheuer falsch. Es hat kontinuierliche Unterstützung und wird nie verwendet, um Zählungen, sondern Überlebenszeiten zu modellieren. Negative Binomialverteilungen wären eine Art äquivalente Zwei-Parameter-Verteilung für Modellierungszählungen, die natürlich von der Art des Datenerzeugungsprozesses abhängt (von dem wir 0 Informationen haben, wie das Problem angegeben ist). Danke, dass Sie mich darauf hingewiesen haben.
AdamO
1

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.

John Bauer
quelle
0

[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.

Radfahrer
quelle