CrossValidated ma kilka pytań na temat tego, kiedy i jak zastosować korektę błędu rzadkich zdarzeń autorstwa Kinga i Zenga (2001) . Szukam czegoś innego: minimalnej demonstracji opartej na symulacji, że istnieje uprzedzenie.
W szczególności państwo King i Zeng
„... w danych dotyczących rzadkich zdarzeń tendencje w prawdopodobieństwach mogą mieć istotne znaczenie przy wielkościach próbek w tysiącach i są w przewidywalnym kierunku: oszacowane prawdopodobieństwa zdarzeń są zbyt małe”.
Oto moja próba symulacji takiego obciążenia w R:
# FUNCTIONS
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept-only model.
# If p is not constant, assume its smallest value is p[1]:
glm(y ~ p, family = 'binomial')$fitted[1]
}
mean.of.K.estimates = function(p, K){
mean(replicate(K, do.one.sim(p) ))
}
# MONTE CARLO
N = 100
p = rep(0.01, N)
reps = 100
# The following line may take about 30 seconds
sim = replicate(reps, mean.of.K.estimates(p, K=100))
# Z-score:
abs(p[1]-mean(sim))/(sd(sim)/sqrt(reps))
# Distribution of average probability estimates:
hist(sim)
Kiedy to uruchamiam, mam tendencję do uzyskiwania bardzo małych wyników Z, a histogram oszacowań jest bardzo bliski wyśrodkowaniu ponad prawdą p = 0,01.
czego mi brakuje? Czy to, że moja symulacja nie jest wystarczająco duża, pokazuje prawdziwe (i ewidentnie bardzo małe) odchylenie? Czy odchylenie wymaga uwzględnienia jakiegoś współzmiennego (więcej niż przecięcia)?
Aktualizacja 1: King i Zeng zawierają przybliżone przybliżenie błędu w równaniu 12 dokumentu. Zwracając uwagę na mianownik, drastycznie zmniejszyłem się i ponownie przeprowadziłem symulację, ale nadal nie widać błędu w szacowanych prawdopodobieństwach zdarzeń. (Użyłem tego tylko jako inspiracji. Pamiętaj, że moje pytanie powyżej dotyczy szacunkowych prawdopodobieństw zdarzeń, a nie .)β 0N
N
5
Aktualizacja 2: Zgodnie z sugestią zawartą w komentarzach uwzględniłem zmienną niezależną w regresji, co prowadzi do równoważnych wyników:
p.small = 0.01
p.large = 0.2
p = c(rep(p.small, round(N/2) ), rep(p.large, N- round(N/2) ) )
sim = replicate(reps, mean.of.K.estimates(p, K=100))
Objaśnienie: Użyłem p
siebie jako zmiennej niezależnej, gdzie p
jest wektorem z powtórzeniami małej wartości (0,01) i większej wartości (0,2). Ostatecznie sim
przechowuje tylko oszacowane prawdopodobieństwa odpowiadające i nie ma żadnych oznak błędu.
Aktualizacja 3 (5 maja 2016 r.): To nie zmienia zauważalnie wyników, ale moja nowa funkcja wewnętrznej symulacji to
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
if(sum(y) == 0){ # then the glm MLE = minus infinity to get p = 0
return(0)
}else{
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept only model.
# If p is not constant, assume its smallest value is p[1]:
return(glm(y ~ p, family = 'binomial')$fitted[1])
}
}
Objaśnienie: MLE, gdy y jest identycznie zero, nie istnieje ( dzięki komentarzom tutaj dla przypomnienia ). R nie rzuca ostrzeżenia, ponieważ jego „ pozytywna tolerancja zbieżności ” faktycznie się spełnia. Mówiąc bardziej swobodnie, MLE istnieje i ma minus nieskończoności, co odpowiada ; stąd moja aktualizacja funkcji. Jedyną inną spójną rzeczą, jaką mogę wymyślić, jest odrzucenie tych przebiegów symulacji, w których y wynosi identycznie zero, ale to wyraźnie doprowadziłoby do wyników jeszcze bardziej sprzecznych z początkowym twierdzeniem, że „szacowane prawdopodobieństwo zdarzenia jest zbyt małe”.
źródło
Odpowiedzi:
To interesujące pytanie - wykonałem kilka symulacji, które zamieszczam poniżej w nadziei, że zachęci to do dalszej dyskusji.
Przede wszystkim kilka ogólnych uwag:
Artykuł, który cytujesz, dotyczy stronniczości rzadkich zdarzeń. To, co wcześniej nie było dla mnie jasne (również w odniesieniu do komentarzy, które zostały przedstawione powyżej), to czy jest coś specjalnego w przypadkach, w których masz 10/10000 w przeciwieństwie do obserwacji 10/30. Jednak po kilku symulacjach zgodziłbym się z tym.
Problemem, o którym myślałem (często się z tym spotykałem, a ostatnio był w nim artykuł w Methods in Ecology and Evolution, ale nie mogłem znaleźć odniesienia), że można uzyskać zdegenerowane przypadki z GLM w małych danych sytuacje, w których MLE jest FAAAR z dala od prawdy, a nawet w nieskończoności (- przypuszczam, że z powodu połączenia nieliniowego). Nie jest dla mnie jasne, jak należy traktować te przypadki w oszacowaniu błędu, ale z moich symulacji powiedziałbym, że wydają się kluczowe dla błędu rzadkich zdarzeń. Moją intuicją byłoby ich usunięcie, ale wtedy nie jest całkiem jasne, jak daleko muszą być usunięte. Może coś, o czym należy pamiętać przy korekcji błędów.
Te zdegenerowane przypadki również wydają się powodować problemy numeryczne (dlatego zwiększyłem maksimum w funkcji glm, ale można również pomyśleć o zwiększeniu epsilon, aby upewnić się, że rzeczywiście zgłasza się prawdziwy MLE).
W każdym razie, oto kod, który oblicza różnicę między szacunkami a prawdą dla przechwytywania, nachylenia i prognoz w regresji logistycznej, najpierw dla sytuacji o małej wielkości próby / umiarkowanej częstości:
Wynikowe odchylenie i standardowe błędy dla przechwytywania, nachylenia i prognozowania wynoszą
Doszedłbym do wniosku, że istnieją dość dobre dowody na niewielkie ujemne odchylenie w punkcie przecięcia i lekkie dodatnie odchylenie na zboczu, chociaż spojrzenie na wykreślone wyniki pokazuje, że odchylenie jest niewielkie w porównaniu z wariancją wartości szacunkowych.
Jeśli ustawiam parametry na rzadkie zdarzenia
Dostaję większe odchylenie dla przechwytywania, ale nadal NIE ma prognozy
Na histogramie wartości szacunkowych widzimy zjawisko oszacowania parametrów zdegenerowanych (jeśli powinniśmy je tak nazwać)
Usuńmy wszystkie wiersze, dla których oszacowania przechwytywania wynoszą <20
Błąd systematyczny maleje, a na rysunkach wszystko staje się bardziej wyraźne - oszacowania parametrów wyraźnie nie są normalnie rozłożone. Zastanawiam się, że to oznacza ważność zgłaszanych elementów CI.
Doszedłbym do wniosku, że stronniczość rzadkich zdarzeń na przechwytywaniu jest spowodowana przez same rzadkie zdarzenia, a mianowicie te rzadkie, bardzo małe oszacowania. Nie jestem pewien, czy chcemy je usunąć, czy nie, nie wiem, co to będzie granica.
Należy jednak zauważyć, że tak czy inaczej, wydaje się, że nie ma stronniczości w prognozach w skali odpowiedzi - funkcja link po prostu absorbuje te niezwykle małe wartości.
źródło
Uprzedzenie rzadkich zdarzeń występuje tylko wtedy, gdy występują regresory. Nie wystąpi w modelu tylko przechwytującym, takim jak ten symulowany tutaj. Zobacz ten post, aby uzyskać szczegółowe informacje: http://statistichorizons.com/linear-vs-logistic#comment-276108
źródło
Wydaje się, że ryc. 7 w artykule najbardziej bezpośrednio odnosi się do błędu w prognozach. Nie do końca rozumiem ten rysunek (a konkretnie interpretacja „szacunkowe prawdopodobieństwa zdarzeń są zbyt małe” wydaje się nadmiernym uproszczeniem), ale udało mi się odtworzyć coś podobnego na podstawie ich zwięzłego opisu ich symulacji w Rozdziale 6.1:
Pierwszy wykres to moja replikacja ich ryciny 7, z dodatkiem przerywanych krzywych reprezentujących pełny zakres wyników w 10 próbach.
Zgodnie z artykułem,
x
tutaj jest zmienna predykcyjna w regresji zaczerpnięta ze standardowej normy. Tak więc, jak pokazano na drugim wykresie, względna częstotliwość obserwacji dlax > 3
(gdzie najbardziej widoczne odchylenie występuje na pierwszym wykresie) jest coraz mniejsza.Trzeci wykres pokazuje „prawdziwe” prawdopodobieństwa symulacji w procesie generowania w funkcji
x
. Wydaje się, że największe uprzedzenie występuje tam, gdziex
jest rzadkie lub nie istnieje.Podsumowując, sugerują one, że OP całkowicie błędnie zinterpretował główne twierdzenie artykułu, myląc „rzadkie zdarzenie” (tj.
x > 3
) Z „zdarzeniem, dla któregoP(Y = 1)
jest bardzo małe”. Prawdopodobnie artykuł dotyczy tego pierwszego zamiast drugiego.źródło