Wie berechne ich beim Anpassen einer Kurve das 95% -Konfidenzintervall für meine angepassten Parameter?

12

Ich passe Kurven an meine Daten an, um einen Parameter zu extrahieren. Ich bin mir jedoch nicht sicher, wie sicher dieser Parameter ist und wie ich sein % -Konfidenzintervall berechnen / ausdrücken würde .95

Angenommen, für einen Datensatz, der Daten enthält, die exponentiell abfallen, passe ich jedem Datensatz eine Kurve an. Dann ist die Information, die ich extrahieren möchte, der Exponent . Ich kenne die Werte von t und den Wert von a, an dem ich nicht interessiert bin (das ist eine Variable, die aus der Population stammt, nicht der Prozess, den ich zu modellieren versuche).bta

Ich verwende eine nichtlineare Regression, um diese Parameter anzupassen. Ich weiß jedoch nicht, wie ich das % -Konfidenzintervall für eine Methode berechnen soll, daher sind auch umfassendere Antworten willkommen.95

f=aebt
Beispieldaten und Passform

Wie berechne ich das 95 % -Konfidenzintervall , wenn ich meinen Wert für ? Danke im Voraus!b95

Löwe
quelle
Wie passen Sie die Daten an? Wird Ihre Funktion so transformiert, dass sie zu einem OLS passt?
Johnny
Ich sehe aus Ihren Kommentaren zu den Antworten, dass Sie tatsächlich nichtlineare kleinste Quadrate machen. Sie hätten schneller gute Antworten erhalten, wenn Sie mit diesen Informationen begonnen hätten. Ich habe mindestens ein relevantes Tag hinzugefügt.
Glen_b -State Monica
@Glen_b Ah Ich werde in Zukunft vollständiger sein und es der Frage hinzufügen. Ich habe jedoch darüber nachgedacht. Bei einigen Datensätzen verwende ich den absoluten L1-Abstand und bei anderen immer noch die lineare Regression. Ich hatte gehofft, eine breite Antwort zu bekommen.
Leo
Wenn Sie Antworten für die kleinsten Quadrate, die L1-Regression und die nichtlinearen kleinsten Quadrate wünschen, ist es am besten, dies explizit anzugeben.
Glen_b - Monica

Antworten:

10

Das Problem beim Linearisieren und anschließenden Verwenden der linearen Regression besteht darin, dass die Annahme einer Gaußschen Verteilung von Residuen für die transformierten Daten wahrscheinlich nicht zutrifft.

Es ist normalerweise besser, nichtlineare Regression zu verwenden. Die meisten nichtlinearen Regressionsprogramme geben das Standardfehler- und Konfidenzintervall der am besten geeigneten Parameter an. Wenn dies bei Ihnen nicht der Fall ist, können diese Gleichungen hilfreich sein.

Jeder Standardfehler wird unter Verwendung dieser Gleichung berechnet:

SE(Pi) = sqrt[ (SS/DF) * Cov(i,i) ]]

  • Pi: i-ter einstellbarer (nicht konstanter) Parameter
  • SS: Summe der quadratischen Residuen
  • DF: Freiheitsgrade (Anzahl der Datenpunkte minus Anzahl der durch Regression angepassten Parameter)
  • Cov (i, i): i-tes diagonales Element der Kovarianzmatrix
  • sqrt (): Quadratwurzel

Und hier ist die Gleichung, um das Konfidenzintervall für jeden Parameter aus dem Best-Fit-Wert, seinem Standardfehler und der Anzahl der Freiheitsgrade zu berechnen.

From [BestFit(Pi)- t(95%,DF)*SE(Pi)]  TO  [BestFit(Pi)+
 t(95%,DF)*SE(Pi)] 
  • BestFit (Pi) ist der beste Anpassungswert für den i-ten Parameter
  • t ist der Wert aus der t-Verteilung für 95% Konfidenz für die angegebene Anzahl von DF.
  • DF ist Freiheitsgrade.

    Beispiel mit Excel für 95% Konfidenz (also Alpha = 0,05) und 23 Freiheitsgrade: = TINV (0,05,23) DF entspricht Freiheitsgraden (Anzahl der Datenpunkte minus Anzahl der durch Regression angepassten Parameter)

Harvey Motulsky
quelle
Genau das brauchte ich, danke! Ich habe lsqcurvefit in Matlab verwendet , es gibt weder das Konfidenzintervall noch den Standardfehler aus. Es gibt die Lagrange-Multiplikatoren (?), Die Residuen und die quadratische 2-Norm der Residuen an. Jetzt kann ich mit Ihrer Antwort berechnen, was ich brauche!
Leo
3

Wenn Sie glauben, dass ein geeignetes Modell für Ihre Daten ist:

f=aebt

Anschließend können Sie Ihre Antwortdaten so protokollieren, dass ein geeignetes Modell lautet:

f'=a'- -bt

f=ln(f)a=ln(a)

# Rough simulated data set.
set.seed(1)
a <- 50; b <- 0.2; n <- 25
x <- 1:n
y <- a*(exp(-b * x))
y <- y + rnorm(n, sd=0.25)
y <- ifelse(y>0, y, 0.1)
plot(x,y)

# Linearise:
y2 <- log(y)
plot(x,y2)

# Fit model to transformed data
model <- lm(y2 ~ x)
summary(model)
confint(model)

# Or:
param <- summary(model)$coefficients[, 1]; se <- summary(model)$coefficients[, 2]
param + qt(0.975, 23) * se
param - qt(0.975, 23) * se

 N(0,σ2)

T-Student
quelle
Ah danke! Eine sehr schöne und vollständige Antwort! Dies kann ich verwenden, wenn ich eine linearisierte Anpassung mache, was ich manchmal auch mache. Ich hoffe, es macht Ihnen nichts aus, dass ich Harveys Antwort akzeptiere, da meine Frage in diesem Fall nicht die linearisierte Anpassung betraf. Trotzdem eine nützliche Antwort!
Leo