Wiederherstellung von Rohkoeffizienten und Varianzen aus der orthogonalen Polynomregression

14

Es scheint, als hätte ich ein Regressionsmodell wie yiβ0+β1xi+β2xi2+β3xi3Ich kann entweder ein Rohpolynom anpassen und unzuverlässige Ergebnisse erhalten oder ein orthogonales Polynom anpassen und Koeffizienten erhalten, die keine direkte physikalische Interpretation haben (z. B. kann ich sie nicht verwenden, um die Orte der Extrema auf der ursprünglichen Skala zu finden). Es scheint, als ob ich das Beste aus beiden Welten haben und die angepassten orthogonalen Koeffizienten und ihre Varianzen zurück in die Rohskala transformieren könnte. Ich habe einen Aufbaustudiengang in angewandter linearer Regression (mit Kutner, 5ed) absolviert und das Kapitel über polynomielle Regression in Draper (3ed, von Kutner referiert) durchgesehen, aber keine Diskussion darüber gefunden, wie dies zu tun ist. Der Hilfetext für diepoly()Funktion in R nicht. Ich habe auch nichts in meiner Websuche gefunden, auch nicht hier. Rekonstruiert rohe Koeffizienten (und erhält ihre Varianzen) aus Koeffizienten, die an ein orthogonales Polynom angepasst sind?

  1. unmöglich zu tun, und ich verschwende meine Zeit.
  2. Möglicherweise möglich, aber nicht bekannt, wie im allgemeinen Fall.
  3. möglich, aber nicht besprochen, weil "wer würde wollen?"
  4. möglich, aber nicht diskutiert, weil "es ist offensichtlich".

Wenn die Antwort 3 oder 4 ist, wäre ich sehr dankbar, wenn jemand die Geduld hätte, dies zu erklären oder auf eine Quelle zu verweisen, die dies tut. Wenn es 1 oder 2 ist, wäre ich immer noch neugierig, was das Hindernis ist. Vielen Dank für das Lesen und ich entschuldige mich im Voraus, wenn ich etwas Offensichtliches übersehen habe.

f1r3br4nd
quelle
1
Ich verstehe deine Punkte nicht. x, x 2 und x 3 sind nicht orthogonal. Daher sind sie korreliert und die Regressionsparameter könnten instabil sein, aber es ist nicht automatisch der Fall, dass sie unzuverlässig sind. Die Umwandlung in orthognonale Polynome kann zuverlässiger sein. Aber was macht den Koeffizienten der ursprünglichen Potenzen von x deutbarer als die Koeffizienten der orthogonalen Polynome? Wenn x die einzige Variable ist, wie im Modell y = a + bx, dann ist ∆y = yi-yi-1 = b∆x und b als Änderung in y pro Änderungseinheit in x interpretierbar. Aber mit den involvierten Kräften geht eine solche Interpretation verloren. 23
Michael R. Chernick
Ich habe der Einfachheit halber ein Modell mit nur x als Variable verwendet, aber in Wirklichkeit vergleiche ich Kurven zwischen Behandlungsgruppen. Je nachdem, welche Terme signifikant sind und wie groß sie sind, kann ich sie interpretieren - zum Beispiel als Aufwärts- / Abwärtsverschiebung insgesamt oder als größere / kleinere Anfangssteigung. Wie meine Frage sagt, ist ein natürlicher Vergleich zwischen Kurven die Position der Maxima / Minima, die leichter zu interpretieren sind, wenn sie auf der ursprünglichen Skala liegen. Also, Ihre Stimme ist für Wahl 3, nehme ich es?
f1r3br4nd
Nein, ich habe noch nicht herausgefunden, ob es möglich ist oder nicht. Ich habe gerade verstanden, warum Sie es tun wollen.
Michael R. Chernick
4
Beachten Sie, dass die Modellanpassung mit orthogonalen Polynomen genau dieselbe Anpassung (dh dasselbe , dieselben Anpassungswerte usw.) wie die Modellanpassung mit den rohen Polynomtermen aufweist. Wenn Sie dies also auf die ursprünglichen Daten zurückführen möchten, können Sie die Koeffizienten für die Rohterme betrachten, aber die orthogonalen Polynome verwenden, um die Inferenz für die einzelnen Terme auf eine Weise zu erstellen, die die Abhängigkeit zwischen ihnen "berücksichtigt" . R2
Makro
1
Wie sich herausstellt, sind kubische Splines und B-Splines eine Klasse für sich und das Beste aus zwei Welten.
Carl

