Berechnen Sie die Varianz, die von jedem Prädiktor in multipler Regression erklärt wird, mit R

13

Ich habe eine multiple Regression durchgeführt, bei der das Modell als Ganzes signifikant ist und ungefähr 13% der Varianz erklärt. Ich muss jedoch den Betrag der Varianz finden, der von jedem signifikanten Prädiktor erklärt wird. Wie kann ich das mit R machen?

Hier sind einige Beispieldaten und Code:

D = data.frame(
    dv = c( 0.75, 1.00, 1.00, 0.75, 0.50, 0.75, 1.00, 1.00, 0.75, 0.50 ),
    iv1 = c( 0.75, 1.00, 1.00, 0.75, 0.75, 1.00, 0.50, 0.50, 0.75, 0.25 ),
    iv2 = c( 0.882, 0.867, 0.900, 0.333, 0.875, 0.500, 0.882, 0.875, 0.778, 0.867 ),
    iv3 = c( 1.000, 0.067, 1.000, 0.933, 0.875, 0.500, 0.588, 0.875, 1.000, 0.467 ),
    iv4 = c( 0.889, 1.000, 0.905, 0.938, 0.833, 0.882, 0.444, 0.588, 0.895, 0.812 ),
    iv5 = c( 18, 16, 21, 16, 18, 17, 18, 17, 19, 16 ) )
fit = lm( dv ~ iv1 + iv2 + iv3 + iv4 + iv5, data=D )
summary( fit )

Hier ist die Ausgabe mit meinen aktuellen Daten:

Call: lm(formula = posttestScore ~ pretestScore + probCategorySame + 
    probDataRelated + practiceAccuracy + practiceNumTrials, data = D)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.6881 -0.1185  0.0516  0.1359  0.3690 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
 (Intercept)        0.77364    0.10603    7.30  8.5e-13 ***
 iv1                0.29267    0.03091    9.47  < 2e-16 ***
 iv2                0.06354    0.02456    2.59   0.0099 **
 iv3                0.00553    0.02637    0.21   0.8340
 iv4               -0.02642    0.06505   -0.41   0.6847
 iv5               -0.00941    0.00501   -1.88   0.0607 .  
--- Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.18 on 665 degrees of freedom
 Multiple R-squared:  0.13,      Adjusted R-squared:  0.123
 F-statistic: 19.8 on 5 and 665 DF,  p-value: <2e-16

Diese Frage wurde beantwortet hier , aber die akzeptierte Antwort bezieht mich nur auf unkorrelierte Prädiktoren, und während es eine zusätzliche Antwort ist , dass Adressen Prädiktoren korrelierten, es gibt nur einen allgemeinen Hinweis, nicht eine bestimmte Lösung. Ich möchte wissen, was zu tun ist, wenn meine Prädiktoren korreliert sind.

baixiwei
quelle
2
Haben Sie sich die Antwort von Jeromy Anglim hier angesehen ?
Stat
Ja, das war die zusätzliche Antwort, auf die ich mich bezog. Ich hoffte auf etwas Konkreteres und Schritt für Schritt. Ich habe ppcor heruntergeladen, war mir aber nicht sicher, was ich mit der spcor-Ausgabe anfangen sollte. Ich frage mich auch, ob es einen Weg gibt, dies in Core R zu tun. Es scheint eine übliche Aufgabe zu sein, die kein spezielles Paket erfordert.
Baixiwei
Die kürzeste Antwort auf Ihre Frage zu korrelierten Prädiktoren lautet, dass ihre separate Bedeutung nicht ohne zumindest weitere Annahmen und Annäherungen quantifiziert werden kann. Betrachten Sie es so: Wenn dies unkompliziert ist, warum ist es nicht einfach und schnell verfügbar, weil viele Forscher glauben, dass sie es wollen?
Nick Cox
Ich würde vorschlagen, in das relaimpoPaket und sein Begleitpapier zu schauen : jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdf Ich verwende häufig die "LMG" -Methode.
Phil

Antworten:

15

Der erläuterte Prozentsatz hängt von der eingegebenen Bestellung ab.

Wenn Sie eine bestimmte Reihenfolge angeben, können Sie diese in R trivial berechnen (z. B. über die updateundanova Funktionen , siehe unten), aber eine andere Reihenfolge der Eingabe würde möglicherweise sehr unterschiedliche Antworten ergeben.

[Eine Möglichkeit könnte darin bestehen, über alle Bestellungen oder Ähnliches zu mitteln, aber es würde unhandlich und könnte eine besonders nützliche Frage nicht beantworten.]

-

Wie Stat betont, können Sie mit einem einzelnen Modell, wenn Sie nach jeweils einer Variablen suchen, einfach 'anova' verwenden, um die inkrementellen Summen der Quadrattabelle zu erstellen. Dies würde aus Ihrem Code folgen:

 anova(fit)
Analysis of Variance Table

Response: dv
          Df   Sum Sq  Mean Sq F value Pr(>F)
iv1        1 0.033989 0.033989  0.7762 0.4281
iv2        1 0.022435 0.022435  0.5123 0.5137
iv3        1 0.003048 0.003048  0.0696 0.8050
iv4        1 0.115143 0.115143  2.6294 0.1802
iv5        1 0.000220 0.000220  0.0050 0.9469
Residuals  4 0.175166 0.043791        

-

Da haben wir also die inkrementelle Varianz erklärt; Wie bekommen wir den Anteil?

