Ich muss einige simulierte Daten glätten, aber gelegentlich Probleme auftreten, wenn die simulierten zu glättenden Ordinaten meistens den gleichen Wert haben. Hier ist ein kleines reproduzierbares Beispiel für den einfachsten Fall.Fehler mit `Löss.Smooth` aber nicht` Löss` oder `Lowess`
> x <- 0:50
> y <- rep(0,51)
> loess.smooth(x,y)
Error in simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE, :
NA/NaN/Inf in foreign function call (arg 1)
loess(y~x)
, lowess(x,y)
und ihre analogen in MATLAB in diesem Beispiel die erwarteten Ergebnisse ohne Fehler. Ich benutze loess.smooth
hier, weil ich die Schätzungen an einer bestimmten Anzahl von Punkten ausgewertet benötigt. Laut der Dokumentation, glaube ich, loess.smooth
und loess
verwenden die gleichen Schätzfunktionen, aber ersteres ist eine "Hilfsfunktion", um die Bewertungspunkte zu behandeln. Der Fehler scheint aus einer C-Funktion zu kommen:
> traceback()
3: .C(R_loess_raw, as.double(pseudovalues), as.double(x), as.double(weights),
as.double(weights), as.integer(D), as.integer(N), as.double(span),
as.integer(degree), as.integer(nonparametric), as.integer(order.drop.sqr),
as.integer(sum.drop.sqr), as.double(span * cell), as.character(surf.stat),
temp = double(N), parameter = integer(7), a = integer(max.kd),
xi = double(max.kd), vert = double(2 * D), vval = double((D +
1) * max.kd), diagonal = double(N), trL = double(1),
delta1 = double(1), delta2 = double(1), as.integer(0L))
2: simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE,
"none", "interpolate", control$cell, iterations, control$trace.hat)
1: loess.smooth(x, y)
loess
auch nennt simpleLoess
, aber mit dem, was erscheint unterschiedliche Argumente zu sein. Natürlich, wenn Sie genug von den y-Werten auf ungleich Null ändern, läuft loess.smooth
ohne Fehler, aber ich brauche das Programm, um sogar im extremsten Fall zu laufen.
Hoffentlich kann mir jemand helfen mit einer und/oder alle der folgenden Optionen:
- verstehen, warum nur
loess.smooth
, und nicht die anderen Funktionen, erzeugt diesen Fehler und eine Lösung für dieses Problem zu finden. - Finden Sie einen Workaround mit
loess
, aber immer noch die Schätzung an einer angegebenen Anzahl von Punkten, die sich von dem Vektor x unterscheiden können. Zum Beispiel möchte ich vielleicht nurx <- seq(0,50,10)
in der Glättung verwenden, aber die Schätzung unterx <- 0:50
auswerten. Soweit ich weiß, wird die Verwendung vonpredict
mit einem neuen Datenrahmen diese Situation nicht richtig behandeln, aber lassen Sie mich bitte wissen, wenn ich etwas vermisse. - Behandeln Sie den Fehler auf eine Weise, die das Programm nicht daran hindert, auf den nächsten simulierten Datensatz zu wechseln.
Vielen Dank im Voraus für jede Hilfe zu diesem Problem.
löschte meine Antwort, wie das selbe, das Sie jetzt bekannt gaben. –
@Joris - keine Notwendigkeit, es gelöscht zu haben. Ich war im Begriff, Ihre Antwort zu verbessern! –
Ich habe etwas auf Teil 1 von t hinzugefügt Die Frage des OP, warum 'loess.smooth' mit der dargestellten Problematik scheitert. –