Seite 2 von 2
Re: Fehler singuläre Gradientenmatrix
Verfasst: Di Okt 13, 2020 8:29 am
von bigben
Um vielleicht etwas realistischere Erwartungen zu erzielen hilft es, sich Grafiken anzuschauen:
Da wird man weder mit einer Geraden noch mit einer Exponentialfunktion einen perfekten Fit erreichen.
LG,
Bernhard
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 12:05 pm
von Luisa_33
Hallo liebe R-Freunde,
ja genau, es geht mir eher um die Vorhersagekraft als um die Signifikanz.
bigben hat geschrieben: Mo Okt 12, 2020 1:05 pm
Jetzt hast Du 17 % Varianzaufklärung und beide Prädiktoren sind signifikant. Wenn es Dir um Signifikanz ging, dann ist das Ziel erreicht. Wenn es um Vorhersagekraft und Anpassung an Nichtliniearität geht, dann könnte man bei den Maschinenlernverfahren vielleicht noch was besseres als die lineare Regression finden.
Wenn ich jetzt dieses Modell auf den Validierungsdaten anwenden möchte und somit die "wahre" Zeit vorhersage.
> mod1 <- lm(log(Zeit) ~ Breite + Länge, data = l)
> summary(mod1)
Ist es richtig, wenn ich die folgendermaßen prognostiziere:
Liebe Grüße,
Luisa_33
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 2:18 pm
von bigben
Ja, so sollte das gehen.
Funktionstest:
Code: Alles auswählen
plot(Zeit ~ Breite, data = l)
lines(seq(0, 180, 10),
exp(predict(mod1, newdata = data.frame(Breite = seq(0, 180, 10), Länge = rep(10, 19)))))
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 3:39 pm
von Luisa_33
Okay, danke!
Wenn ich mir die Verteilungen von Breite und Länge anschauen, ist erkenntlich dass diese positiv schief sind.
Logarithmiere ich diese ebenfalls wird die Verteilung (Histogramm) besser.
Jetzt überlege ich, ob es vorteilhaft ist, diese Faktoren ebenfalls zu logarithmieren.
Code: Alles auswählen
> mod1 <- lm(log(Zeit) ~ log(Breite) + log(Länge), data = l)
> summary(mod1)
exp(predict(mod1, vdata))
Code: Alles auswählen
Call:
lm(formula = log(Zeit) ~ log(Länge) + log(Breite...3), data = tdata)
Residuals:
Min 1Q Median 3Q Max
-3.4033 -0.5225 0.1760 0.7964 1.6104
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.67844 0.58407 6.298 3.77e-09 ***
log(Länge) 0.17955 0.09498 1.891 0.0608 .
log(Breite...3) 0.63577 0.12552 5.065 1.28e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.037 on 138 degrees of freedom
Multiple R-squared: 0.1724, Adjusted R-squared: 0.1604
F-statistic: 14.37 on 2 and 138 DF, p-value: 2.134e-06
Dann würde ich ein Bestimmtheitsmaß von 0,1724 erhalten.
Ich bin mir gerade nicht sicher, ob der Ansatz Sinn mach oder das totaler Quatsch ist

Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 4:04 pm
von bigben
Ja, und wenn Du einfach nur Zeit ~ Breite * Länge rechnest, dann hast du sogar ein adjustiertes R² von 19,7% bzw ein R² von 21,3% - das ist noch mehr!
Code: Alles auswählen
mod <- lm(Zeit ~ Breite * Länge, data = l)
summary(mod)
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 4:09 pm
von Luisa_33
bigben hat geschrieben: Do Okt 22, 2020 4:04 pm
Ja, und wenn Du einfach nur Zeit ~ Breite * Länge rechnest, dann hast du sogar ein adjustiertes R² von 19,7% bzw ein R² von 21,3% - das ist noch mehr!
Code: Alles auswählen
mod <- lm(Zeit ~ Breite * Länge, data = l)
summary(mod)
Okay, kannst du mir kurz erklären, wie du auf Breite * Länge kommst? Was ist der Hintergrund?
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 4:22 pm
von bigben
Angemessener Hintergrund wäre, wenn wir wüssten, was es mit Länge und Breite auf sich hat und welche Zeit sie beeinflussen. Dann könnte man vielleicht mit Sachverstand auf dem jeweiligen Forschungsgebiet mit angemessenem Hintergrund modellieren. So ist es eher Herumstochern im Nebel.
Und da dachte ich mir, wenn Du die Logarithmen von Breite und Länge addierst dann ist es doch nicht abwegig, Breite und Länge zu multiplizieren. Bumms, schon war ein neues Modell da. Und der fit war besser.
Mein nächstes Stochern im Nebel wäre ein Generalisiertes Additives Modell (GAM) mit den gleichen Prädiktoren und siehe da, R² steigt weiter:
Code: Alles auswählen
library(mgcv)
mod.gam <- gam(Zeit ~ s(Breite) + s(Länge) + s(I(Breite * Länge)), data = l)
summary(mod.gam )
plot(mod.gam)
macht
Code: Alles auswählen
> summary(mod.gam )
Family: gaussian
Link function: identity
Formula:
Zeit ~ s(Breite) + s(Länge) + s(I(Breite * Länge))
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1290.96 80.45 16.05 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(Breite) 5.681 6.723 6.932 4.35e-06 ***
s(Länge) 4.928 5.891 2.907 0.00839 **
s(I(Breite * Länge)) 1.000 1.000 7.536 0.00689 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.279 Deviance explained = 33.8%
GCV = 1.0085e+06 Scale est. = 9.1895e+05 n = 142
>
Das sind 28% adjustiertes R²!
Andrew Gelman spricht in diesem Zusammenhang von den "researcher's degree of freedom". Durch all die Freiheiten, wie Du Deine Größen misst und wie Du mit ihnen Modelle aufstellst und welche Ausreißer Du entfernst hast Du sehr viele Freiheitsgrade, die in der abschließenden Statistik nicht wirklich auftauchen. Nur wissen wir leider von den schrittweisen Regressionsverfahren dass sowas zu hoffnungslosem Overfitting führen kann.
LG,
Bernhard
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 4:43 pm
von Luisa_33
bigben hat geschrieben: Do Okt 22, 2020 4:22 pm
Angemessener Hintergrund wäre, wenn wir wüssten, was es mit Länge und Breite auf sich hat und welche Zeit sie beeinflussen. Dann könnte man vielleicht mit Sachverstand auf dem jeweiligen Forschungsgebiet mit angemessenem Hintergrund modellieren. So ist es eher Herumstochern im Nebel.
Und da dachte ich mir, wenn Du die Logarithmen von Breite und Länge addierst dann ist es doch nicht abwegig, Breite und Länge zu multiplizieren. Bumms, schon war ein neues Modell da. Und der fit war besser.
Mein nächstes Stochern im Nebel wäre ein Generalisiertes Additives Modell (GAM) mit den gleichen Prädiktoren und siehe da, R² steigt weiter:
Code: Alles auswählen
library(mgcv)
mod.gam <- gam(Zeit ~ s(Breite) + s(Länge) + s(I(Breite * Länge)), data = l)
summary(mod.gam )
plot(mod.gam)
macht
Code: Alles auswählen
> summary(mod.gam )
Family: gaussian
Link function: identity
Formula:
Zeit ~ s(Breite) + s(Länge) + s(I(Breite * Länge))
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1290.96 80.45 16.05 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(Breite) 5.681 6.723 6.932 4.35e-06 ***
s(Länge) 4.928 5.891 2.907 0.00839 **
s(I(Breite * Länge)) 1.000 1.000 7.536 0.00689 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.279 Deviance explained = 33.8%
GCV = 1.0085e+06 Scale est. = 9.1895e+05 n = 142
>
Das sind 28% adjustiertes R²!
Andrew Gelman spricht in diesem Zusammenhang von den "researcher's degree of freedom". Durch all die Freiheiten, wie Du Deine Größen misst und wie Du mit ihnen Modelle aufstellst hast Du sehr viele Freiheitsgrade, die in der abschließenden Statistik nicht auftauchen.
Re: Fehler singuläre Gradientenmatrix
Verfasst: Do Okt 22, 2020 10:06 pm
von bigben
Hallo Luisa,
Luisa_33 hat geschrieben: Do Okt 22, 2020 4:43 pmAus diesem Grund kann das Bauteil nicht durch Breite * Länge erklärt werden.
Trotzdem hat der Interaktionsterm einen p-Wert von 0,0008 und er verbessert das adjustierte R².
Und: Bist Du bei Deinen e-Funktionen genauso kritisch wie bei der Fläche Breite*Länge?
Ich weiß ja nicht, ob die Bauteile additiv gefertigt werden oder subtraktiv oder ob es sich um Prozesse handelt, bei denen die Oberfläche des Bauteils eine Rolle spielt oder das Volumen oder...
Wenn man unterstellt, dass das Volumen geschätzt werden kann als Breite*Breite*Länge dann kommt übrigens auch ein vergleichbar guter fit heraus:
Code: Alles auswählen
> mod.cub <- lm(Zeit ~ Länge + Breite + I(Breite^2*Länge), data = l)
> summary(mod.cub)
Call:
lm(formula = Zeit ~ Länge + Breite + I(Breite^2 * Länge), data = l)
Residuals:
Min 1Q Median 3Q Max
-1823.4 -701.8 -201.3 560.2 3116.8
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.555e+02 1.943e+02 1.315 0.19057
Länge 5.542e+00 2.057e+00 2.694 0.00794 **
Breite 1.609e+01 2.708e+00 5.942 2.18e-08 ***
I(Breite^2 * Länge) -4.955e-04 1.481e-04 -3.346 0.00106 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1014 on 138 degrees of freedom
Multiple R-squared: 0.2108, Adjusted R-squared: 0.1936
F-statistic: 12.29 on 3 and 138 DF, p-value: 3.582e-07
Die Ähnlichkeit zwischen den beiden Modellen liegt daran, dass bei Deinen Bauteilen die Fläche Breite*Länge sehr gut mit dem Volumen Breite*Breite*Länge korreliert.
Ich habe deshalb die beiden Parameter "einzeln" betrachtet.
Das Recht zu entscheiden, welche Transformationen ok sind und welche nicht will Dir ja auch keiner nehmen. Außerdem wirst Du ja hoffentlich noch weitere Daten mit abweichenden Werten von Gruppe haben und dann ohnehin ein neues Modell unter Einbezug von Gruppe aufstellen.
LG,
Bernhard