Hallo allerseits,
ich habe ein grundlegendes Problem damit, Kurven meiner gefitteten Funktion mit predictions in Plots zu legen. Hier ein aktuelles Beispiel, bei dem mein kleines R-Einmaleins in R-atlosigkeit mündet:
Es ist bereits erkennbar, dass es sich nicht um eine lineare Regression handelt (Grafik weiter unten). Daher habe ich verschiedene Funktionen ausprobiert und getestet.
mod <-glm(Grundfl..ha ~ Year, data=Grundfl)
mod1<- glm(log(Grundfl..ha) ~ Year, data=Grundfl)
mod2 <- glm(log(Grundfl..ha) ~ Year + I(Year^2), data=Grundfl)
mod ist die normale lineare Funktion.
summary(mod2) ergab den niedrigsten AIC-Wert und stellt somit die am besten passende Funktion dar (zumindest habe ich das so in meinem Statistics-with-R- Kurs gelernt).
Ich möchte nun eine Linie in den Plot legt, die den Anstieg meiner Grundfläche/ha (y-Achse) bestmöglich nachbildet. Sprich bei der die residuals am geringsten sind:
newdata<- data.frame("Year" = seq(2010,2018,1))
preds <- predict(mod2, newdata=newdata,se.fit=T)
lines(newdata$Year, preds$fit)
Das ist mein Code für die Linie. Aber aus irgendeinem Grund sieht das dann so aus:
Bei der linearen Funktion (mod) passt es viel besser:
Aber das steht im Gegensatz zu dem Test, welche Funktion am besten passt!
Wer kann mich hier auf meinen Denkfehler hinweisen?
Vielen Dank schon mal für jedwede Hilfe!
Hilfe! Regressionslinie will einfach nicht
Moderator: EDi
-
- Beiträge: 2
- Registriert: Sa Feb 09, 2019 12:57 pm
Re: Hilfe! Regressionslinie will einfach nicht
predict gibt dir log(Grundfl..ha) zurück, musst du also noch rücktransformieren.
Ich wende transformationen immer außerhalb von der Modelspezifikation an.
Ich wende transformationen immer außerhalb von der Modelspezifikation an.
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
-
- Beiträge: 2
- Registriert: Sa Feb 09, 2019 12:57 pm
Re: Hilfe! Regressionslinie will einfach nicht
Vielen Dank, das hat mir weiter geholfen!
Das ganze sieht nun so aus: Leide habe ich noch nicht verstanden, wie genau das funktioniert bzw was an Logik dahinter steckt.
Der code, um eine dieser Linien einzufügen sieht so aus:
newdata<- data.frame("Year" = seq(2012,2018,1))
preds <- predict(mod_Casas, newdata=newdata,se.fit=T)
lines(newdata$Year, preds$fit, col="red", lty=1)
Hier funktioniert es auch, aber wie oft, wenn ich dieses Prinzip bei einer anderen Tabelle mit einer anderen Funktion verwende, klappt es nicht.
Oft kommt das:
Warning message:
'newdata' hat 46 Zeilen , aber die gefundenen Variablen haben 375 Zeilen
Und/ Oder das:
Error in xy.coords(x, y) : 'x' and 'y' lengths differ
Ich weiß, dass die Funktion und der Plot nicht übereinstimmen, aber warum?
Hier ein Beispiel, bei dem ich genau dieses Problem habe:
Funktion:
mod_Cebo_La_Virgen_mix <- lm(Krone$Diameter_Cebo_La_Virgen[Krone$Mono.Mix=="mix"] ~ Krone$DBH_Cebo_La_Virgen[Krone$Mono.Mix=="mix"])
Plot:
plot(Krone$Diameter_Cebo_La_Virgen[Krone$Mono.Mix=="mix"] ~ Krone$DBH_Cebo_La_Virgen[Krone$Mono.Mix=="mix"],
xlab="DBH", ylab="Diameter", main="La Virgen/San Rafael Cebo", col ="red", xlim=c(0,45), ylim=c(0,9))
Warum kommt hier die Fehlermeldung? Meine Funktion und mein Plot fragen genau dieselben Daten ab.
Vielen Dank auch schon mal im Voraus!
Ich bin wirklich für jede Hilfe dankbar
Das ganze sieht nun so aus: Leide habe ich noch nicht verstanden, wie genau das funktioniert bzw was an Logik dahinter steckt.
Der code, um eine dieser Linien einzufügen sieht so aus:
newdata<- data.frame("Year" = seq(2012,2018,1))
preds <- predict(mod_Casas, newdata=newdata,se.fit=T)
lines(newdata$Year, preds$fit, col="red", lty=1)
Hier funktioniert es auch, aber wie oft, wenn ich dieses Prinzip bei einer anderen Tabelle mit einer anderen Funktion verwende, klappt es nicht.
Oft kommt das:
Warning message:
'newdata' hat 46 Zeilen , aber die gefundenen Variablen haben 375 Zeilen
Und/ Oder das:
Error in xy.coords(x, y) : 'x' and 'y' lengths differ
Ich weiß, dass die Funktion und der Plot nicht übereinstimmen, aber warum?
Hier ein Beispiel, bei dem ich genau dieses Problem habe:
Funktion:
mod_Cebo_La_Virgen_mix <- lm(Krone$Diameter_Cebo_La_Virgen[Krone$Mono.Mix=="mix"] ~ Krone$DBH_Cebo_La_Virgen[Krone$Mono.Mix=="mix"])
Plot:
plot(Krone$Diameter_Cebo_La_Virgen[Krone$Mono.Mix=="mix"] ~ Krone$DBH_Cebo_La_Virgen[Krone$Mono.Mix=="mix"],
xlab="DBH", ylab="Diameter", main="La Virgen/San Rafael Cebo", col ="red", xlim=c(0,45), ylim=c(0,9))
Warum kommt hier die Fehlermeldung? Meine Funktion und mein Plot fragen genau dieselben Daten ab.
Vielen Dank auch schon mal im Voraus!
Ich bin wirklich für jede Hilfe dankbar
Re: Hilfe! Regressionslinie will einfach nicht
Das kenne ich nur wenn newdata & data unterschiedliche Spaltennamen haben.Warning message:
'newdata' hat 46 Zeilen , aber die gefundenen Variablen haben 375 Zeilen
Und hier wird auch schon der Grund dafür geliefert:
Bitte das data= argument nutzen und das subsetting außerhalb machen. AlsoCode: Alles auswählen
mod_Cebo_La_Virgen_mix <- lm(Krone$Diameter_Cebo_La_Virgen[Krone$Mono.Mix=="mix"] ~ Krone$DBH_Cebo_La_Virgen[Krone$Mono.Mix=="mix"])
Code: Alles auswählen
df_subset <- Krone[Krone$Mono.Mix=="mix", ]
mod <- lm(Diameter_Cebo_La_Virgen ~ DBH_Cebo_La_Virgen, data = df_subset)
Warum kommt hier die Fehlermeldung? Meine Funktion und mein Plot fragen genau dieselben Daten ab.
Ohne ein reproduzierbares Beispiel mag ich hier keine Vermutungen anstellen.
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Hilfe! Regressionslinie will einfach nicht
lm() hat auch ein Argument subset=
Vielleicht geht also auch:
Gruß, Jörg
Vielleicht geht also auch:
Code: Alles auswählen
mod <- lm(Diameter_Cebo_La_Virgen ~ DBH_Cebo_La_Virgen, data = Krone, subset=(Mono.Mix=="mix"))