Ziemlich trivial, skaliere sie durch 1 geteilt durch ihre Summe. (Ersetzen Sie die 1 durch 100 für die erläuterte prozentuale Abweichung.)

Hier habe ich es als eine hinzugefügte Spalte zur anova-Tabelle angezeigt:

 af <- anova(fit)
 afss <- af$"Sum Sq"
 print(cbind(af,PctExp=afss/sum(afss)*100))
          Df       Sum Sq      Mean Sq    F value    Pr(>F)      PctExp
iv1        1 0.0339887640 0.0339887640 0.77615140 0.4280748  9.71107544
iv2        1 0.0224346357 0.0224346357 0.51230677 0.5137026  6.40989591
iv3        1 0.0030477233 0.0030477233 0.06959637 0.8049589  0.87077807
iv4        1 0.1151432643 0.1151432643 2.62935731 0.1802223 32.89807550
iv5        1 0.0002199726 0.0002199726 0.00502319 0.9468997  0.06284931
Residuals  4 0.1751656402 0.0437914100         NA        NA 50.04732577

-

Wenn Sie sich für mehrere bestimmte Eingabereihenfolgen entscheiden, können Sie etwas noch Allgemeineres tun (das es Ihnen auch ermöglicht, Gruppen von Variablen gleichzeitig einzugeben oder zu entfernen, wenn Sie dies wünschen):

 m5 = fit
 m4 = update(m5, ~ . - iv5)
 m3 = update(m4, ~ . - iv4)
 m2 = update(m3, ~ . - iv3)
 m1 = update(m2, ~ . - iv2)
 m0 = update(m1, ~ . - iv1)

 anova(m0,m1,m2,m3,m4,m5)
Analysis of Variance Table

Model 1: dv ~ 1
Model 2: dv ~ iv1
Model 3: dv ~ iv1 + iv2
Model 4: dv ~ iv1 + iv2 + iv3
Model 5: dv ~ iv1 + iv2 + iv3 + iv4
Model 6: dv ~ iv1 + iv2 + iv3 + iv4 + iv5
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1      9 0.35000                           
2      8 0.31601  1  0.033989 0.7762 0.4281
3      7 0.29358  1  0.022435 0.5123 0.5137
4      6 0.29053  1  0.003048 0.0696 0.8050
5      5 0.17539  1  0.115143 2.6294 0.1802
6      4 0.17517  1  0.000220 0.0050 0.9469

(Ein solcher Ansatz könnte auch automatisiert werden, z. B. über Schleifen und die Verwendung von get . Sie können Variablen bei Bedarf in mehreren Reihenfolgen hinzufügen und entfernen.)

... und dann wie zuvor auf Prozent skalieren.

(NB. Die Tatsache, dass ich erkläre, wie man diese Dinge macht, sollte nicht unbedingt als Anwalt für alles verstanden werden, was ich erkläre.)

Glen_b - Setzen Sie Monica wieder ein
quelle
2
R2anova(fit)m0m5
Diese überarbeitete Antwort ist wirklich nützlich. Ich glaube, ich komme dorthin. Eine Frage: Wenn ich den für iv5 (die letzte Variable) erklärten Varianzanteil auf die von Ihnen beschriebene Weise berechne, ist dies mathematisch der gleiche Unterschied wie die Differenz der R ^ 2-Werte, die durch die auf das Modell angewendete Zusammenfassung mit und ohne iv5 zurückgegeben werden? Tatsächlich erhalte ich dieselben Werte und wollte nur prüfen, ob diese konzeptionell dasselbe sind.
Baixiwei
Und noch eine Frage: Gibt es einen Grund, warum ich das, was ich gerade im vorherigen Kommentar beschrieben habe, nicht für jede von zwei verschiedenen ivs tun konnte? Wäre das gleichbedeutend mit Ihrer zweiten vorgeschlagenen Methode, bei der die Reihenfolge der Eingabe von Variablen unterschiedlich ist?
Baixiwei
R2 werden identisch sein. Ja, Sie könnten für jeden einen passenden letzten Beitrag leisten. (Tatsächlich summary.lmgibt Ihnen der t-Test in der Regressionstabelle von einen Test der Signifikanz jeder Variablen, die bereits zuletzt angepasst wurde.)
Glen_b
2

Ich habe bewiesen, dass der Prozentsatz der Variation, der durch einen gegebenen Prädiktor in einer multiplen linearen Regression erklärt wird, das Produkt des Steigungskoeffizienten und der Korrelation des Prädiktors mit den angepassten Werten der abhängigen Variablen ist (unter der Annahme, dass alle Variablen standardisiert wurden, um den Mittelwert Null zu haben und Varianz eins (ohne Verlust der Allgemeinheit). Hier finden Sie es:

https://www.researchgate.net/publication/306347340_A_Natural_Decomposition_of_R2_in_Multiple_Linear_Regression

user128460
quelle
3
user128460 willkommen, aber dies ist eine Frage- und Antwortseite, keine Frage- und Link-zu-Antwort-Seite.
Robert Long
Ist das nicht die Pratt-Punktzahl?
Brett
2

Sie können die hier.part-Bibliothek verwenden, um Anpassungsgütemaßnahmen für die Regression einer einzelnen abhängigen Variablen auf alle Kombinationen von N unabhängigen Variablen zu erhalten

library(hier.part)
env <- D[,2:5]
all.regs(D$dv, env, fam = "gaussian", gof = "Rsqu",
     print.vars = TRUE)
MFR
quelle