Biorąc pod uwagę wypaczenie danych z x, oczywistą pierwszą rzeczą do zrobienia jest użycie regresji logistycznej ( link wiki). Więc jestem z Whuberem w tej sprawie. Powiem, że samo $ x $ będzie miało duże znaczenie, ale nie wyjaśni większości odchyleń (odpowiednika całkowitej sumy kwadratów w OLS). Można więc zasugerować, że istnieje inna zmienna towarzysząca oprócz $ x $, która pomaga w wyjaśnianiu (np. Osoby dokonujące klasyfikacji lub zastosowaną metodę), Twoje dane $ y $ są już [0,1]: czy wiesz, czy oni reprezentują prawdopodobieństwa lub wskaźniki występowania? Jeśli tak, powinieneś wypróbować regresję logistyczną, używając nieprzekształconych $ y $ (zanim będą to współczynniki / prawdopodobieństwa).
Obserwacja Petera Floma ma sens tylko wtedy, gdy twoja y nie jest prawdopodobieństwem. Sprawdź plot (density (y)); rug (y)
w różnych segmentach $ x $ i zobacz, czy widzisz zmieniającą się dystrybucję Beta lub po prostu uruchom betareg
. Zauważ, że dystrybucja beta jest również wykładniczą dystrybucją rodzinną i dlatego powinno być możliwe modelowanie jej za pomocą glm
w R.
Aby dać ci wyobrażenie o tym, co mam na myśli przez logistykę regresja:
# `` rzeczywista '' zależność, w której y jest interpretowane jako prawdopodobieństwo sukcesuy = runif (400) x = -2 * (log (y / (1-y)) - 2 ) + rnorm (400, sd = 2) glm.logit = glm (y ~ x, rodzina = dwumian); wykres podsumowujący (glm.logit) (y ~ x); wymagają (daleko); grid () points (x, ilogit (coef (glm.logit)% *% rbind (1.0, x)), col = "red") tt = runif (400) # przykład twojej nietransformowanej regresjinewy = ifelse (tt < y, 1, 0) glm.logit = glm (nowość ~ x, rodzina = dwumian); podsumowanie (glm.logit) # jeśli nie ma dobrego dopasowania w prawdopodobieństwie ogona, wypróbuj inną funkcję łącza lub oversampling z korektą (będzie gorzej tutaj, ale może nie w twoich danych) glm.probit = glm (y ~ x, family = dwumian (link = probit)); podsumowanie (glm.probit) glm.cloglog = glm (y ~ x, rodzina = dwumian (link = cloglog)); podsumowanie (glm.cloglog)
EDYCJA: po przeczytaniu komentarzy:
Biorąc pod uwagę, że „Wartości y to prawdopodobieństwa przynależności do określonej klasy, uzyskane z uśredniania klasyfikacji wykonanych ręcznie przez ludzi”, zdecydowanie zalecam wykonanie regresji logistycznej na podstawie danych podstawowych. Oto przykład:
Załóżmy, że patrzysz na prawdopodobieństwo, że ktoś zgodzi się na propozycję ($ y = 1 $ zgadzam się, $ y = 0 $ nie zgadzam się) z zachętą $ x $ między 0 a 10 (można przekształcić dziennik, np. wynagrodzenie). Dwie osoby proponują kandydatom ofertę („Jill and Jack”). Prawdziwy model jest taki, że kandydaci mają podstawowy wskaźnik akceptacji, który rośnie wraz ze wzrostem zachęty. Ale zależy to również od tego, kto składa ofertę (w tym przypadku mówimy, że Jill ma większe szanse niż Jack). Załóżmy, że łącznie pytają 1000 kandydatów i zbierają ich dane dotyczące akceptacji (1) lub odrzucenia (0).
require (daleko) people = c ("Jill", "Jack") proposer = sample (people, 1000, replace = T) incentive = runif (1000, min = 0, max = 10) szum = rnorm (1000, sd = 2) # bazowe prawdopodobieństwo uzgodnienia wynosi około 12% (ilogit (-2)) agrees = ilogit (-2 + 1 * zachęta + ifelse (proposer == "Jill", 0, -0,75) + szum) tt = runif (1000) obserwowaneAgrees = ifelse (tt < zgadza się, 1,0) glm.logit = glm (zaobserwowaneAgrees ~ zachęta + proposer, rodzina = dwumian); podsumowanie (glm.logit)
Z podsumowania widać, że model pasuje całkiem dobrze. Odchylenie to $ \ chi ^ 2_ {n-3} $ (standard z $ \ chi ^ 2 $ to $ \ sqrt {2.df} $). Co pasuje i bije model o ustalonym prawdopodobieństwie (różnica w odchyleniach wynosi kilkaset przy $ \ chi ^ 2_ {2} $). Trochę trudniej jest to narysować, biorąc pod uwagę, że istnieją tutaj dwie zmienne towarzyszące, ale masz pomysł.
xs = coef (glm.logit)% *% rbind (1, incentive, as.factor (proposer)) ys = as.vector (unlist (ilogit (xs))) plot (ys ~ incentive, type = "n"); wymagają (daleko); grid () points (incentive [proposer == "Jill"], ys [proposer == "Jill"], col = "red") points (incentive [proposer == "Jack"], ys [proposer == "Jack "], col =" blue ")
Jak widać, Jill ma łatwiejszy czas na uzyskanie dobrego współczynnika trafień niż Jack, ale to znika wraz ze wzrostem zachęty.
Zasadniczo powinieneś zastosować ten typ modelu do oryginalnych danych. Jeśli wynik jest binarny, zachowaj 1/0, jeśli jest wielomianowy, potrzebujesz wielomianowej regresji logistycznej. Jeśli uważasz, że dodatkowe źródło wariancji nie jest kolektorem danych, dodaj kolejny czynnik (lub zmienną ciągłą), cokolwiek uważasz, że ma sens dla twoich danych. Dane są jako pierwsze, drugie i trzecie, a dopiero potem do gry wchodzi model.