for-Schleife bei linearer Regression

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
luckynele
Beiträge: 11
Registriert: Fr Mai 17, 2019 11:39 am

for-Schleife bei linearer Regression

Beitrag 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!!
Zuletzt geändert von luckynele am Fr Jun 21, 2019 2:39 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: for-Schleife bei linearer Regression

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: for-Schleife bei linearer Regression

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: for-Schleife bei linearer Regression

Beitrag 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
luckynele
Beiträge: 11
Registriert: Fr Mai 17, 2019 11:39 am

Re: for-Schleife bei linearer Regression

Beitrag 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...
Zuletzt geändert von luckynele am Fr Jun 21, 2019 2:37 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: for-Schleife bei linearer Regression

Beitrag 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
luckynele
Beiträge: 11
Registriert: Fr Mai 17, 2019 11:39 am

Re: for-Schleife bei linearer Regression

Beitrag 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! :)
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: for-Schleife bei linearer Regression

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: for-Schleife bei linearer Regression

Beitrag 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.
Antworten