Fehler singuläre Gradientenmatrix
Moderator: EDi
Re: Fehler singuläre Gradientenmatrix
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
Da wird man weder mit einer Geraden noch mit einer Exponentialfunktion einen perfekten Fit erreichen.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Fehler singuläre Gradientenmatrix
Hallo liebe R-Freunde,
ja genau, es geht mir eher um die Vorhersagekraft als um die Signifikanz.
Liebe Grüße,
Luisa_33
ja genau, es geht mir eher um die Vorhersagekraft als um die Signifikanz.
Wenn ich jetzt dieses Modell auf den Validierungsdaten anwenden möchte und somit die "wahre" Zeit vorhersage.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.
Ist es richtig, wenn ich die folgendermaßen prognostiziere:> mod1 <- lm(log(Zeit) ~ Breite + Länge, data = l)
> summary(mod1)
Code: Alles auswählen
exp(predict(mod1, vdata))
Luisa_33
Re: Fehler singuläre Gradientenmatrix
Ja, so sollte das gehen.
Funktionstest:
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)))))
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Fehler singuläre Gradientenmatrix
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.
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
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
Ich bin mir gerade nicht sicher, ob der Ansatz Sinn mach oder das totaler Quatsch ist
Re: Fehler singuläre Gradientenmatrix
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)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Fehler singuläre Gradientenmatrix
Okay, kannst du mir kurz erklären, wie du auf Breite * Länge kommst? Was ist der Hintergrund?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)
Re: Fehler singuläre Gradientenmatrix
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:
macht
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
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)
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
>
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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Fehler singuläre Gradientenmatrix
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:
machtCode: 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)
Das sind 28% adjustiertes R²!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 >
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.
Zuletzt geändert von Luisa_33 am Di Nov 03, 2020 12:09 pm, insgesamt 1-mal geändert.
Re: Fehler singuläre Gradientenmatrix
Hallo Luisa,
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:
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.
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
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
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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte