plot(density(rexp(100))
Oczywiście cała gęstość na lewo od zera reprezentuje błąd.
Chciałbym podsumować niektóre dane dla statystycznych i chcę uniknąć pytań o to, dlaczego dane nieujemne mają gęstość na lewo od zera. Wykresy służą do sprawdzania losowości; Chcę pokazać rozkład zmiennych według grup leczenia i kontroli. Rozkłady są często wykładnicze. Histogramy są trudne z różnych powodów.
Szybkie wyszukiwanie w Google daje mi pracę statystyczną na nieujemnych jądrach, np .: to .
Ale czy którykolwiek z nich został zaimplementowany w języku R? Czy spośród wdrożonych metod któreś z nich są „najlepsze” w jakiś sposób dla statystyki opisowej?
EDYCJA: nawet jeśli from
polecenie może rozwiązać mój obecny problem, dobrze byłoby wiedzieć, czy ktoś zaimplementował jądra na podstawie literatury na temat nieujemnej oceny gęstości
źródło
plot(density(rexp(100), from=0))
?Odpowiedzi:
Jednym z rozwiązań, zapożyczonym z podejść do ważenia krawędzi statystyki przestrzennej, jest obcięcie gęstości po lewej stronie na zero, ale zwiększenie wagi danych, które są najbliższe zeru. Chodzi o to, że każda wartość jest „rozkładana” na jądro o jednostkowej całkowitej powierzchni wyśrodkowanej na x ; każda część jądra, która przelałaby się na terytorium ujemne, jest usuwana, a jądro jest normalizowane do obszaru jednostki.x x
Na przykład z jądrem Gaussa , waga renormalizacji wynosiK.h( y, x ) = exp( - 12)( ( y- x ) / h )2)) / 2 π--√
gdzie jest funkcją skumulowanego rozkładu normalnej zmiany średniej x i odchylenia standardowego h . Porównywalne formuły są dostępne dla innych jąder.Φ x h
Jest to prostsze - i znacznie szybsze w obliczeniach - niż próba zawężenia pasma w pobliżu . W każdym razie trudno jest dokładnie określić, w jaki sposób należy zmienić przepustowość w pobliżu zera . Niemniej jednak ta metoda jest również ad hoc : nadal będzie pewne odchylenie w pobliżu 0 . Wygląda na to, że działa lepiej niż domyślna ocena gęstości. Oto porównanie przy użyciu obszernego zestawu danych:0 0 0
Niebieski pokazuje domyślną gęstość, podczas gdy czerwony pokazuje gęstość skorygowaną dla krawędzi przy . Prawdziwy podstawowy rozkład jest śledzony jako linia kropkowana w celach informacyjnych.0
Kod R.
density
Funkcja wR
skarżą się, że suma wag nie jest jednością, ponieważ chce całkę wszystkich liczb rzeczywistych jako jedność, podczas gdy takie podejście sprawia, że całkę liczby dodatnie równe jedności. Dla sprawdzenia, ta ostatnia całka jest szacowana jako suma Riemanna.źródło
Alternatywą jest podejście Kooperberga i współpracowników, oparte na szacowaniu gęstości za pomocą splajnów w celu przybliżenia logarytmicznej gęstości danych. Pokażę przykład wykorzystujący dane z odpowiedzi @ whuber, który pozwoli na porównanie podejść.
W tym celu musisz zainstalować pakiet logspline ; zainstaluj, jeśli nie jest:
Załaduj pakiet i oszacuj gęstość za pomocą
logspline()
funkcji:Poniżej zakładam, że obiekt
d
z odpowiedzi @ whuber jest obecny w obszarze roboczym.Powstały wykres pokazano poniżej, a gęstość logspline jest pokazana czerwoną linią
Ponadto obsługę gęstości można określić za pomocą argumentów
lbound
iubound
. Jeśli chcemy założyć, że gęstość wynosi 0 na lewo od 0, a nieciągłość wynosi 0, możemy użyćlbound = 0
w wywołaniulogspline()
na przykładUzyskano następujące oszacowanie gęstości (pokazane tutaj z oryginalnym
m
dopasowaniem logspline, ponieważ poprzedni rysunek był już zajęty).Powstały wykres pokazano poniżej
W tym przypadku wykorzystując wiedzę ox = 0
x
x
źródło
logspline
? Dla mnie gęstość zarówno wersji ograniczonej, jak i nieograniczonej wynosi zerox = 0
.Aby porównać rozkłady według grup (które według ciebie są celem jednego z twoich komentarzy), dlaczego nie coś prostszego? Równoległe wykresy pudełkowe działają dobrze, jeśli N jest duże; wykresy pasków równoległych działają, jeśli N jest małe (i oba pokazują dobrze wartości odstające, co, jak mówisz, jest problemem w twoich danych).
źródło
Jak komentuje Stéphane, możesz użyć,
from = 0
a dodatkowo możesz przedstawić swoje wartości pod krzywą gęstości za pomocąrug (x)
źródło
from=0
wygląda na to, że po prostu powstrzymuje wykreślanie wartości poniżej 0; to nie poprawia obliczeń, ponieważ część rozkładu została rozmazana poniżej zerafrom
polecenia daje wykres, który wygląda tak, jakby miał szczyt dokładnie na zero. Ale jeśli spojrzysz na histogramy z ciągle mniejszymi pojemnikami, wiele danych pokaże szczytowe AT zero. Tofrom
tylko sztuczka graficzna.from=0
coś tłumiło. Po prostu zaczyna „siatkę” od zera.density(rexp(100), from=0)
nie ma nic wspólnego z grafiką