2017-01-04 3 views
0

Ich möchte eine ganze Reihe von Regressionen über jede Variable in einem Datenrahmen ausführen, und speichern Sie dann die Restabweichung Wert aus jeder Regression in einem neuen Vektor, wie die Schleife entlang geht.Schleife über Spaltennamen in Regression

Der Rahmen heißt "cw". Die ersten paar Variablen sind nur Metadaten, also ignorieren Sie diese. Ich versuche, die folgenden:

deviances<-c() 
for (x in colnames(cw)[1:8]){deviances[x]<-NA} 
for (x in colnames(cw)[8:27]){ 
    model<-glm(cwonset ~ x, fmaily = binomial, data = cw) 
    append(deviances, model$deviance) 
} 

jedoch gibt es den Fehler:

Error in model.frame.default(formula = cwonset ~ x, data = cw, drop.unused.levels = TRUE) : 
    variable lengths differ (found for 'x') 

Jede Idee, warum?

+2

Machen Sie ein reproduzierbares Beispiel. Das würde uns helfen, dies zu beantworten. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-beispiel – boshek

+0

Ich stimme @boshek völlig zu –

Antwort

2

ohne Daten, musste ich auf mtcars angewiesen, um Ihnen zu helfen, keine Notwendigkeit von for Schleife auch. Ich nahm mpg als die abhängige Variable an

Logic: sapply hilft mir, o Schleife durch jeden colname auf einmal und dann regressiere ich gerade das. Es ist intern eine for Schleife, obwohl

sapply(colnames(mtcars[-1]), function(x) { 
             form <- as.formula(paste0("mpg~", x)) 
             model <- glm(form, data = mtcars) 
             model$deviance}) 
#  cyl  disp  hp  drat  wt  qsec  vs  am  gear  carb 
# 308.3342 317.1587 447.6743 603.5667 278.3219 928.6553 629.5193 720.8966 866.2980 784.2711