Je voudrais savoir comment transformer des valeurs négatives en Log()
, car j'ai des données hétéroscédastiques. J'ai lu que cela fonctionne avec la formule Log(x+1)
mais cela ne fonctionne pas avec ma base de données et je continue à obtenir des NaN en conséquence. Par exemple, je reçois ce message d'avertissement (je n'ai pas mis ma base de données complète parce que je pense qu'avec une de mes valeurs négatives suffit pour montrer un exemple):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
Merci d'avance
MISE À JOUR:
Voici un histogramme de mes données. Je travaille avec des séries paléontologiques de mesures chimiques, par exemple la différence entre des variables comme Ca et Zn est trop grande, alors j'ai besoin d'un certain type de standardisation des données, c'est pourquoi je teste la log()
fonction.
Ce sont mes données brutes
log(x+1)
volonté de transformation n'est définie que pourx > -1
, alors ellex + 1
est positive. Il serait bon de connaître la raison pour laquelle vous souhaitez vous connecter pour transformer vos données.sign(x) * (abs(x))^(1/3)
, les détails dépendant de la syntaxe du logiciel. Pour en savoir plus sur les racines cubiques, voir par exemple stata-journal.com/sjpdf.html?articlenum=st0223 (voir en particulier pp.152-3). Nous avons utilisé des racines cubiques pour aider à visualiser une variable de réponse qui peut être de natureRéponses:
Étant donné que le logarithme n'est défini que pour les nombres positifs, vous ne pouvez pas prendre le logarithme des valeurs négatives. Cependant, si vous souhaitez obtenir une meilleure distribution de vos données, vous pouvez appliquer la transformation suivante.
Supposons que vous ayez biaisé les données négatives:
alors vous pouvez appliquer une première transformation pour que vos données se trouvent dans :( - 1 , 1 )
et enfin appliquer la tangente hyperbolique inverse:
Maintenant, vos données semblent distribuées approximativement normalement. Ceci est également appelé transformation de Fisher.
la source
z <- z[-max(z)]
etz <- z[-min(z)]
réduisent de manière inappropriéez
à une seule valeur. La fonction généraleatanh(((x - min(x)) / (max(x) - min(x))))
produit égalementInf
pour les valeurs minimale et maximale dex
.Pour le transformer en échelle logarithmique, recherchez d'abord le log du nombre positif puis multipliez-le par son signe, le code suivant devrait le faire.
En utilisant l'exemple ci-dessus, nous pouvons tracer la distribution asymétrique suivante
Après avoir utilisé la fonction de transformation comme suit, nous obtenons une distribution qui semble plus «normale»
la source
R
inclus) implémentent la fonction signum (qui renvoie -1 pour les nombres négatifs, 1 pour les nombres positifs et 0 pour zéro). Son utilisation serait plus expressive et plus rapide. (2) Votre proposition est médiocre pour analyser des données comme celles illustrées, car elle présente une discontinuité énorme à zéro!y <- 1
lorsque semble arbitraire - cela pourrait vraiment bousiller une analyse statistique.