2016-06-17 9 views
0

Ich versuche ein Regressionsmodell anzupassen, um Spenden in Diktatorspielen zu erklären. Da ich viele Variablen habe, möchte ich den Prozess mit einer "for" -Schleife automatisieren. Ich beginne jetzt mit univariaten Modellen. Wenn ich die Passungen fit[1:24] drucke/zusammenfasse, werden nur die Abschnitte und Koeffizienten angezeigt. Es scheint, dass die p-Werte nicht gespeichert werden?lm in for Schleife keine p-Werte gespeichert? (in R)

predictor<-0 
fit<-0 
dictatorgame<-mydata$dictatorgame 
sumres<-0 
pVal<-0 

for(i in 1:24) #24 predictor variables stored in column 1-24 in mydata 
{ 
predictor<-mydata[i] 
unlist(predictor) 
fit[i]<-lm(dictatorgame~unlist(predictor)) 
} 

habe ich versucht, zwei verschiedene Lösungen, die ich hier auf SO gefunden, beide scheinen zu denken, dass die Objekte Atom:

sumres[i]=summary(fit[i]) 
pf(sumres[i]$fstatistic[1L], sumres[i]$fstatistic[2L],sumres[i]$fstatistic[3L], lower.tail = FALSE) 

und

pVal[i] <- (fit[i])$coefficients[,4] 

aber immer am Ende immer Fehlermeldungen $ operator is invalid for atomic vectors.

+0

'Prädiktor <-mydata [i]' scheint falsch. Wenn 'mydata' ein data.frame ist, sollte es' prediktor <-mydata [, i] 'sein. – Alex

+0

Ja, das ist eine sauberere Lösung für das, was ich getan habe ('unlist (predictor)'). Nachdem ich das in meinem Code geändert habe, sehe ich immer noch keine p-Werte (Abschnitte und Koeffizienten scheinen jedoch korrekt zu sein). – YaeVo

Antwort

2

Ich habe einige Daten generiert, um mehrere Regressionen durchzuführen. Am Ende finden Sie die ersten drei Elemente der Ausgabeliste. Ist es das, was du willst?

dependent <- rnorm(1000) 
independent <- matrix(rnorm(10*1000), ncol = 10) 

result <- list() 
for (i in 1:10){ 
    result[[i]] <- lm(dependent ~ independent[ ,i]) 
} 

lapply(result, function(x) summary(x)$coefficients) 

[[1]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.02890665 0.03167108 -0.9127144 0.3616132 
independent[, i] -0.04605868 0.03138201 -1.4676776 0.1425069 

[[2]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03142412 0.03161656 -0.9939134 0.3205060 
independent[, i] -0.03874678 0.03251463 -1.1916723 0.2336731 

[[3]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03208370 0.03162904 -1.0143749 0.3106497 
independent[, i] 0.02089094 0.03189098 0.6550737 0.5125713 
+0

Das ist es, es funktioniert! Vielen Dank. Würde es Ihnen etwas ausmachen, zwei Dinge auszuarbeiten? 1. 'Ergebnis [[i]]' Wie genau soll die Doppelklammer interpretiert werden? ist die 'Funktion (x) Zusammenfassung (x) $ coefficient' ein Workaround, um den atomaren Vektorfehler zu vermeiden? – YaeVo

+1

Yaevo: Ergebnis ist eine Liste, '[' 'Zugriff auf ein Element (hier die Nummer i)' lapply' extrahieren Koeffizienten für jede Regression und die Ausgabe ist immer noch eine Liste. Ihr atomarer Fehler war auf etwas anderes zurückzuführen. Wenn Sie nur p-Werte extrahieren möchten, können Sie verwenden: 'lapply (result, function (x) summary (x) $ coefficient [," Pr (> | t |) "]. Beachten Sie auch, dass wenn Sie nur extrahieren P-Werte, die Sie vielleicht daran interessiert sind, alles zum Beispiel mit 'do.call (" cbind ", results) zu kombinieren' –

+0

Ich bin mir auch nicht sicher, woher Ihre Fehlermeldungen kommen. Ich konnte es nicht mit meinem Beispiel reproduzieren. Wichtig hier ist Sie können jedoch keine 'lm'-Objekte in einem Vektor speichern, sondern müssen sie in einer Liste speichern. Ich empfehle, über Datenstrukturen in R zu lesen. Wenn etwas noch nicht klar ist, fragen Sie einfach. – Alex