Regresja logistyczna ważona wielkością sprawy

9

Patrzę na kilka problemów z regresją logistyczną. („zwykłe” i „warunkowe”).

Idealnie, chciałbym wyważyć każdą z wejściowych spraw, aby glm skupił się bardziej na prawidłowym przewidywaniu wyższych ważonych przypadków kosztem ewentualnego błędnego sklasyfikowania mniej ważonych przypadków.

Z pewnością zostało to już zrobione wcześniej. Czy ktoś może skierować mnie w stronę odpowiedniej literatury (lub ewentualnie zasugerować zmodyfikowaną funkcję prawdopodobieństwa).

Dzięki!

Noah
źródło
1
Zakładasz, że celem jest klasyfikacja, a nie przewidywanie. Aby uzyskać optymalne oszacowanie prawdopodobieństwa, nie trzeba niczego ponownie obciążać. „Fałszywe negatywy” i „fałszywie pozytywne” występują tylko w przypadku wymuszonych wyborów i zwykle nikt nie zmusza do czysto binarnego wyboru.
Frank Harrell,
@Frank Masz rację. Ostatecznie celem tego projektu jest przewidzenie wyniku dalszych wydarzeń. (Sądzę więc, że można to uznać za smak uczenia maszynowego z danymi szkoleniowymi). Niektóre wyniki są bardziej „ważne” niż inne, więc szukałem sposobu, aby odpowiednio je wyważyć. Sugestia Nicka dotycząca funkcji prawdopodobieństwa ma sens i powinna być dość trywialna w implementacji w kodzie.
Noah,
1
Wygląda na to, że potrzebujesz dokładnie modelu prawdopodobieństwa bez konieczności stosowania wag.
Frank Harrell,
1
Dobrze; podłącz funkcję kosztu i użyj przewidywanego prawdopodobieństwa, a będziesz miał optymalną decyzję.
Frank Harrell,
1
Przy dobrze skalibrowanym modelu prawdopodobieństwa nie ma „błędów”, po prostu losowość, której nie można przewidzieć. Optymalne decyzje są funkcją przewidywanego prawdopodobieństwa i funkcji kosztów przy podejmowaniu różnych decyzji do działania.
Frank Harrell,

Odpowiedzi:

3

glmposiada parametr weightsdokładnie do tego celu. Zapewniasz mu wektor liczb w dowolnej skali, który utrzymuje taką samą liczbę wag, jak masz obserwacje.

Dopiero teraz zdaję sobie sprawę, że możesz nie mówić R. Jeśli nie, możesz chcieć.

Nick Sabbe
źródło
Bardzo dobrze znam R, jednak chciałbym zrozumieć matematykę stojącą za funkcją prawdopodobieństwa. Mogę to kodować w C ++ lub innym języku. (Samo zaufanie do „czarnej skrzynki” funkcji glm nie zawsze jest najlepszym rozwiązaniem)
Noah
Ach Dobrze dla ciebie. O ile mi wiadomo, wagi są po prostu używane do pomnożenia prawdopodobieństwa logicznego obserwacji. Więc jeśli napisałeś wersję nieważoną, dodawanie wag powinno być uciążliwe. Zauważ też, że zawsze możesz spojrzeć na kod źródłowy, glmaby (prawdopodobnie) znaleźć implementację C.
Nick Sabbe
2
@Nick, ja również miałem błędne przekonanie, że taka była funkcja argumentu wag w glm - nie jest. Jest on faktycznie stosowany, gdy wyniki dwumianowe są niejednorodne w tym sensie, że opierają się na różnej liczbie prób. Na przykład, jeśli pierwsza obserwacja była dwumianowa ( ), a druga była dwumianowa ( ), ich waga . Ponownie argument wag w glm () NIE próbkuje wag. Aby to zrobić w R, musisz rozszerzyć zestaw danych zgodnie z wagami i dopasować model do rozszerzonego zestawu danych (w tym przypadku SE mogą się jednak mylić). 3,.57,.53,7
Makro,
3
Oto dyskusja na temat argumentu „wagi” na forum: r.789695.n4.nabble.com/Weights-in-binomial-glm-td1991249.html
Makro
@Macro: thx! Bardzo schludny. Jedną z rzeczy, która mogłaby trafić mnie w zęby, gdybym użył jej przed komentarzem :-)
Nick Sabbe
1

Jeśli masz dostęp do SAS, można to bardzo łatwo osiągnąć za pomocą PROC GENMOD. Tak długo, jak każda obserwacja ma zmienną wagi, użycie instrukcji wagi pozwoli ci przeprowadzić analizę, której szukasz. Używałem go głównie przy użyciu wag z odwrotnym prawdopodobieństwem leczenia, ale nie widzę powodu, dla którego nie można przypisać wag do danych w celu podkreślenia niektórych rodzajów przypadków, o ile upewnisz się, że twoje N pozostaje stałe. Będziesz także musiał upewnić się, że zawierasz jakąś zmienną identyfikatora, ponieważ technicznie przypadki z podwyższoną ważnością są powtarzanymi obserwacjami. Przykładowy kod z identyfikatorem obserwacji „id” i zmienną wagową „wt”:

proc genmod data=work.dataset descending;
    class id;
    model exposure = outcome covariate / dist=bin link=logit;
    weight wt;
    repeated subject=id/type=ind;
run;
Fomite
źródło