Jak dopasować krzywą, jak obliczyć 95% przedział ufności dla moich dopasowanych parametrów?

12

Dopasowuję krzywe do moich danych, aby wyodrębnić jeden parametr. Nie jestem jednak pewien, jaka jest pewność tego parametru i jak obliczyć / wyrazić jego % przedział ufności.95

Powiedzmy, że dla zestawu danych zawierającego dane, które wykładniczo zanika, dopasowuję krzywą do każdego zestawu danych. Informacje, które chcę wyodrębnić, to wykładnik . Znam wartości wartość , która mnie nie interesuje (to zmienna pochodząca z populacji, a nie z procesu, który próbuję wymodelować).t abta

Używam regresji nieliniowej, aby dopasować te parametry. Jednak nie wiem, jak obliczyć % przedział ufności dla dowolnej metody, więc szersze odpowiedzi są również mile widziane.95

f=aebt
przykładowe dane i dopasowanie

Kiedy mam wartość , jak obliczyć jej % przedział ufności? Z góry dziękuję!95b95

Lew
źródło
Jak dopasowujesz dane? Czy twoja funkcja została przekształcona tak, aby pasowała do OLS?
Johnny
Widzę z twoich komentarzy do odpowiedzi, że faktycznie robisz nieliniowe najmniejsze kwadraty. Szybko uzyskałbyś dobre odpowiedzi, gdybyś zaczął od tych informacji. Dodałem przynajmniej odpowiedni tag.
Glen_b
@Glen_b Ah Będę bardziej kompletny w przyszłości i dodaj go do pytania. Myślałem jednak o tym. W niektórych zestawach danych używam bezwzględnej odległości L1, a innym razem nadal używam regresji liniowej. Miałem więc nadzieję uzyskać szeroką odpowiedź.
Leo
Jeśli chcesz odpowiedzi dla najmniejszych kwadratów, regresji L1 i nieliniowych najmniejszych kwadratów, najlepiej byłoby o tym wyraźnie powiedzieć.
Glen_b

Odpowiedzi:

10

Problem z linearyzacją, a następnie zastosowaniem regresji liniowej polega na tym, że założenie rozkładu reszt Gaussa prawdopodobnie nie będzie prawdziwe dla przekształconych danych.

Zazwyczaj lepiej jest zastosować regresję nieliniową. Większość programów regresji nieliniowej zgłasza błąd standardowy i przedział ufności parametrów najlepiej dopasowanych. Jeśli twoje nie, te równania mogą pomóc.

Każdy błąd standardowy jest obliczany przy użyciu tego równania:

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

  • Pi: i-ty regulowany (niestały) parametr
  • SS: suma kwadratów reszt
  • DF: stopnie swobody (liczba punktów danych minus liczba parametrów dopasowanych przez regresję)
  • Cov (i, i): i-ty element diagonalny macierzy kowariancji
  • sqrt (): pierwiastek kwadratowy

A oto równanie do obliczenia przedziału ufności dla każdego parametru na podstawie najlepiej dopasowanej wartości, jego błędu standardowego i liczby stopni swobody.

From [BestFit(Pi)- t(95%,DF)*SE(Pi)]  TO  [BestFit(Pi)+
 t(95%,DF)*SE(Pi)] 
  • BestFit (Pi) to najlepsza wartość dopasowania dla i-tego parametru
  • t jest wartością z rozkładu t dla 95% ufności dla określonej liczby DF.
  • DF to stopnie swobody.

    Przykład z programem Excel dla 95% pewności (więc alfa = 0,05) i 23 stopni swobody: = TINV (0,05, 23) DF równa się stopni swobody (liczba punktów danych minus liczba parametrów dopasowanych przez regresję)

Harvey Motulsky
źródło
Właśnie tego potrzebowałem, dziękuję! Użyłem lsqcurvefit w Matlabie , nie wyświetla on przedziału ufności ani błędu standardowego. Daje mnożniki Lagrange'a (?), Reszty i kwadratową 2-normę reszty. Teraz z tym i twoją odpowiedzią mogę obliczyć, czego potrzebuję!
Leo
3

Jeśli uważasz, że odpowiednim modelem dla Twoich danych jest:

f=aebt

Następnie możesz przekształcić dane odpowiedzi w dziennik, tak aby odpowiedni model to:

f=abt

w , a . Przekształcone dane można dopasować za pomocą prostej regresji liniowej i oszacowania punktu przecięcia i nachylenia wraz z uzyskanymi standardowymi błędami. Jeśli krytyczna wartość t i błąd standardowy zostaną zastosowane do oszacowania parametru, można utworzyć przedział ufności dla tego oszacowania parametru. W R:a = l n ( a )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

Jeśli używasz modelu do przewidywania, upewnij się, że spełnione zostały założenia SLR - iid . N(0,σ2)

t-student
źródło
Ach dzięki! Bardzo ładna i kompletna odpowiedź! Mogę tego użyć, jeśli wykonam dopasowanie zlinearyzowane, co też czasami robię. Mam nadzieję, że nie masz nic przeciwko temu, że akceptuję odpowiedź Harveysa, ponieważ w tym przypadku moje pytanie nie dotyczyło dopasowania zlinearyzowanego. Nadal przydatna odpowiedź!
Leo