2016-12-13 6 views
2

I in R den folgenden Ausdruck in Matlab gegeben verwenden möchten:polyval: von Matlab R

y1=polyval(p,end_v); 

wobei p in Matlab ist:

p = polyfit(Nodes_2,CInt_interp,3); 

Gerade jetzt in RI haben:

Aber ich weiß nicht, welcher Befehl in R entspricht dem Polyval von Matlab.

Vielen Dank!

+0

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

Antwort

1

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.

+0

Wow! Es funktioniert und vielen Dank für Ihren Rat, wirklich aufgeregt, um R zu verwenden! – Danilo

+0

Fertig! Ja, ich bin absolut neu sowohl mit R als auch hier! Danke noch einmal. – Danilo

0

r:

library(polynom) 
predict(polynomial(1:3), c(5,7,9)) 
[1] 86 162 262 

Matlab (official example):

p = [3 2 1]; 
polyval(p,[5 7 9]) 
ans = 86 162 262