Gostaria de saber como transformar valores negativos Log()
, pois tenho dados heterocedásticos. Eu li que ele funciona com a fórmula, Log(x+1)
mas isso não funciona com meu banco de dados e continuo recebendo NaNs como resultado. Por exemplo, recebo esta mensagem de aviso (não coloquei meu banco de dados completo porque acho que com um dos meus valores negativos é suficiente para mostrar um exemplo):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
desde já, obrigado
ATUALIZAR:
Aqui está um histograma dos meus dados. Estou trabalhando com séries temporais paleontológicas de medições químicas. Por exemplo, a diferença entre variáveis como Ca e Zn é muito grande, então preciso de algum tipo de padronização de dados, por isso estou testando a log()
função.
Estes são meus dados brutos
log(x+1)
vontade de transformação é definida apenas parax > -1
, como entãox + 1
é positiva. Seria bom saber seu motivo para querer fazer logon e transformar seus dados.sign(x) * (abs(x))^(1/3)
, os detalhes dependendo da sintaxe do software. Para obter mais informações sobre raízes de cubos, consulte, por exemplo, stata-journal.com/sjpdf.html?articlenum=st0223 (consulte esp. Pp.152-3). Utilizamos raízes de cubo para ajudar na visualização de uma variável de resposta de naturezaRespostas:
Como o logaritmo é definido apenas para números positivos, você não pode usar o logaritmo de valores negativos. No entanto, se você deseja obter uma melhor distribuição para seus dados, pode aplicar a transformação a seguir.
Suponha que você tenha inclinado dados negativos:
então você pode aplicar uma primeira transformação para fazer com que seus dados se encontrem( - 1 , 1 )
e, finalmente, aplique a tangente hiperbólica inversa:
Agora, seus dados parecem distribuídos aproximadamente normalmente. Isso também é chamado de transformação de Fisher.
fonte
z <- z[-max(z)]
e se reduzemz <- z[-min(z)]
inadequadamentez
a um único valor. Além disso, a função geralatanh(((x - min(x)) / (max(x) - min(x))))
produzInf
para os valores mínimo e máximo dex
.Para transformá-lo em uma escala de log, primeiro encontre o log do número positivo e depois multiplique-o por seu sinal; o código a seguir deve fazer isso.
Usando o exemplo acima, podemos plotar a seguinte distribuição distorcida
Depois de usar a função de transformação da seguinte forma, obtemos uma distribuição que parece mais 'normal'
fonte
R
incluídas) implementa a função signum (que retorna -1 para números negativos, 1 para números positivos e 0 para zero). Usá-lo seria mais expressivo e mais rápido. (2) Sua proposta é ruim para analisar dados como os ilustrados, porque possui uma enorme descontinuidade em zero!y <- 1