Me gustaría saber cómo transformar valores negativos Log()
, ya que tengo datos heteroscedasticos. Leí que funciona con la fórmula, Log(x+1)
pero esto no funciona con mi base de datos y sigo obteniendo NaNs como resultado. Por ejemplo, recibo este mensaje de Advertencia (no puse mi base de datos completa porque creo que con uno de mis valores negativos es suficiente para mostrar un ejemplo):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
Gracias por adelantado
ACTUALIZAR:
Aquí hay un histograma de mis datos. Estoy trabajando con series de tiempo de paleontología de mediciones químicas, por ejemplo, la diferencia entre variables como Ca y Zn es demasiado grande, entonces necesito algún tipo de estandarización de datos, por eso estoy probando la log()
función.
Esta es mi información en bruto
log(x+1)
voluntad de transformación solo se define parax > -1
, ya que entoncesx + 1
es positiva. Sería bueno saber su razón para querer registrar la transformación de sus datos.sign(x) * (abs(x))^(1/3)
; los detalles dependerán de la sintaxis del software. Para obtener más información sobre las raíces cúbicas, consulte, por ejemplo, stata-journal.com/sjpdf.html?articlenum=st0223 (consulte especialmente las págs. 152-3). Utilizamos raíces cúbicas para ayudar a visualizar una variable de respuesta que puede ser de naturalezaRespuestas:
Como el logaritmo solo se define para números positivos, no puede tomar el logaritmo de los valores negativos. Sin embargo, si desea obtener una mejor distribución de sus datos, puede aplicar la siguiente transformación.
Supongamos que tiene datos negativos sesgados:
y finalmente aplica la tangente hiperbólica inversa:
Ahora, sus datos se ven aproximadamente distribuidos normalmente. Esto también se llama transformación de Fisher.
fuente
z <- z[-max(z)]
y sez <- z[-min(z)]
reducen inapropiadamentez
a un solo valor. También la función generalatanh(((x - min(x)) / (max(x) - min(x))))
produceInf
para los valores mínimo y máximo dex
.Para transformarlo en una escala logarítmica, primero encuentre el registro del número positivo y luego multiplíquelo por su signo, el siguiente código debería hacer eso.
Usando el ejemplo anterior, podemos trazar la siguiente distribución sesgada
Después de usar la función de transformación de la siguiente manera, obtenemos una distribución que se ve más 'normal'
fuente
R
incluidos) implementan la función signum (que devuelve -1 para números negativos, 1 para números positivos y 0 para cero). Usarlo sería más expresivo y más rápido. (2) ¡Su propuesta es pobre para analizar datos como los ilustrados, porque tiene una gran discontinuidad en cero!y <- 1