Es gibt keine exakte Äquivalenz in R für polyfit
und polyvar
, da diese MATLAB-Routinen im Vergleich zu Rs statistischer Toolbox so primitiv sind.
In MATLAB gibt polyfit
hauptsächlich polynomiale Regressionskoeffizienten zurück (Kovarianz kann jedoch bei Bedarf ermittelt werden). polyvar
nimmt Regressionskoeffizienten , und eine Reihe von neuen x
Werte, um das angepasste Polynom vorherzusagen.
In R ist die Mode: Verwenden Sie lm
, um ein Regressionsmodell (viel breiter; nicht auf polynomiale Regression beschränkt) zu erhalten; Verwenden Sie für Modellzusammenfassung, wie Kovarianz erhalten; Verwenden Sie predict.lm
für die Vorhersage.
So, hier ist der Weg in R zu gehen:
## don't use `$` in formula; use `data` argument
fit <- lm(y ~ poly(x,3, raw=TRUE), data = Spectra_BIR)
Hinweis enthält fit
nicht nur Koeffizienten, sondern auch wesentliche Komponenten für orthogonale Berechnung. Wenn Sie Koeffizienten extrahieren möchten, tun Sie oder unname(coef(fit))
, wenn Sie nicht möchten, dass Namen von Koeffizienten angezeigt werden.
Nun, vorherzusagen, was wir tun:
x.new <- rnorm(5) ## some random new `x`
## note, `predict.lm` takes a "lm" model, not coefficients
predict.lm(fit, newdata = data.frame(x = x.new))
predict.lm
als polyvar
viel viel mächtiger ist. Es kann das Konfidenzintervall zurückgeben. Lesen Sie weiter unter ?predict.lm
.
Es gibt ein paar heikle Probleme mit der Verwendung von predict.lm
. Es gibt unzählige Fragen gewesen/Antworten in Bezug auf diese, und Sie die Wurzel Frage, auf die finden kann ich schließen oft diese Fragen als verdoppelt:
So stellen Sie sicher, dass Sie das bekommen gute Gewohnheit, lm
und predict
im frühen Stadium des Lernens R. mit
Extra
Es ist auch nicht schwierig, etwas mit polyvar
in R identisch zu konstruieren.Die Funktion g
in meiner Antwort Function for polynomials of arbitrary order tut dies, obwohl durch Setzen nderiv
wir auch Ableitungen des Polynoms bekommen können.
Ich habe versucht, aber es funktioniert nicht. Grundsätzlich möchte ich eine Polynom-Anpassung (3. Grad) in einem begrenzten Datenbereich berechnen und dann diese Funktion verwenden, um die Daten auf ein großes Datenintervall zu extrapolieren. – Danilo