Seite 1 von 1

for-Schleife bei linearer Regression

Verfasst: Fr Mai 17, 2019 1:59 pm
von luckynele
Hallo zusammen,

ich bin- was R betrifft leider ziemlich unerfahren daher habe ich gehofft hier etwas Hilfe zu finden.

Ich habe bereits eine lineare Regression folgendermaßen durchgeführt:

Code: Alles auswählen

REG1 <- lm(y ~ as.matrix(data)+0)
Ich möchte iterationsweise immer eine Zeile mehr von der Matrix hinzufügen bis ich das Ende - Zeile 1113 erreicht habe (bzw. immer einen 1-er mehr in meinen Vektor). Bei jeder Regression sollen die Koeffizienten gespeichert werden.
Ich habe leider keine Ahnung von Schleifen und habe gehofft mir kann hier jemand weiterhelfen.


Ich bin für jeden Tipp dankbar!!

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 17, 2019 2:08 pm
von jogo
Hallo Nele,

willkommen im Forum!
Ich habe Deine ursprüngliche Regression etwas aufgehübscht:

Code: Alles auswählen

REG1 <- lm(rep(1, times = 120) ~ . + 0, data=famafrench[451:570,])
Schau mal, ob das so funktioniert.
Den Rest gucke ich mir auch gleich an ...
... ich denke da an lapply() ...

Und Du brauchst nur die Koeffizienten der Regression, etwa wie bei:

Code: Alles auswählen

lm( rep(1, 120) ~ . + 0, data=iris[6:125, -5])$coef
:?:
Wenn ja, dann sieht es beim Dataframe iris bei mir so aus:

Code: Alles auswählen

sapply(126:nrow(iris), function(i) lm( rep(1, i-5) ~ . + 0, data=iris[6:i, -5])$coef)
inzwischen hat Bernhard eine Antwort geschrieben - jetzt sieht mein Kommentar dazu etwas drollig aus:
Auch ich habe ein ungutes Gefühl, wenn man eine Konstante als abhängig von einer/mehreren Variablen betrachtet.
Bitte gönne uns eine Erklärung.

Gruß, Jörg

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 17, 2019 2:12 pm
von bigben
Hallo,

ich muss zugeben, dass ich die Aufgabenstellung noch nicht erfasst habe. Soll denn jetzt rep(1,...) as abhängige Variable stehen oder Y? Was ist Y? Im Text willst Du in jedem Durchlauf eine Zeile mehr von X einbringen, in Deinem Code-Vorschlag bringst Du mit steigendem i jedes Mal eine Zeile weniger ein?

Vorschlag 1: Um die Koeffizienten nicht zu verlieren, ließ meine Hinweise hier: viewtopic.php?f=20&t=30

Vorschlag 2: Damit wir mitmachen können, erstelle bitte ein reproduzierbares Minimalbeispiel: viewtopic.php?f=20&t=11 bzw. https://stackoverflow.com/help/reprex

Vorschlag 3: Mein Bauchgefühl zeigt ein Hohes Risiko für ein XY-Problem an: http://xyproblem.info/ Überleg nochmal, ob Du uns nicht erklären willst, wofür das gut sein soll.


LG,
Bernhard

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 17, 2019 4:10 pm
von schubbiaschwilli
Gude!

Frage zum Verständnis: Willst du einfach nur ein FF3F (https://de.wikipedia.org/wiki/Fama-Fren ... orenmodell) nachrechnen, und die Regressoren über verschiedene Zeiträume bzw. Intervalle berechnen?

Dank&Gruß
schubbiaschwilli

Re: for-Schleife bei linearer Regression

Verfasst: Sa Mai 18, 2019 10:14 am
von luckynele
Vielen Dank schon mal für die Antworten.

Dass der Einser Vektor als abhängige Variable eine Konstante ist, ist so beabsichtigt.
Und so wie Jörg das verstanden hat habe ich es eigentlich gemeint,
also meine erste Regression lautet dann (danke für die Verschönerung):

REG1 <- lm(rep(1, times = 120) ~ . + 0, data=data$coef

die zweite:

REG2 <- lm(rep(1, times = 121) ~ . + 0, data=data)$coef

usw. bis zur letzten Zeile des dataframes.
Das Ergebnis soll dann so ausschauen wie in dem Iris Beispiel aber eben als for- Schleife geschrieben...

Re: for-Schleife bei linearer Regression

Verfasst: So Mai 19, 2019 7:23 am
von jogo
Hallo Nele,

bitte beachte beim Schreiben von Nachrichten die Formatierung von Codestücken:
viewtopic.php?f=20&t=29
Das Ergebnis soll dann so ausschauen wie in dem Iris Beispiel aber eben als for- Schleife geschrieben...
Warum darf es denn kein sapply() sein :?: (siehe meine Lösung)
... Zu dieser Frage möchte ich eine echt stichhaltige Begründung in der Antwort lesen.

Code: Alles auswählen

sapply(126:nrow(iris), function(i) lm( rep(1, i-5) ~ . + 0, data=iris[6:i, -5])$coef)
Bei Dir sollte es so aussehen:

Code: Alles auswählen

sapply(570:nrow(famafrench), function(i) lm(rep(1, times = i-450) ~ . + 0, data=famafrench[451:i,])$coef)
Gruß, Jörg

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 24, 2019 5:40 pm
von luckynele
Hallo Jörg,

leider kann ich dir keine gute Antwort auf die Frage, warum es kein sapply() sein soll geben.
Es funktioniert prima mit der Funktion.
Jedoch muss ich mit dem Ergebnis weiter rechnen und dabei wieder (for) Schleifen verwenden.
Ich hatte gehofft die for- Schleife besser zu verstehen durch das Beispiel.
Aber vielen Dank für deine Hilfe, hat mir trotzdem sehr weitergeholfen! :)

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 24, 2019 7:06 pm
von EDi
Jedoch muss ich mit dem Ergebnis weiter rechnen und dabei wieder (for) Schleifen verwenden.
Solche Probleme hätte ich via functional programming mit purrr gelöst. Zusammen mit dplyr und list-cols ist das extrem mächtig und expressiv.

Beispiel kann ich grade keine liefern, findet man aber im Internetz.

Re: for-Schleife bei linearer Regression

Verfasst: Fr Mai 24, 2019 9:44 pm
von jogo
Eigentlich ist es mir schon klar, dass die Didaktik in Programmiersprachen immer mindestens eine Generation hinterher hinkt.
Ich selber versuch beim Einstieg in die Programmierung in R, die for-Schleife kaum zu erwähnen. ... aber auch das ist schwierig.
Wie seht Ihr das? Habt Ihr Tipps/Kniffe/Tricks bezüglich Didaktik in R?

Gruß, Jörg
p.s.: wahrscheinlich müssen wir hierfür ein neues Thema aufmachen.
Ich wollte es nur gerade mal hier anhängen, weil es halbwegs passt.