Seite 1 von 1

Regression alle zwei Jahre

Verfasst: Mi Jun 16, 2021 10:22 pm
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) 255-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)

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 8:11 am
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

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 8:27 am
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

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 7:26 pm
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 = ","))

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 7:40 pm
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)

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 8:11 pm
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

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 9:34 pm
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-)

Re: Regression alle zwei Jahre

Verfasst: Do Jun 17, 2021 9:34 pm
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-)

Re: Regression alle zwei Jahre

Verfasst: So Jun 27, 2021 10:44 am
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. ?

Re: Regression alle zwei Jahre

Verfasst: Mo Jun 28, 2021 10:00 am
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.