2016-12-15 1 views
1

Ich versuche ein R-Skript zu schreiben, das für 1000 Datenzeilen eine Regression durchläuft.R Regressionsschleife

Ich möchte auch die Ausgabe in eine CSV-Datei speichern.

Data Link: https://drive.google.com/open?id=0B-W2Dyw4QjoMQ0F1ZFhsdWJORHM

Jede Hilfe wäre toll!

z <- read.csv("Merge.csv", sep=",", header=TRUE, stringsAsFactors=FALSE) 


co<-matrix(NA, nrow=44, ncol = 7) 

## Regression for mkt returns and 7 variables 
for (i in 5:44){ 
    cat(i) 
    temp <- lm(ret~earningsyld+book2mkt+leverage+corptax+financials+Momentum+lnmktcap, na.action="na.omit", data = z[1000*(i-1)+1:1000*i,]) 
    co[i,]<- summary(temp)$coefficient [2:8,1] 
} 
+0

Probieren Sie 'cat (i)' in Ihrer Schleife aus, um zu sehen, auf welcher Iteration Ihre Schleife läuft. Auch einige potentielle Fehler: "naomit" sollte zitiert werden, und Sie haben 'ata' anstelle dessen, was ich mir vorstelle, sollen' Daten' sein. Sie müssen nicht 'z $' vor jeder Variablen in der Formel haben. Ich kann wetten, dass jede Regression den gesamten Datensatz ausführt, der 40.000 Zeilen zu sein scheint. Das wird eine Weile dauern. – Noah

+0

Wenn Sie ein Argument 'data' verwenden, brauchen Sie' z $ 'nicht, weil' lm() 'weiß, von welchem ​​Datensatz Sie zeichnen. Da Sie stattdessen "ata" geschrieben haben, ignoriert 'lm()' diesen Teil und sieht nur 'z $ ret' usw., was sich auf die gesamte Spalte" ret "in Ihrem Dataset bezieht, nicht nur auf die Partition, in der Sie analysieren möchten jede Iteration. – Noah

+0

Vielen Dank für Ihre Antwort. Wenn ich also z $ entferne, erhalte ich die folgende Meldung (Aktualisierter Code oben) "Fehler in co [i,] <- Zusammenfassung (temp) $ coefficent [2: 8, 1]: Die Anzahl der zu ersetzenden Elemente ist kein Vielfaches der Ersetzungslänge " – Malhuneidi

Antwort

0
# Built-in example data 
data("mtcars") 
mtcars <- rbind(mtcars,mtcars,mtcars,mtcars,mtcars,mtcars, 
       mtcars,mtcars,mtcars,mtcars,mtcars) 

# Let's pretend that instead of 1000 rows it's 10, so that I can use builtin data to show you 

co<-matrix(NA, nrow=35, ncol = 1) 

## Regressions 
for (i in 1:floor(nrow(mtcars)/10)){ 
    cat(i) 
    temp <- lm(mpg~cyl, na.action="na.omit", data = mtcars[((i-1)*10)+1:(i*10),]) 
    co[i,] <- summary(temp)$coefficients[2:2,1] 
} 

head(co) 
  [,1] 
[1,] -1.696939 
[2,] -3.461047 
[3,] -2.572180 
[4,] -2.651129 
[5,] -3.023638 
[6,] -2.712391 

Ich glaube, ein Problem mit der Indizierung sowie eine falsche Schreibweise des coefficients Element der Zusammenfassung Objekt war. Alle anderen Probleme sind Datenprobleme. Wenn Sie danach immer noch Probleme haben, stellen Sie sicher, dass Sie die Daten bereitstellen.

Zum Beispiel, wenn ein Problem in den Daten (Singularität, alle fehlenden Werte, keine identifizierende Variation, etc.) die Unschätzbarkeit eines Koeffizienten verursacht, dann wird es die Größe der zurückgegebenen Zusammenfassung ändern und Ihre Schleife brechen. Die einzige Lösung wäre, Ihre Daten zu bereinigen oder Ihr Modell zu ändern, um die Verwendung von fehlerhaften Daten zu vermeiden.

+0

Danke. Ich bin unglaublich neu in R (Ich habe erst vor ein paar Stunden angefangen zu programmieren). Ich habe den Code gemäß Ihrer Rückmeldung geändert. Im Wesentlichen möchte ich eine Ausgabe haben, bei der ich die Koeffizienten für jede der Iterationen für jede der unabhängigen Variablen in einer Tabelle erhalten könnte. Überschriften wären vorzugsweise die unabhängigen variablen Koeffizienten. Ich habe einen Link zu dem Datensatz in der ursprünglichen Anweisung hinzugefügt. Danke für Ihre Hilfe! – Malhuneidi