Ich versuche, ein Polynom zweiter Ordnung zu erstellen, das zu einigen meiner Daten passt. Angenommen, ich zeichne diese Übereinstimmung mit ggplot()
:
ggplot(data, aes(foo, bar)) + geom_point() +
geom_smooth(method="lm", formula=y~poly(x, 2))
Ich bekomme:
Eine Passung zweiter Ordnung funktioniert also ganz gut. Ich berechne es mit R:
summary(lm(data$bar ~ poly(data$foo, 2)))
Und ich bekomme:
lm(formula = data$bar ~ poly(data$foo, 2))
# ...
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 3.268162 0.008282 394.623 <2e-16 ***
# poly(data$foo, 2)1 -0.122391 0.096225 -1.272 0.206
# poly(data$foo, 2)2 1.575391 0.096225 16.372 <2e-16 ***
# ....
Nun würde ich annehmen, dass die Formel für meine Passform lautet:
Aber das gibt mir nur die falschen Werte. Zum Beispiel, wenn 3 ist, würde ich erwarten, dass ungefähr 3.15 wird. Durch Einfügen in die obige Formel erhalte ich jedoch: Bar
Was gibt? Interpretiere ich die Koeffizienten des Modells falsch?
r
regression
interpretation
regression-coefficients
user13907
quelle
quelle
poly
ohne?poly
zuerst R einzugeben? Am oberen Rand steht in großen, freundlichen Buchstaben " Orthogonale Polynome berechnen ".?poly
der Syntax zu verstehen. Zugegeben, ich weiß nur wenig über die dahinter stehenden Konzepte. Ich wusste nicht, dass es noch etwas anderes gibt (oder einen so großen Unterschied zwischen "normalen" Polynomen und orthogonalen Polynomen), und die Beispiele, die ich online gesehen habe, wurden allepoly()
zum Anpassen verwendet, insbesondere mitggplot
- warum sollte ich dann nicht einfach das und verwenden? verwirrt sein, wenn das Ergebnis "falsch" war? Wohlgemerkt, ich bin kein Mathematiker - ich wende nur das an, was ich von anderen gesehen habe, und versuche es zu verstehen.Antworten:
Meine ausführliche Antwort ist unten, aber die allgemeine (dh echte) Antwort auf diese Art von Frage lautet: 1) Experimentieren Sie, schrauben Sie herum, schauen Sie sich die Daten an, Sie können den Computer nicht kaputt machen, egal was Sie tun. . . Experiment; oder 2) RTFM .
Hier ist ein
R
Code, der das in dieser Frage identifizierte Problem mehr oder weniger reproduziert:Der erste
lm
gibt die erwartete Antwort zurück:Der zweite
lm
gibt etwas Seltsames zurück:Da
lm
es in beiden Aufrufen dasselbe ist, müssen die Argumentelm
unterschiedlich sein. Schauen wir uns also die Argumente an. Offensichtlichy
ist das auch so. Es sind die anderen Teile. Schauen wir uns die ersten Beobachtungen zu den Variablen auf der rechten Seite im ersten Aufruf von anlm
. Die Rückkehr vonhead(cbind(x,x^2))
sieht so aus:Das ist wie erwartet. Erste Spalte ist
x
und zweite Spalte istx^2
. Wie wäre es mit dem zweiten Anruf vonlm
, dem mit Poly? Die Rückkehr vonhead(poly(x,2))
sieht so aus:OK, das ist wirklich anders. Die erste Spalte ist nicht
x
und die zweite Spalte ist nichtx^2
. Also, waspoly(x,2)
auch immer tut, es kommt nicht zurückx
undx^2
. Wenn wir wissen wollen, waspoly
passiert, können wir zunächst die Hilfedatei lesen. Also sagen wirhelp(poly)
. Die Beschreibung lautet:Entweder wissen Sie, was "orthogonale Polynome" sind, oder Sie wissen es nicht. Wenn Sie dies nicht tun, verwenden Sie Wikipedia oder Bing (natürlich nicht Google, weil Google böse ist - natürlich nicht so schlecht wie Apple, aber immer noch schlecht). Oder Sie entscheiden, dass es Ihnen egal ist, was orthogonale Polynome sind. Möglicherweise bemerken Sie den Ausdruck "Rohpolynome" und etwas weiter unten in der Hilfedatei
poly
eine Option,raw
die standardmäßig gleich istFALSE
. Diese beiden Überlegungen könnten Sie dazu inspirieren, herauszufinden,head(poly(x, 2, raw=TRUE))
welche Ergebnisse Sie erzielen:Angeregt durch diese Entdeckung (es sieht richtig, jetzt, nicht wahr?), Könnten Sie gehen , um zu versuchen
summary(lm(y ~ poly(x, 2, raw=TRUE)))
Das gibt:Es gibt mindestens zwei Ebenen für die obige Antwort. Zuerst habe ich deine Frage beantwortet. Zweitens, und noch viel wichtiger, habe ich Ihnen gezeigt, wie Sie solche Fragen selbst beantworten sollen. Jede einzelne Person, die "weiß, wie man programmiert", hat eine Sequenz wie die über sechzig Millionen Mal durchlaufen. Sogar Leute, die so deprimierend schlecht programmieren wie ich, gehen diese Sequenz die ganze Zeit durch. Es ist normal, dass Code nicht funktioniert. Es ist normal zu missverstehen, was Funktionen tun. Der Umgang damit besteht darin, herumzudrehen, zu experimentieren, die Daten und RTFM zu betrachten. Verlassen Sie den Modus "einem Rezept gedankenlos folgen" und wechseln Sie in den Modus "Detektiv".
quelle
Es gibt einen interessanten Ansatz zur Interpretation der polynomialen Regression von Stimson et al. (1978) . Es beinhaltet das Umschreiben
wie
Dabei ist ist das Minimum oder Maximum (abhängig vom Vorzeichen von ) und ist der Fokuswert. Es transformiert im Grunde die dreidimensionale Kombination von Hängen in eine Parabel in zwei Dimensionen. Ihre Arbeit gibt ein Beispiel aus der Politikwissenschaft. β 2 f = - β 1 / 2 β 2m=β0−β21/4β2 β2 f=−β1/2β2
quelle
Wenn Sie nur einen Anstoß in die richtige Richtung wünschen, ohne so viel Urteilsvermögen:
poly()
Erstellen Sie stattdessen orthogonale (nicht korrelierte) Polynome, beiI()
denen die Korrelation zwischen den resultierenden Polynomen vollständig ignoriert wird. Die Korrelation zwischen Prädiktorvariablen kann in linearen Modellen ein Problem sein (siehe hier für weitere Informationen darüber, warum die Korrelation problematisch sein kann). Daher ist es wahrscheinlich (im Allgemeinen) besser, siepoly()
anstelle von zu verwendenI()
. Warum sehen die Ergebnisse nun so anders aus? Nun, beidepoly()
undI()
x nehmen und es in eine neue x umwandeln (im FallI()
, ist die neue x nur x ^ 1 oder x ^ 2, im Fallepoly()
werden die neuen xs viel komplizierter (wenn Sie wollen wissen , Woher sie kommen (und wahrscheinlich auch nicht), können Sie loslegenhier oder die oben genannte Wikipedia-Seite oder ein Lehrbuch). Der Punkt ist, dass Sie beim Berechnen (Vorhersagen) von y auf der Grundlage eines bestimmten Satzes von x-Werten die konvertierten x-Werte verwenden müssen, die entweder vonpoly()
oder erzeugt wurdenI()
(je nachdem, welcher in Ihrem linearen Modell vorhanden war). So:In diesem Fall geben beide Modelle dieselbe Antwort zurück, was darauf hindeutet, dass die Korrelation zwischen Prädiktorvariablen Ihre Ergebnisse nicht beeinflusst. Wenn die Korrelation ein Problem wäre, würden die beiden Methoden unterschiedliche Werte vorhersagen.
quelle
'poly' führt eine Graham-Schmidt-Orthonormalisierung für die Polynome 1, x, x ^ 2, ..., x ^ deg durch. Diese Funktion macht beispielsweise das Gleiche wie 'poly', ohne natürlich die Attribute 'coef' zurückzugeben.
Ich bin auf diesem Thread gelandet, weil ich an der funktionalen Form interessiert war. Wie drücken wir das Ergebnis von 'poly' als Ausdruck aus? Kehren Sie einfach die Graham-Schmidt-Prozedur um. Sie werden mit einem Chaos enden!
quelle