Ten typ modelu jest w rzeczywistości znacznie bardziej powszechny w niektórych gałęziach nauki (np. Fizyka) i inżynierii niż „normalna” regresja liniowa. Zatem w narzędziach fizyki, takich jak ROOT
dopasowanie tego typu, jest trywialne, podczas gdy regresja liniowa nie jest natywnie wdrażana! Fizycy nazywają to po prostu „dopasowaniem” lub chi-kwadratem minimalizującym dopasowanie.
Normalne model regresji liniowej zakłada się, że istnieje całkowita wariancja dołączony do każdego pomiaru. Następnie maksymalizuje prawdopodobieństwo
lub równoważnie jego logarytm
Stąd nazwa najmniejszych kwadratów - maksymalne prawdopodobieństwo to to samo, co minimalizowanie sumy kwadratów, a jest nieistotną stałą, o ile jest stała. Przy pomiarach, które mają różne znane niepewności, będziesz chciał zmaksymalizować
σ
L ∝∏jami-12)(yja- ( axja+ b )σ)2)
log( L ) = c o n s t a n t -12)σ2)∑ja(yja- ( axja+ b ))2)
σL ∝ ∏mi-12)(y- ( a x + b )σja)2)
lub równoważnie jego logarytm
Tak , w rzeczywistości chcesz zważyć pomiary odwrotną wariancją , a nie wariancją. Ma to sens - dokładniejszy pomiar ma mniejszą niepewność i powinien mieć większą wagę. Zauważ, że jeśli ta waga jest stała, nadal odejmuje się od sumy. Nie wpływa więc na wartości szacunkowe, ale
powinno wpływać na standardowe błędy, zaczerpnięte z drugiej pochodnej .
log(L ) = c o n s t a n t -12)∑(yja- ( axja+ b )σja)2)
1 /σ2)jalog( L )
Tutaj jednak dochodzimy do kolejnej różnicy między fizyką / nauką a całością statystyki. Zazwyczaj w statystykach można się spodziewać korelacji między dwiema zmiennymi, ale rzadko będzie to dokładne. Z drugiej strony w fizyce i innych naukach często oczekuje się, że korelacja lub związek będzie dokładny, choćby nie w przypadku nieznośnych błędów pomiaru (np. , a nie ). Twój problem wydaje się bardziej pasować do przypadku fizyki / inżynierii. W konsekwencji interpretacja niepewności związanej z twoimi pomiarami i wag nie jest dokładnie taka sama, jak tego chcesz. Przyjmie ciężary, ale nadal uważa, że istnieje ogólnyfa= m afa= m a + ϵlm
σ2)w celu uwzględnienia błędu regresji, który nie jest tym, czego chcesz - chcesz, aby błędy pomiaru były jedynym rodzajem błędu. (Końcowym wynikiem lm
interpretacji jest to, że liczą się tylko względne wartości wag, dlatego stałe masy dodane podczas testu nie miały żadnego wpływu). Tutaj pytanie i odpowiedź mają więcej szczegółów:
Wagi i błąd standardowy
Istnieje kilka możliwych rozwiązań podanych w tych odpowiedziach. W szczególności sugeruje tam anonimową odpowiedź
vcov(mod)/summary(mod)$sigma^2
Zasadniczo lm
skaluje macierz kowariancji w oparciu o jej oszacowany i chcesz to cofnąć. Następnie możesz uzyskać potrzebne informacje z poprawionej macierzy kowariancji. Spróbuj tego, ale spróbuj to dwukrotnie sprawdzić, jeśli możesz, korzystając z ręcznej algebry liniowej. I pamiętajcie, że wagi powinny być odwrotnymi wariancjami.σ
EDYTOWAĆ
Jeśli często robisz tego rodzaju rzeczy, możesz rozważyć użycie ROOT
(co wydaje się robić to natywnie, lm
a glm
nie robić). Oto krótki przykład tego, jak to zrobić ROOT
. Po pierwsze, ROOT
może być używany przez C ++ lub Python, a jego ogromne pobieranie i instalacja. Możesz wypróbować go w przeglądarce za pomocą notatnika Jupiter, klikając link tutaj , wybierając „Binder” po prawej stronie i „Python” po lewej stronie.
import ROOT
from array import array
import math
x = range(1,11)
xerrs = [0]*10
y = [131.4,227.1,245,331.2,386.9,464.9,476.3,512.2,510.8,532.9]
yerrs = [math.sqrt(i) for i in y]
graph = ROOT.TGraphErrors(len(x),array('d',x),array('d',y),array('d',xerrs),array('d',yerrs))
graph.Fit("pol2","S")
c = ROOT.TCanvas("test","test",800,600)
graph.Draw("AP")
c.Draw()
Wprowadziłem pierwiastki kwadratowe jako niepewności dotyczące wartości . Moc wyjściowa dopasowania toy
Welcome to JupyROOT 6.07/03
****************************************
Minimizer is Linear
Chi2 = 8.2817
NDf = 7
p0 = 46.6629 +/- 16.0838
p1 = 88.194 +/- 8.09565
p2 = -3.91398 +/- 0.78028
i powstaje ładna fabuła:
Instalator ROOT może również radzić sobie z niepewnościami wartości , co prawdopodobnie wymagałoby jeszcze większego włamania . Jeśli ktoś zna natywny sposób robienia tego w R, byłbym zainteresowany, aby się tego nauczyć.xlm
DRUGA EDYCJA
Druga odpowiedź z tego samego poprzedniego pytania autorstwa @Wolfgang daje jeszcze lepsze rozwiązanie: rma
narzędzie z metafor
pakietu (pierwotnie zinterpretowałem tekst w tej odpowiedzi, aby nie obliczyć przechwytywania, ale tak nie jest). Przyjmując wariancje w pomiarach y po prostu y:
> rma(y~x+I(x^2),y,method="FE")
Fixed-Effects with Moderators Model (k = 10)
Test for Residual Heterogeneity:
QE(df = 7) = 8.2817, p-val = 0.3084
Test of Moderators (coefficient(s) 2,3):
QM(df = 2) = 659.4641, p-val < .0001
Model Results:
estimate se zval pval ci.lb ci.ub
intrcpt 46.6629 16.0838 2.9012 0.0037 15.1393 78.1866 **
x 88.1940 8.0956 10.8940 <.0001 72.3268 104.0612 ***
I(x^2) -3.9140 0.7803 -5.0161 <.0001 -5.4433 -2.3847 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
To zdecydowanie najlepsze czyste narzędzie R dla tego typu regresji, jakie znalazłem.
boot
pakietu w R. Następnie możesz pozwolić regresji liniowej na zestaw danych ładowania początkowego.