2010-12-13 4 views
3

Was soll ich tun, um eine Bedingung zu machen ist, wenn es eine bestimmte Variable in linearem ModellConditional Ausdruck für, wenn die Variable in Modell

Beispiel. Wenn es ein B in einem linearen Modell gibt

model <- lm(Y ~ A + B + C) 

Ich möchte etwas tun. Ich habe die Zusammenfassungsfunktion zuvor verwendet, um auf R-Quadrat zu verweisen. Ich bin auf der Suche nach so etwas wie diese

if (B %in% summary(model)$xxx) 

oder

summary(model)$r.squared 

Wahrscheinlich

if (B %in% summary(model)[xxx]) 

Aber ich kann nicht xxx finden. Bitte hilfe =)

Antwort

1

Eine Möglichkeit ist, die Modellbegriffe aus dem angepassten Modell zu übernehmen und das term.labels Attribut abzufragen. Verwendung einiger Dummy-Daten:

set.seed(1) 
DF <- data.frame(Y = rnorm(100), A = rnorm(100), B = rnorm(100), C = rnorm(100)) 
model <- lm(Y ~ A + B + C, data = DF) 

Die Begriffe Objekt enthält die Etiketten in einem Attribut:

> attr(terms(model), "term.labels") 
[1] "A" "B" "C" 

So überprüfen, ob "B" in diesem Satz von Etiketten ist:

> if("B" %in% attr(terms(model), "term.labels")) { 
+  summary(model)$r.squared 
+ } 
[1] 0.003134009 
0

A (etwas unelegante) mögliche Lösungen wären:

length(grep("\\bB\\b",formula(model))) > 0 

wobei \\b mit der Wortgrenze übereinstimmt und B der Name der Variablen ist, nach der Sie suchen.

+0

Würde "^ B" Arbeit als auch? –

+1

@Roman Äquivalent von aix Ausdruck ist '"^[[: Leerzeichen:]] * B [[: Leerzeichen:]] * $ "'. Aber in diesem speziellen Fall ''^B "' funktioniert auch (und sicherer '"^B $ "' – Marek

4

Try this:

if ("B" %in% all.vars(formula(model))) ... 
2

andere Art und Weise:

if ("B" %in% names(coef(model))) 
+3

Dies wird nicht funktionieren, wenn 'B' ein Faktor ist. – Aniko

+1

@Aniko Guten Fang. Meine Lösung mit' Variable .names 'scheiterte mit Faktoren auch. – Marek

+0

@Aniko: wahr in der Tat – nico

2

noch eine weitere Möglichkeit:

if ("B" %in% variable.names(model)) ... 
+0

Variable.names war genau das, was ich suchte. –

+0

@Roman Im Falle der Faktor-Variable erhalten Sie den Namen in Form "Variable-Level" (wie Aniko in einem Kommentar zu [Nico Antwort] (http://stackoverflow.com/questions/4429361/conditional-expression-for-if-variable-present-in-model/4429752#4429752)). – Marek