Chciałbym wiedzieć, jak przekształcić wartości ujemne Log()
, ponieważ mam dane heteroskedastyczne. Przeczytałem, że działa ze wzorem, Log(x+1)
ale to nie działa z moją bazą danych i nadal otrzymuję NaN. Np. Dostaję ten komunikat ostrzegawczy (nie umieściłem całej bazy danych, ponieważ myślę, że jedna z moich wartości ujemnych wystarczy, aby pokazać przykład):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
Z góry dziękuję
AKTUALIZACJA:
Oto histogram moich danych. Pracuję z paleontologicznymi szeregami czasowymi pomiarów chemicznych, np. Różnica między zmiennymi takimi jak Ca i Zn jest zbyt duża, to potrzebuję pewnego rodzaju standaryzacji danych, dlatego testuję tę log()
funkcję.
To są moje surowe dane
log(x+1)
Transformacja jest zdefiniowana tylko dlax > -1
, ponieważ wtedyx + 1
jest dodatni. Dobrze byłoby poznać powód, dla którego chcesz logować transformację danych.sign(x) * (abs(x))^(1/3)
, w zależności od składni oprogramowania. Więcej informacji na temat pierwiastek sześcienny patrz np stata-journal.com/sjpdf.html?articlenum=st0223 (patrz zwł. Pp.152-3) korzenie .My używane kostki do pomocy wizualizacji zmiennej odpowiedzi, które mogą być pozytywne i negatywne w przyrodzie .pl / nature / journal / v500 / n7464 / full /…Odpowiedzi:
Ponieważ logarytm jest zdefiniowany tylko dla liczb dodatnich, nie można przyjąć logarytmu wartości ujemnych. Jeśli jednak chcesz uzyskać lepszą dystrybucję swoich danych, możesz zastosować następującą transformację.
Załóżmy, że wypaczyłeś negatywne dane:
następnie możesz zastosować pierwszą transformację, aby Twoje dane leżały w :(−1,1)
i na koniec zastosuj odwrotną styczną hiperboliczną:
Teraz Twoje dane wyglądają mniej więcej normalnie. Nazywa się to również transformacją Fishera.
źródło
z <- z[-max(z)]
iz <- z[-min(z)]
niewłaściwie zmniejszająz
się do jednej wartości. Również funkcja ogólnaatanh(((x - min(x)) / (max(x) - min(x))))
generujeInf
wartości minimalne i maksymalne wynoszącex
.Aby przekształcić go w skalę dziennika, najpierw znajdź dziennik liczby dodatniej, a następnie pomnóż go przez jego znak, następujący kod powinien to zrobić.
Korzystając z powyższego przykładu, możemy wykreślić następujący przekrzywiony rozkład
Po użyciu funkcji przekształcania w następujący sposób, otrzymujemy rozkład, który wygląda bardziej „normalnie”
źródło
R
zestawie) implementuje funkcję signum (która zwraca -1 dla liczb ujemnych, 1 dla liczb dodatnich i 0 dla zer). Korzystanie z niego byłoby bardziej wyraziste i szybsze. (2) Twoja propozycja jest kiepska do analizy danych takich jak te przedstawione, ponieważ ma ogromną nieciągłość na poziomie zerowym!y <- 1
gdy wygląda na dowolne - może naprawdę popsuć analizę statystyczną.