2017-09-29 1 views
0

Als Erstes bin ich noch ziemlich neu, also meine Methode/mein Denken könnte falsch sein, ich habe einen xlsx-Datensatz in einen Datenrahmen mit R und R Studio importiert. Ich möchte in der Lage sein, die Spaltennamen zu durchlaufen, um alle Variablen mit genau "" in ihnen zu erhalten, um eine einfache lineare Regression auszuführen. Also hier ist mein Code:R-Schleife für Variablennamen zum Ausführen eines linearen Regressionsmodells

indx <- grepl('_10_', colnames(data)) #list returns all of the true values in the data set 
col10 <- names(data[indx]) #this gives me the names of the columns I want 

Hier ist die for-Schleife Ich habe die einen Fehler zurückgibt:

temp <- c() 
for(i in 1:length(col10)){ 
    temp = col10[[i]] 
    lm.test <- lm(Total_Transactions ~ temp[[i]], data = data) 
    print(temp) #actually prints out the right column names 
    i + 1 
} 

Ist es überhaupt möglich, eine Schleife laufen diese Variablen im linearen Regressionsmodell zu platzieren? Der Fehler, den ich bekomme, ist: "Fehler in model.frame.default (formula = Total_Transactions ~ temp [[i]],: variable Längen unterscheiden sich (gefunden für 'temp [[i]]')". Wenn mir jemand zeigen könnte In der richtigen Richtung würde ich sehr dankbar sein. "Danke.

+0

Werfen Sie einen Blick auf [diese] (https://stackoverflow.com/questions/25036007/linear-regression-loop-for-each-independent-variable-individual-against-depend) Frage. Dann, wenn Sie noch Hilfe brauchen, sagen Sie es. –

+0

@RuiBarradas Ich habe diesen Code ausprobiert, aber am Ende, wo es 'res.models [[" mpg ~ disp "]]' heißt, möchte ich, dass alle Variablennamen an Beispiel [[mpg ~ disp + x2 + x3 + angehängt werden .... x18]. – Stick

Antwort

2

Ok, ich eine Antwort würde schreiben. ich den Datensatz mtcars als EXA verwenden mple. Ich glaube, es wird mit Ihrem Datensatz funktionieren.
Zuerst erstelle ich ein Geschäft, lm.test, ein Objekt der Klasse list. In Ihrem Code ordnen Sie die Ausgabe von lm(.) jedes Mal durch die Schleife zu und am Ende hätten Sie nur die letzte, alle anderen wären von den neueren überschrieben worden.
In der Schleife verwende ich dann die Funktion reformulate, um die Regressionsformel zusammenzusetzen. Es gibt andere Möglichkeiten, dies zu tun, aber dieses ist einfach.

# Use just some columns 
data <- mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt")] 
col10 <- names(data)[-1] 

lm.test <- vector("list", length(col10)) 

for(i in seq_along(col10)){ 
    lm.test[[i]] <- lm(reformulate(col10[i], "mpg"), data = data) 
} 

lm.test 

Jetzt können Sie die Ergebnisliste für alle möglichen Dinge verwenden. Ich schlage vor, Sie verwenden lapply und Freunde dafür.
Zum Beispiel der Koeffizienten zu extrahieren:

smry <- lapply(lm.test, summary) 

Es wird sehr einfach, sobald man mit *apply Funktionen vertraut ist:

cfs <- lapply(lm.test, coef) 

Um die Zusammenfassungen zu erhalten.

+0

danke! Ich habe das in meinen Code implementiert und es funktioniert großartig! Ich habe die ersten beiden Zeilen von mir verwendet, um alle Spalten zu erhalten, und es funktionierte immer noch. – Stick

+0

Wäre es auch möglich, die Zusammenfassungen zu kombinieren? wenn keine Sorgen – Stick

+1

@Stick Versuchen Sie 'do.call (rbind, lapply (smry,' [['," Koeffizienten "))'. –

0

Sie können eine temporäre Teilmenge erstellen, in der Sie nur die in Ihrer Regression verwendeten Spalten auswählen. Auf diese Weise müssen Sie den temporären Namen nicht in die Formel injizieren .

, um Ihren Code ragt, soll dies den Trick.

for(i in 1:length(col10)){ 
tempSubset <- data[,c("Total_Transactions", col10[i]] 
lm.test <- lm(Total_Transactions ~ ., data = tempSubset) 
i + 1 
} 
+0

die Teilmenge, die dies erstellt, ist nur "Total_Transactions" und die letzte Variable in "col10" – Stick

Verwandte Themen