Regression alle zwei Jahre

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
h.itup
Beiträge: 11
Registriert: So Jun 06, 2021 5:34 pm

Regression alle zwei Jahre

Beitrag von h.itup »

Hallo,

ich habe einen Datensatz bestehend aus einigen Ländern, Spalte "Kennzahl", und einen Zeitraum von 8 Jahren (immer derselbe Zeitrahmen). Hier ein kleiner Ausschnitt des Datensatzes
dataframe1.csv
(439 Bytes) 251-mal heruntergeladen

Für die Regression je Unternehmen führe ich folgenden Code durch. Nun möchte ich allerdings eine Regression alle zwei Jahre durchführen, sodass ich pro Unternehmen vier Regressionen haben müsste. Ist es möglich dies in meinen bisherigen Code zu ergänzen? Oder muss ich für diesen Fall einen anderen Code verwenden?

Code: Alles auswählen

library(lme4)
library(broom)
library(purrr)
library(gt)

modell1 <- lme4::lmList(X~ Y | Kennzahl, df)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Regression alle zwei Jahre

Beitrag von bigben »

Hmmm,

Code: Alles auswählen

> daten <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1493")
> str(daten)
'data.frame':	24 obs. of  4 variables:
 $ Kennzahl: int  1 1 1 1 1 1 1 1 2 2 ...
 $ JAHR    : int  1994 1995 1996 1997 1998 1999 2000 2001 1994 1995 ...
 $ X       : Factor w/ 17 levels "1","1,231,321",..: 6 7 4 1 2 8 3 13 12 10 ...
 $ Y       : Factor w/ 22 levels "1,231","1,565",..: 22 16 4 9 18 5 1 3 14 12 ...
@all Wäre nett, wenn mir jemand einen schönen Trick verraten könnte, wie man die Kommas aus den Zahlen von X und Y schon beim Einlesen verarbeitet, sodass X und Y als numeric und nicht als Factor erscheinen. Ich kenne bislang nur Gebastel.

Falls Ihr auch keinen wirklich guten WEg habt, hier ist ein dput der Daten:

Code: Alles auswählen

df <- structure(list(Kennzahl = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 55L, 55L, 55L, 55L, 55L, 55L, 55L, 
55L), JAHR = c(1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 
2001L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 
1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L), X = c(2256L, 
3161561L, 13213L, 1L, 1231321L, 321L, 13L, 54L, 5L, 4123L, 54L, 
6L, 13L, 5L, 46L, 845L, 8L, 84L, 1L, 13L, 156L, 1L, 6L, 4L), 
    Y = c(994994L, 5542L, 22L, 4566L, 523333L, 222222L, 1231L, 
    2131L, 465L, 45L, 446L, 54L, 5555L, 45L, 55L, 4456L, 4L, 
    1565L, 312312L, 8445631L, 454545L, 465L, 48L, 4648L)), .Names = c("Kennzahl", 
"JAHR", "X", "Y"), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "17", "18", "19", "20", "21", "22", "23", "24"))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Regression alle zwei Jahre

Beitrag von bigben »

Das geht bestimmt noch eleganter, aber ich mach mal einen Aufschlag, damit hier schonmal was steht:

Code: Alles auswählen

df$diade = df$JAHR %/% 2 # eindeutige Bezeichnung für zusammenhängende 2 Jahre

by(df, list(df$Kennzahl, df$diade), function(d) lm(X ~ Y, data = d))
Das macht dann aus den 24 Zeilen eine Liste mit 12 Regressionen und vergisst aufzuschreiben, welche welche ist. Das müsste man sich dann aus

Code: Alles auswählen

ergebnis <- by(df, list(df$Kennzahl, df$diade), function(d) lm(X ~ Y, data = d))
dimnames(ergebnis)
jeweils rekonstruieren.

Wie gesagt, das geht bestimmt eleganter, aber ich muss jetzt erstmal arbeiten.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Regression alle zwei Jahre

Beitrag von EDi »

bigben hat geschrieben: Do Jun 17, 2021 8:11 am @all Wäre nett, wenn mir jemand einen schönen Trick verraten könnte, wie man die Kommas aus den Zahlen von X und Y schon beim Einlesen verarbeitet, sodass X und Y als numeric und nicht als Factor erscheinen. Ich kenne bislang nur Gebastel.
So hier?

