Nichtlineare Regression durch negative Exponentialfunktion

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
foena1988
Beiträge: 21
Registriert: Mo Okt 23, 2017 8:30 am

Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von foena1988 »

Hallo liebes Forum,

Ich wollte eine relativ simple Aufgabe erledigen und komme leider einfach nicht weiter. Ich würde gerne eine Regression für einen Datensatz rechnen und zwar als negative Exponentialfunktion. Nachstehend mein bisheriger Code:

Code: Alles auswählen


rm(list = ls(all.names = TRUE))
data <- data.frame(cbind(c(2005.858,2006.323,2006.681,2006.855,2007.246,2007.852,2008.296,2008.658,2009.309,2009.598,2009.844,2010.329,2010.633,2010.880,2011.307),
              c(-0.1587725,-0.1872080,-0.0097310,-0.1334250,-0.1415130,-0.3153405,-0.4836975,-0.6108542,-0.3429872,-0.4400377,-0.3948924,-0.4516956,-0.5317573,-0.5295940,-0.6489158)))
              
              [img]
              
              [attachment=0]Rplot01.png[/attachment][/img]

names(data) = c("Datum","Messwert")

model = nls(Messwert ~ a * exp((b*Datum-c)), data = data, start=list(a=-0.5,b=0.005, c=11))
Bei jedem Durchlauf erhalte ich den Fehler:

Code: Alles auswählen

Error in nlsModel(formula, mf, start, wts) : 
  singuläre Gradientenmatrix bei der ersten Parameterschätzung
  
Mir ist schon klar, dass dieser Fehler mit er Wahl meiner Startwerte zusammenhängt. Allerdings finde ich keine Kombination an Startwerten, sodass mein Modell gerechnet werden würde.

Kann mir diesbezüglich vielleicht jemand helfen?

Vielen Dank,LG
Dateianhänge
Rplot01.png
Rplot01.png (2.99 KiB) 944 mal betrachtet
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von jogo »

Hallo foena,

willkommen im Forum!
e^(b*x+c) = e^b*x * e^c
... wenn Du jetzt noch einen zu schätzenden Koeffizienten a davorschreibst, dann muss die Systemmatrix singulär werden.
Du lässt ihr keine andere Wahl.

Gruß, Jörg
foena1988
Beiträge: 21
Registriert: Mo Okt 23, 2017 8:30 am

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von foena1988 »

Hallo und danke für deine rasche Antwort.

Hast natürlich vollkommen recht! Manchmal sieht man den Wald vor lauter Bäumen nicht mehr!

Habe den Code jetzt wie folgt angepasst:

Code: Alles auswählen

model = nls(BCI ~ a * exp((b*Messdatum)), data = BCI_temp, start=list(a=-0.5,b=0.009),trace=T)
Nun erhalte ich allerdings folgende Fehlermeldung:

Code: Alles auswählen

  Error in nls(BCI ~ a * exp((b * Messdatum)), data = BCI_temp, start = list(a = -0.5,  : 
  singulärer Gradient
Habe mir mit trace = T die Einzelschritte ausgeben lassen, werde allerdings leider nicht schlau daraus:

Code: Alles auswählen

1.889811e+16 :  -0.500  0.009
234656.3 :  1.756788e-06 9.000002e-03
27644.4 :  2.510391e-06 8.287171e-03
137.4769 :  1.053997e-05 6.192767e-03
2.460294 :   0.000713775 -0.027588682
Hätte vielleicht noch jemand einen Tipp für mich?

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

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von EDi »

Wie kommst du denn auf die Startwerte?
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.
foena1988
Beiträge: 21
Registriert: Mo Okt 23, 2017 8:30 am

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von foena1988 »

Genau daran scheitere ich! Ich habe mal versucht, di eWerte des ersten Punkten zu nehmen, funktioniert allerdings eben so wenig wie alle anderen Versuche bis jetzt!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von EDi »

Vielleicht hilfst auch das Datum anders zu kodieren, z. B. Tage/Minuten seit des ersten Messpunkts....
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.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von EDi »

Dad kann man doch auch als lm (log) in erster Runde schätzen und die (rücktransformierten) Koeffizienten daraus dann als Startwert nehmen?
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.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von bigben »

Hi!

Ich glaube ja, dass nls durch die hohen Datumswerte in den 2000ern gestört wird. Jedenfalls verhält es sich bei mir viel friedlicher, wenn ich das Datum vorher zentriere. Das hier gibt einen ganz guten Fit

Code: Alles auswählen

data <- data.frame(cbind(c(2005.858,2006.323,2006.681,2006.855,2007.246,2007.852,2008.296,2008.658,2009.309,2009.598,2009.844,2010.329,2010.633,2010.880,2011.307),
                         c(-0.1587725,-0.1872080,-0.0097310,-0.1334250,-0.1415130,-0.3153405,-0.4836975,-0.6108542,-0.3429872,-0.4400377,-0.3948924,-0.4516956,-0.5317573,-0.5295940,-0.6489158)))
names(data) = c("Datum","Messwert")
data$Datum.z <- data$Datum - mean(data$Datum)

model = nls(Messwert ~ a + exp(b*Datum.z), data = data, start=list(a=-0.5,b=0.009))
summary(model)


plot(Messwert ~ Datum.z, data = data)
curve(-1.37117+ exp(-0.09131*x), add = TRUE)
Und auch die oben gewünschte Regression

Code: Alles auswählen

model = nls(Messwert ~ a * exp((b*Datum.z)), data = data, start=list(a=-0.5,b=0.009))
läuft jetzt ohne Fehlermeldung durch.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von Athomas »

Ich würde gerne eine Regression für einen Datensatz rechnen und zwar als negative Exponentialfunktion.
Was ist das?
foena1988
Beiträge: 21
Registriert: Mo Okt 23, 2017 8:30 am

Re: Nichtlineare Regression durch negative Exponentialfunktion

Beitrag von foena1988 »

Hallo Bernhard,

Vielen Dank für deinen Hinweis. Das war exakt das Problem.

Ich habe nun anstatt des Mittelwertes immer 2000 abgezogen, somit funktioniert es auch ziemlich gut.

Danke nochmals für alle Hilfestellungen!

LG
Antworten