Jestem bardzo zdezorientowany, jak waga działa w glm z rodziną = „dwumianowy”. W moim rozumieniu prawdopodobieństwo glm z rodziną = „dwumianowy” jest określone w następujący sposób:
W moim rozumieniu prawdopodobieństwo sukcesu jest sparametryzowane za pomocą niektórych współczynników liniowych jako i funkcji glm z wyszukiwaniem rodziny = „dwumianowe” dla:
Dlatego jeśli pozwolimy dla wszystkich dla jakiejś stałej , to musi być również prawdą, że:
Plik pomocy glm mówi:
"For a binomial GLM prior weights are used to give the number of trials
when the response is the proportion of successes"
Dlatego spodziewałem się, że skalowanie wagi nie wpłynie na szacowany biorąc pod uwagę odsetek sukcesu jako odpowiedzi. Jednak następujące dwa kody zwracają różne wartości współczynników:
Y <- c(1,0,0,0) ## proportion of observed success
w <- 1:length(Y) ## weight= the number of trials
glm(Y~1,weights=w,family=binomial)
Daje to:
Call: glm(formula = Y ~ 1, family = "binomial", weights = w)
Coefficients:
(Intercept)
-2.197
podczas gdy jeśli pomnożę wszystkie wagi przez 1000, szacowane współczynniki są różne:
glm(Y~1,weights=w*1000,family=binomial)
Call: glm(formula = Y ~ 1, family = binomial, weights = w * 1000)
Coefficients:
(Intercept)
-3.153e+15
Widziałem wiele innych takich przykładów, nawet z umiarkowanym skalowaniem wag. Co tu się dzieje?
weights
argument kończy się w dwóch miejscach wewnątrzglm.fit
funkcji (w glm.R ), czyli co działa w R: 1)binomial_dev_resids
w resztkach odchylenia, za pomocą funkcji C (w rodzinie. C ) i 2) w kroku IWLS za pomocąCdqrls
(w lm.c ). Nie znam wystarczającej ilości C, aby pomóc w śledzeniu logikiOdpowiedzi:
Twój przykład powoduje jedynie błąd zaokrąglania w R. Duże ciężary nie działają dobrze w
glm
. Prawdą jest, że skalowaniew
o praktycznie każdą mniejszą liczbę, na przykład 100, prowadzi do takich samych oszacowań, co nieskalowanew
.Jeśli chcesz bardziej niezawodnego zachowania z argumentami wag, spróbuj użyć
svyglm
funkcji zsurvey
pakietu.Spójrz tutaj:
źródło
Myślę, że sprowadza się to do początkowych wartości użytych wW−−√X X W−−√
glm.fit
stosunku do tego,family$initialize
co sprawia, że metoda się różni. O ile wiem,glm.fit
rozwiąż problem, tworząc rozkład QR z gdzie jest macierzą projektową, a to przekątna z pierwiastkami kwadratowymi wpisów, jak opisano tutaj . Oznacza to, że wykorzystuje metodę Newtona-Raphsona.X √Odpowiedni
$intialize
kod to:Oto uproszczona wersja,
glm.fit
która pokazuje mój punkt widzeniaMożemy powtórzyć ostatnią część jeszcze dwa razy, aby zobaczyć, że metoda Newtona-Raphsona różni się:
Nie dzieje się tak, jeśli zaczniesz od
weights <- 1:nrow(y)
lub powieszweights <- 1:nrow(y) * 100
.Zauważ, że można uniknąć rozbieżności, ustawiając
mustart
argument. Npźródło
mustart
argument). Wydaje się, że jest to kwestia związana ze złym początkowym oszacowaniem .