2016-09-06 8 views
0

Ich versuche, ein 2-Komponenten-gamma Mischmodell auf meine Daten (Restwerte erhielten nach dem Ausführen Generalized Linear Models), unter Verwendung von folgendem Befehl (Teil des Codes) zu passen:Fehler in GammamixEM ... Versuchen Sie verschiedene Anzahl von Komponenten? in R

expr_mix_gamma <- gammamixEM(expr_glm_residuals, lambda = c(0.75,0.25), k = 2, epsilon = 1e-08, maxit = 1000, maxrestarts=20, verb = TRUE) 

Der Code läuft mehrere Gen-Dateien (in Schleife). es läuft für einige Dateien in Ordnung während für andere wirft sie Fehler folgende:

Error in gammamixEM(expr_glm_residuals, lambda = c(0.75, 0.25), k = 2, : Try different number of components?  

Ich bin nicht in der Lage, herauszufinden, was los ist. Könnte jemand Licht auf dasselbe werfen? Dank

Antwort

0

Nur wenige Experten-Meinungen:

1) Fitting normale Mischungen können schwierig sein, und irgendwann die Optimierungsalgorithmus (EM) mit sehr langsamer Konvergenz stecken. Vermutlich gibt es Optionen im Paket, um entweder die maximale Anzahl von Schritten vor dem Aufgeben zu erhöhen oder die Konvergenzkriterien weniger als empfindlich zu machen. Ersteres wird die Laufzeit erhöhen und Letzteres wird die Optimalität reduzieren (was Sie möglicherweise weiter vom wahren Optimum entfernt). Also sollten Sie diese ändern, wie Sie denken, geeignet.

2) Von Martin Mächler, ETH Zürich: Wenn es ein Fall von Mischungen aus ein -dimensionale Gaußsche ist, es ist auch dringend empfohlen, bei CRAN Paket ‚nor1mix‘ suchen (die „1“ für " ein -dimensionalen). Seit einiger Zeit, dass kleines Paket eine alternatives zum EM liefert, nämlich direkte MLE, einfach Optim() mit, wo die Wahrscheinlichkeit eine etwas intelligente Parametrisierung verwendet. natürlich als EM, dies hängt auch vom Startwert ab, aber meine (begrenzte) Erfahrung war tha t nor1mix :: norMixMLE() arbeitet wesentlich schneller und zuverlässiger als die EM (die ich auch als nor1mix :: norMixEM() zur Verfügung stellen.

Apropos Anfangswert: Die Hilfeseite zeigt, wie man kmeans() für "etwas" zuverlässige Starts verwendet; alternativ würde ich empfehlen, cluster :: pam() zu verwenden, um dort zu beginnen.

Für mich versuchte ersten Ansatz für einige Gene besser, aber immer noch für andere fehlgeschlagen. Also nutze ich tryCatch, um mein Skript zu starten und Informationen für einige Gene zu verlieren.

Verwandte Themen