Code: Alles auswählen

library(readr)
read_delim("http://forum.r-statistik.de/download/file.php?id=1493",
                           delim = ';', 
           locale = locale(grouping_mark = ","))
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.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Regression alle zwei Jahre

Beitrag von EDi »

und hier mal lmList:

Code: Alles auswählen

library(readr)
library(lme4)

daten <- read_delim("http://forum.r-statistik.de/download/file.php?id=1493",
                           delim = ';', 
           locale = locale(grouping_mark = ","))

daten$diade <- daten$JAHR %/% 2
daten$group <- interaction(daten$diade, daten$Kennzahl)
lme4::lmList(X~ Y | group, daten)
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.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Regression alle zwei Jahre

Beitrag von bigben »

EDi hat geschrieben: Do Jun 17, 2021 7:26 pm So hier?

Code: Alles auswählen

library(readr)
read_delim("http://forum.r-statistik.de/download/file.php?id=1493",
                           delim = ';', 
           locale = locale(grouping_mark = ","))
Ja, das ist schon nicht schlecht. Noch schöner wär's, grouping_mark direkt als Argument zu haben aber hat read die Nase vorne.

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
h.itup
Beiträge: 11
Registriert: So Jun 06, 2021 5:34 pm

Re: Regression alle zwei Jahre

Beitrag von h.itup »

bigben hat geschrieben: Do Jun 17, 2021 8:27 am Das geht bestimmt noch eleganter, aber ich mach mal einen Aufschlag, damit hier schonmal was steht:

Code: Alles auswählen

df$diade = df$JAHR %/% 2 # eindeutige Bezeichnung für zusammenhängende 2 Jahre

by(df, list(df$Kennzahl, df$diade), function(d) lm(X ~ Y, data = d))
Das macht dann aus den 24 Zeilen eine Liste mit 12 Regressionen und vergisst aufzuschreiben, welche welche ist. Das müsste man sich dann aus

Code: Alles auswählen

ergebnis <- by(df, list(df$Kennzahl, df$diade), function(d) lm(X ~ Y, data = d))
dimnames(ergebnis)
jeweils rekonstruieren.

Wie gesagt, das geht bestimmt eleganter, aber ich muss jetzt erstmal arbeiten.

LG,
Bernhard
Merci! 8-)
h.itup
Beiträge: 11
Registriert: So Jun 06, 2021 5:34 pm

Re: Regression alle zwei Jahre

Beitrag von h.itup »

EDi hat geschrieben: Do Jun 17, 2021 7:40 pm und hier mal lmList:

Code: Alles auswählen

library(readr)
library(lme4)

daten <- read_delim("http://forum.r-statistik.de/download/file.php?id=1493",
                           delim = ';', 
           locale = locale(grouping_mark = ","))

daten$diade <- daten$JAHR %/% 2
daten$group <- interaction(daten$diade, daten$Kennzahl)
lme4::lmList(X~ Y | group, daten)
Auch an ein großes Merci 8-)
h.itup
Beiträge: 11
Registriert: So Jun 06, 2021 5:34 pm

Re: Regression alle zwei Jahre

Beitrag von h.itup »

EDi hat geschrieben: Do Jun 17, 2021 7:40 pm und hier mal lmList:

Code: Alles auswählen

library(readr)
library(lme4)

daten <- read_delim("http://forum.r-statistik.de/download/file.php?id=1493",
                           delim = ';', 
           locale = locale(grouping_mark = ","))

daten$diade <- daten$JAHR %/% 2
daten$group <- interaction(daten$diade, daten$Kennzahl)
lme4::lmList(X~ Y | group, daten)
Hallo :)

Ich habe noch einmal eine Frage zu dem Datensatz. Ist es auch möglich Regressionen im folgenden Zeitrahmen durchzuführen:
von 1994 bis 1996, von 1995 bis 1997, von 1996 bis 1998 usw. ?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Regression alle zwei Jahre

Beitrag von EDi »

Ist es auch möglich Regressionen im folgenden Zeitrahmen durchzuführen:
von 1994 bis 1996, von 1995 bis 1997, von 1996 bis 1998 usw. ?
Ja, dazu musst du nur entsprechend deine Gruppierungsvariable anpassen.
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.
Antworten