Trenderkennung

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Trenderkennung

Beitrag von bigben »

Das Paket "MASS" bietet eine Funktion rlm(), die ähnlich funktioniert wie lm(). Aber natürlich hast Du in R die Qual der Wahl: https://cran.r-project.org/web/views/Robust.html

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: Trenderkennung

Beitrag von EDi »

Ok bezüglich Normalverteilung wollte ich nur auf den Kommentar von EDi reagieren ;)
Und ich hab nur auf den Kommentar von Consuli reagiert ;)
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.
wkowalski

Re: Trenderkennung

Beitrag von wkowalski »

Hey!

Habe jetzt meine Daten mal mit der robusten linearen Regression (rlm() aus dem Package MASS) behandelt und folgende Ergebnisse erzielt:

hkl1_linrob.png
hkl1_linrob.png (6.43 KiB) 1569 mal betrachtet
hklm50_linrob.png
hklm50_linrob.png (6.79 KiB) 1569 mal betrachtet
Wie man sieht ändert die robuste Regression die gefittete Gerade nur minimal. Gibt es eine Möglichkeit ein Konfidenzintervall o.ä. festzulegen? Dann könnte man sich ja beim fitten auf die Werte konzentrieren die zu 95 % im Intervall liegen?

Vielleicht habe ich aber bei der Anwendung aber auch etwas falsch gemacht?!

Anbei auch noch mein Code:

Code: Alles auswählen

hkl_m <- read.csv("morb_kh_kreislauf_m.csv",header = TRUE,sep=";",dec=",")

years <- hkl_m$Jahr

rate1y <- hkl_m$X1.Jahr

lin1 <- lm(rate1y ~ years)
rob1 <- rlm(rate1y ~ years)

plot(years,rate1y,xlim=c(1988,2015),ylim=c(0,0.002), xlab="Jahre",ylab="Erkrankungsraten")
title("Herz-Kreislauf Erkrankung: Männer 1 Jahr")
abline(lin1, lty="dashed")
abline(rob1, col="red")
legend(2009,0.0004, legend = c("lin Model","robust Model"), lty=c(2,1), col=c("black","red"))


rate50y <- hkl_m$X50.Jahr

lin50 <- lm(rate50y ~ years)
rob50 <- rlm(rate50y ~ years)

plot(years,rate50y,xlim=c(1988,2015),ylim=c(0.03,0.05), xlab="Jahre",ylab="Erkrankungsraten")
title("Herz-Kreislauf Erkrankung: Männer 50 Jahre")
abline(lin50, lty="dashed")
abline(rob50, col="red")
legend(2009,0.049, legend = c("lin Model","robust Model"), lty=c(2,1), col=c("black","red"))

LG
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Trenderkennung

Beitrag von EDi »

Dann könnte man sich ja beim fitten auf die Werte konzentrieren die zu 95 % im Intervall liegen?
Hmm, ich glaube du verwechselst hier konfidenzinterval mit Predictioninterval?

Auch glaube Ich, dass ein linearer Trend hier kein gutes Model liefert...
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.
wkowalski

Re: Trenderkennung

Beitrag von wkowalski »

Was würdest du empfehlen? Ist ein bisschen blöd, dass ich soviele Datensätze habe. Prinzipiell wäre es ja wünschenswert, je nach Trend jenes Modell zu verwenden, dass sich durch die geringste Abweichung auszeichnet. Hab aber leider überhaupt keine Ahnung wie ich das angehen soll. :?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Trenderkennung

Beitrag von bigben »

Dass die Geraden sich je nur geringfügig unterscheiden, finde ich erstmal gut. Aber wenn Du das automatisch auf ganz viele Datensätze anwendest, ist es doch beruhigend, für einflussreiche Ausreißer vorgesorgt zu haben. Nicht?
---
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: Trenderkennung

Beitrag von bigben »

wkowalski hat geschrieben: Do Sep 28, 2017 9:28 pm Was würdest du empfehlen? Ist ein bisschen blöd, dass ich soviele Datensätze habe. Prinzipiell wäre es ja wünschenswert, je nach Trend jenes Modell zu verwenden, dass sich durch die geringste Abweichung auszeichnet. Hab aber leider überhaupt keine Ahnung wie ich das angehen soll. :?
Wenn Du keine Angst vor Overfitting hast: wir behandeln in einem anderen Thread doch gerade schrittweise Regression. Mach halt eine lineare Regression mit quadratischem, kubischen, logarithmischem usw. Term und lass step () die jeweils optimal passende heraussuchen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
wkowalski

Re: Trenderkennung

Beitrag von wkowalski »

bigben hat geschrieben: Do Sep 28, 2017 11:13 pm Aber wenn Du das automatisch auf ganz viele Datensätze anwendest, ist es doch beruhigend, für einflussreiche Ausreißer vorgesorgt zu haben. Nicht?
Ja, das finde ich auch! :)
bigben hat geschrieben: Do Sep 28, 2017 11:17 pm
Wenn Du keine Angst vor Overfitting hast: wir behandeln in einem anderen Thread doch gerade schrittweise Regression. Mach halt eine lineare Regression mit quadratischem, kubischen, logarithmischem usw. Term und lass step () die jeweils optimal passende heraussuchen.
O.k das muss ich mir noch genauer ansehen. Overfitting sollte wenn möglich vermieden werden, sonst hat mein Modell ja überhaupt keine Aussagekraft mehr.
consuli
Beiträge: 479
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Trenderkennung

Beitrag von consuli »

Bei den geplotteten 50-jährigen Männern ist der Trend fallend, während er bei einjährigen Männern (mannlichen Säuglingen?) ansteigt. Deshalb würde ich Dir zu einem Mixed-Effect Model raten.

Abweichungen von der Normalverteilung sind keine Kontraindikationen für einen kleinste Quadrate Schätzer (Gauss-Markov Theorem), nur erhebliche Varianzinhomogenität wäre eine echte Kontraindikation. Deshalb sind x-y Plots immer sehr wichtig. Da Du eine Trendanalyse machst, müsstest Du eigentlich dreidimensional xy-plotten (Krankheitsrate über Prediktor und Zeit).

Aussreicher hingegen können schon gravierend sein. Jedoch sind nur die Ausreisser wirklich einflussreich, die neben ihrem Ausreißen (gemessen in Zielvariable - hier Krankheitsrate) gleichzeitig im Extrembereich eines Prediktors liegen (nahe Minimum oder Maximum).

Consuli
Irmgard.
wkowalski

Re: Trenderkennung

Beitrag von wkowalski »

consuli hat geschrieben: Mi Okt 04, 2017 9:15 pm Da Du eine Trendanalyse machst, müsstest Du eigentlich dreidimensional xy-plotten (Krankheitsrate über Prediktor und Zeit).
Nun gut, ich hab aber leider nur die Anzahl der Fälle die in bestimmten Jahren aufgetreten sind und keinen weiteren Parameter der mir als Prediktor dienen könnte... irgendeine Idee was ich da noch mit reinnehmen könnte?

LG
Antworten