2017-09-18 2 views
4

Ich versuche, mehrere Regressionen auf einen ausgewählten Teil eines Datenrahmens auszuführen. Es gibt 22 Spalten. Einer ist "DATUM", einer ist "INDEX" und S1, S2, S3 ... S20.Führen Sie eine Regression für bestimmte Teile eines Datenrahmens und extrahieren Schätzungen + Fehler

Ich betreibe die Regression auf diese Weise:

Regression <- lm(as.matrix(df[c('S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20')]) ~ df$INDEX) 
Regression$coefficients 

1) Wie kann ich den Code kürzer zu machen? Genauso wie die Verwendung eines Intervalls, um R zu sagen: nehmen Sie die Spalten S1 bis S20 als erklärende Variablen und führen Sie die Regression für sie mit der abhängigen Variablen INDEX aus.

2) Regression Formel ist: a + b * INDEX + Fehler Dann extrahieren Sie alle "b" Schätzungen aus der Regression. Nehmen wir an, die Spalten haben 10 Zeilen, also müssen 10 Schätzungen sein. Extrahieren Sie auch alle Fehler: das müssen 10 Fehler in jeder Spalte sein, und insgesamt 10 * 20 = 200 Fehler insgesamt.

Da ich keine Erfahrung mit R habe, ist jede Art von Hilfe willkommen! Vielen Dank!

+0

Sorry, ich habe es durcheinander gebracht: S Variablen sind abhängig und der INDEX ist erklärend. S = a + b * INDEX + Fehler – Consti

Antwort

2

Sie könnten Ihren Code wesentlich verkürzen, indem paste() statt manuell mit allen Spaltennamen auszuschreiben:

Regression <- lm(as.matrix(df[paste0("S", 1:20)]) ~ df$INDEX) 

die Regressionsschätzungen zuzugreifen, Regression$fitted.values verwenden. Verwenden Sie für die Fehler Regression$residuals.

Beispiel der iris Daten: verwenden

data(iris) 
Regression <- lm(Sepal.Length + Sepal.Width ~ Petal.Length, data = iris) 

head(Regression$fitted.values) 
    Sepal.Length Sepal.Width 
1  4.879095 3.306775 
2  4.879095 3.306775 
3  4.838202 3.317354 
4  4.919987 3.296197 
5  4.879095 3.306775 
6  5.001771 3.275039 

head(Regression$residuals) 
    Sepal.Length Sepal.Width 
1 0.2209054 0.1932249 
2 0.0209054 -0.3067751 
3 -0.1382024 -0.1173536 
4 -0.3199868 -0.1961965 
5 0.1209054 0.2932249 
6 0.3982287 0.6249605 
+0

Das sieht gut aus! Wie kann ich das gleiche tun, sollte ich 20 Spalten mit unterschiedlichen Namen ohne Nummern haben. Z.B. "Sa", "Sb", "Sc", "Sd" usw. Dann konnte ich [paste0 ("S", 1:20)] nicht benutzen? Wie kann ich R sagen, in den Datenrahmen zu gehen und mit der Spalte 1 zu beginnen und mit der Spalte 20 zu enden, und die Spalten in ihrer vollen Länge zu nehmen. Vielleicht denke ich zu sehr wie ein Excel-Benutzer, wo ich die Spalten und Zeilen vor der Berechnung auswählen kann. – Consti

+0

Siehe @ ira's Antwort, Sie können einfach Ziffern für die Position der Spalten im Datenrahmen verwenden, z. 'df [1:20]' für die ersten 20. – LAP

3

Wenn Sie 22 Spalten haben, gerade Position der Spalten in dem Datenrahmen. Unter Verwendung des gleichen Datensatzes als LAP in seiner Antwort:

# load iris dataset 
date(iris) 
# run regression 
Regression <- lm(as.matrix(iris[1:3]) ~ Petal.Width, data = iris) 

Dies würde in Ihrem Fall, übersetzen, um so etwas wie:

# run the regression 
Regression <- lm(as.matrix(df[3:22]) ~ INDEX, data = df) 

Ihre abhängigen Variablen in den Spalten 3 bis 22 (und ersten Spalte sind Angenommen ist das Datum, der zweite ist der Index, oder so ähnlich)

Verwandte Themen