Я хотел бы знать, как преобразовать отрицательные значения в Log()
, так как у меня есть гетероскедастические данные. Я прочитал, что это работает с формулой, Log(x+1)
но это не работает с моей базой данных, и я продолжаю получать NaN в результате. Например, я получаю это предупреждение (я не поместил свою полную базу данных, потому что я думаю, что одного из моих отрицательных значений достаточно, чтобы показать пример):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
заранее спасибо
ОБНОВИТЬ:
Вот гистограмма моих данных. Я работаю с палеонтологическими временными рядами химических измерений, например, разница между такими переменными, как Ca и Zn, слишком велика, а затем мне нужен какой-то тип стандартизации данных, поэтому я тестирую log()
функцию.
Это мои необработанные данные
log(x+1)
Преобразование будет определенно только дляx > -1
, а затемx + 1
положительно. Было бы хорошо узнать причину, по которой вы хотите преобразовать ваши данные в журнал.sign(x) * (abs(x))^(1/3)
в деталях, в зависимости от синтаксиса программного обеспечения. Для получения дополнительной информации о корнях куба см., Например, stata-journal.com/sjpdf.html?articlenum=st0223 (см. Esp. Стр.152-3). Мы использовали корни куба, чтобы помочь визуализации переменной ответа, которая может быть положительной и отрицательной по своей природе .com / nature / journal / v500 / n7464 / full /…Ответы:
Поскольку логарифм определен только для положительных чисел, вы не можете взять логарифм отрицательных значений. Однако, если вы стремитесь получить более качественное распространение своих данных, вы можете применить следующее преобразование.
Предположим, вы отклонили отрицательные данные:
затем вы можете применить первое преобразование, чтобы ваши данные лежали в :(−1,1)
и, наконец, применим обратную гиперболическую касательную:
Теперь ваши данные выглядят примерно нормально распределенными. Это также называется преобразованием Фишера.
источник
z <- z[-max(z)]
иz <- z[-min(z)]
ненадлежащим образом сокращаютсяz
до единого значения. Также общая функцияatanh(((x - min(x)) / (max(x) - min(x))))
выдаетInf
для минимального и максимального значенияx
.Чтобы преобразовать его в логарифмическую шкалу, сначала найдите логарифм с положительным числом, а затем умножьте его на знак, следующий код должен это сделать.
Используя приведенный выше пример, мы можем построить следующее перекошенное распределение
После использования функции преобразования следующим образом, мы получаем распределение, которое выглядит более «нормальным»
источник
R
включены) реализуют функцию signum (которая возвращает -1 для отрицательных чисел, 1 для положительных чисел и 0 для нуля). Использование было бы более выразительным и быстрым. (2) Ваше предложение плохое для анализа данных, подобных показанным, потому что оно имеет огромный разрыв в нуле!y <- 1
когда выглядит произвольно - это может действительно испортить статистический анализ.