2012-06-07 4 views
7

In R, wenn ich lm() verwende, wenn ich na.action = na.pass innerhalb des Aufrufs auf lm() setze, dann gibt es in der Übersichtstabelle eine NA für jeden Koeffizienten, der nicht geschätzt werden kann (weil von fehlenden Zellen in diesem Fall).Verschiedene NA-Aktionen für Koeffizienten und Zusammenfassung des linearen Modells in R

Wenn ich jedoch nur die Koeffizienten aus dem Zusammenfassungsobjekt extrahiere, entweder summary(myModel)$coefficients oder , dann werden die NAs weggelassen.

Ich möchte, dass die NAs einbezogen werden, wenn ich die Koeffizienten auf die gleiche Weise extrahiere, wie sie beim Drucken der Zusammenfassung enthalten sind. Gibt es eine Möglichkeit, dies zu tun?

Einstellung options(na.action = na.pass) scheint nicht zu helfen. Hier

ein Beispiel:

> set.seed(534) 
> myGroup1 <- factor(c("a","a","a","a","b","b")) 
> myGroup2 <- factor(c("first","second","first","second","first","first")) 
> myDepVar <- rnorm(6, 0, 1) 
> myModel <- lm(myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2) 
> summary(myModel) 

Call: 
lm(formula = myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2) 

Residuals: 
     1  2  3  4  5  6 
-0.05813 0.55323 0.05813 -0.55323 -0.12192 0.12192 

Coefficients: (1 not defined because of singularities) 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)   -0.15150 0.23249 -0.652 0.561 
myGroup11   0.03927 0.23249 0.169 0.877 
myGroup21   -0.37273 0.23249 -1.603 0.207 
myGroup11:myGroup21  NA   NA  NA  NA 

Residual standard error: 0.465 on 3 degrees of freedom 
Multiple R-squared: 0.5605,  Adjusted R-squared: 0.2675 
F-statistic: 1.913 on 2 and 3 DF, p-value: 0.2914 

> coef(summary(myModel)) 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept) -0.15149826 0.2324894 -0.6516352 0.5611052 
myGroup11 0.03926774 0.2324894 0.1689012 0.8766203 
myGroup21 -0.37273117 0.2324894 -1.6032180 0.2072173 

> summary(myModel)$coefficients 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept) -0.15149826 0.2324894 -0.6516352 0.5611052 
myGroup11 0.03926774 0.2324894 0.1689012 0.8766203 
myGroup21 -0.37273117 0.2324894 -1.6032180 0.2072173 

Antwort

1

Warum nicht Sie extrahieren nur die Koeffizienten aus dem angepassten Modell:

> coef(myModel) 
      (Intercept)    myGroup1b 
      -0.48496169    -0.07853547 
      myGroup2second myGroup1b:myGroup2second 
       0.74546233      NA 

, dass die einfachste Option scheint.

na.action hat nichts damit zu tun. Beachten Sie, dass Sie nicht in Ihrem Beispiel na.action = na.pass übergeben haben.

na.action ist eine globale Option für NA in dem Datenhandling zu einer Modellanpassung geführt, in der Regel in Verbindung mit einer Formel; es ist auch der Name einer Funktion na.action(). R baut aus dem data Argument und der symbolischen Darstellung des in der Formel ausgedrückten Modells den sogenannten Modellrahmen auf. An diesem Punkt würde NA erkannt werden und die Standardoption für na.action ist na.omit() zu verwenden, um die NA aus den Daten zu entfernen, indem Proben mit NA für eine Variable fallen gelassen werden. Es gibt Alternativen, am nützlichsten na.exclude(), die NA während der Montage entfernen würden, aber NA an den richtigen Stellen in die angepassten Werte, Residuen usw. hinzufügen. Lesen Sie ?na.omit und ?na.action für mehr, plus ?options für mehr dazu.

+2

Dank für das zu erklären, dass die na.action Einstellungen für dieses Problem nicht relevant sind. Das Extrahieren der Koeffizienten aus dem angepassten Modell könnte als letztes Mittel dienen, aber ich wollte ein paar Spalten für Konfidenzintervalle an die Übersichtstabelle binden. Ich will nicht nur die Schätzungen; Ich möchte die Standardfehler, p-Werte, etc., mit Konfidenzintervalle am Ende angehängt. Ich könnte die Tabelle von Grund auf neu erstellen, aber ich dachte, es könnte eine einfache Einstellung geben, die geändert werden muss, um 'coef (Zusammenfassung (myModel))' und 'confint (myModel)' zu erhalten, um die gleiche Anzahl von Zeilen in der gleichen Reihenfolge auszugeben . – Jdub

+0

@Jdub, hast du das herausgefunden? Ich habe genau das gleiche Problem. –

+0

gleich hier! gleiches Problem – vagabond

0

Die Dokumentation von summary.lm sagt 'Aliased Koeffizienten sind in der Rückgabe-Objekt weggelassen aber durch die Drucken Methode wiederhergestellt'. Es scheint, dass es keinen Parameter gibt, um dieses Auslassen zu kontrollieren. Es gibt noch eine weitere Arbeit neben der Verwendung von Coef (Zusammenfassung (myModel)) wie von @Gavin Simpson vorgeschlagen. Sie können eine Matrix

nr <- num_regressors - nrow(summary(myModel)$coefficients) ##num_regressors shall be defined previously 
nc <- 4 
rnames <- names(which(summary(myModel)$aliased)) 
cnames <- colnames(summary(myModel)$coefficients) 
mat_na <- matrix(data = NA,nrow = nr,ncol = nc, 
      dimnames = list(rnames,cnames)) 

erstellen und dann rbind die beiden matrice:

mat_coef <- rbind(summary(myModel)$coefficients,mat_na) 
Verwandte Themen