Antworten:

6

Ja es ist möglich.

Sei der nicht konstante Teil der aus x i berechneten orthogonalen Polynome . (Jeder ist ein Spaltenvektor.) Wenn man diese gegen das x drückt, muss ich eine perfekte Anpassung geben. Sie können dies mit der Software ausführen, auch wenn die Prozeduren zur Berechnung orthogonaler Polynome nicht dokumentiert sind. Die Regression von z jz1,z2,z3xixizj ergibt Koeffizienten für dieγij

zij=γj0+xiγj1+xi2γj2+xi3γj3.

Das Ergebnis ist eine Matrix Γ , die bei rechter Multiplikation die Entwurfsmatrix X = ( 1 ; x ; x 2 ; x 3 ) in Z = ( 1 ; z 1 ; z 2 ; z 3 ) = X Γ umwandelt .4×4ΓX=(1;x;x2;x3)

(1)Z=(1;z1;z2;z3)=XΓ.

Nach dem Einbau des Modells

E(Y)=Zβ

β^(1)

Y^=Zβ^=(XΓ)β^=X(Γβ^).

Γβ^x .

Der folgende RCode veranschaulicht diese Verfahren und testet sie mit synthetischen Daten.

n <- 10        # Number of observations
d <- 3         # Degree
#
# Synthesize a regressor, its powers, and orthogonal polynomials thereof.
#
x <- rnorm(n)
x.p <- outer(x, 0:d, `^`); colnames(x.p) <- c("Intercept", paste0("x.", 1:d))
z <- poly(x, d)
#
# Compute the orthogonal polynomials in terms of the powers via OLS.
#
xform <- lm(cbind(1, z) ~ x.p-1)
gamma <- coef(xform)
#
# Verify the transformation: all components should be tiny, certainly
# infinitesimal compared to 1.
#
if (!all.equal(as.vector(1 + crossprod(x.p %*% gamma - cbind(1,z)) - 1), 
    rep(0, (d+1)^2)))
  warning("Transformation is inaccurate.")
#
# Fit the model with orthogonal polynomials.
#
y <- x + rnorm(n)
fit <- lm(y ~ z)
#summary(fit)
#
# As a check, fit the model with raw powers.
#
fit.p <- lm(y ~ .-1, data.frame(x.p))
#summary(fit.p)
#
# Compare the results.
#
(rbind(Computed=as.vector(gamma %*% coef(fit)), Fit=coef(fit.p)))

if (!all.equal(as.vector(gamma %*% coef(fit)), as.vector(coef(fit.p))))
  warning("Results were not the same.")
whuber
quelle
Γ
110161
Zwei Jahre später ... @whuber, ist es möglich, dies auch auf die 95% CIs der Koeffizienten auszudehnen?
user2602640
@ user2602640 Ja. Sie müssen die Varianz-Kovarianz-Matrix der Koeffizienten extrahieren (verwenden vcovin R), um auf einer Basis berechnete Varianzen in Varianzen auf der neuen Basis umzuwandeln, und dann die CIs auf die übliche Weise manuell berechnen.
whuber
@whuber Ich bin deinem Kommentar ungefähr auf halbem Weg gefolgt und habe dich dann völlig verloren ... Gibt es eine Chance, dass du Mitleid mit einem mathematisch herausgeforderten Biologen hast und ihn in Code schreibst?
user2602640