Mam zestaw danych z dużą ilością zer, który wygląda następująco:
set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
Chciałbym narysować linię dla jej gęstości, ale density()
funkcja wykorzystuje ruchome okno, które oblicza ujemne wartości x.
lines(density(x), col = 'grey')
Istnieją density(... from, to)
argumenty, ale wydają się one jedynie przycinać obliczenia, a nie zmieniać okna, tak aby gęstość przy 0 była zgodna z danymi, co widać na poniższym wykresie:
lines(density(x, from = 0), col = 'black')
(gdyby interpolacja została zmieniona, oczekiwałbym, że czarna linia miałaby większą gęstość przy 0 niż szara linia)
Czy istnieją alternatywy dla tej funkcji, które zapewniłyby lepsze obliczenie gęstości przy zeru?
źródło
Zgadzam się z Robem Hyndmanem, że musisz zajmować się zerami osobno. Istnieje kilka metod radzenia sobie z estymacją gęstości jądra zmiennej z ograniczonym wsparciem, w tym „odbicie”, „ponowna normalizacja” i „kombinacja liniowa”. Nie wydaje się, aby zostały zaimplementowane w
density
funkcji R , ale są dostępne w pakiecie Benna Jannakdens
dla Staty .źródło
Inna opcja, gdy masz dane z logiczną dolną granicą (takie jak 0, ale mogą to być inne wartości), o których wiesz, że dane nie spadną poniżej, a oszacowanie normalnego zagęszczenia jądra umieszcza wartości poniżej tej granicy (lub jeśli masz górną granicę lub oba) to użycie oszacowań logspline. Pakiet logspline dla R implementuje je, a funkcje mają argumenty do określenia granic, więc oszacowanie przejdzie do granicy, ale nie dalej i nadal będzie skalowane do 1.
Istnieją również metody (
oldlogspline
funkcja), które wezmą pod uwagę cenzurowanie interwałów, więc jeśli te 0 nie są dokładnie zerami 0, ale są zaokrąglone, abyś wiedział, że reprezentują wartości między 0 a jakąś inną liczbą (na przykład limit wykrywania) może przekazać tę informację funkcji dopasowania.Jeśli dodatkowe 0 to prawdziwe 0 (nie zaokrąglone), wówczas oszacowanie wartości szczytowej lub masy punktowej jest lepszym podejściem, ale można je również połączyć z estymacją logspline.
źródło
Możesz spróbować zmniejszyć przepustowość (niebieska linia oznacza
adjust=0.5
),ale prawdopodobnie KDE nie jest najlepszą metodą radzenia sobie z takimi danymi.
źródło