Ich würde gerne wissen, wie man negative Werte umwandelt Log()
, da ich heteroskedastische Daten habe. Ich habe gelesen, dass es mit der Formel funktioniert, Log(x+1)
aber dies funktioniert nicht mit meiner Datenbank und ich erhalte weiterhin NaNs als Ergebnis. Ich erhalte zB die folgende Warnmeldung (ich habe meine Datenbank nicht vollständig angegeben, weil ich denke, dass einer meiner negativen Werte ausreicht, um ein Beispiel zu zeigen):
> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
>
Danke im Voraus
AKTUALISIEREN:
Hier ist ein Histogramm meiner Daten. Ich arbeite mit paläontologischen Zeitreihen chemischer Messungen. ZB ist der Unterschied zwischen Variablen wie Ca und Zn zu groß, dann brauche ich eine Art Datenstandardisierung. Deshalb teste ich die log()
Funktion.
Das sind meine Rohdaten
log(x+1)
Transformationswille ist nur für definiertx > -1
, da er dannx + 1
positiv ist. Es wäre gut zu wissen, warum Sie Ihre Daten protokollieren möchten.sign(x) * (abs(x))^(1/3)
, deren Details von der Softwaresyntax abhängen. Weitere Informationen zu Kubikwurzeln finden Sie unter stata-journal.com/sjpdf.html?articlenum=st0223 (siehe insbesondere S.152-3). Wir haben Kubikwurzeln verwendet, um die Visualisierung einer Antwortvariablen zu unterstützen, die von Natur ausAntworten:
Da der Logarithmus nur für positive Zahlen definiert ist, können Sie den Logarithmus für negative Werte nicht verwenden. Wenn Sie jedoch eine bessere Verteilung Ihrer Daten erreichen möchten, können Sie die folgende Transformation anwenden.
Angenommen, Sie haben negative Daten verzerrt:
und schließlich den inversen hyperbolischen Tangens anwenden:
Jetzt sehen Ihre Daten ungefähr normal verteilt aus. Dies wird auch als Fisher-Transformation bezeichnet.
quelle
z <- z[-max(z)]
undz <- z[-min(z)]
schrumpfen unangemessenz
auf einen einzigen Wert. Auch die allgemeine Funktionatanh(((x - min(x)) / (max(x) - min(x))))
erzeugtInf
für die Minimal- und Maximalwerte vonx
.Um es in eine logarithmische Skala umzuwandeln, suchen Sie zuerst das Logbuch der positiven Zahl und multiplizieren Sie es mit dem Vorzeichen. Der folgende Code sollte dies tun.
Anhand des obigen Beispiels können wir die folgende schiefe Verteilung zeichnen
Nachdem wir die Transformationsfunktion wie folgt verwendet haben, erhalten wir eine Verteilung, die "normaler" aussieht.
quelle
R
Lieferumfang enthalten) implementieren die Signum- Funktion (die -1 für negative Zahlen, 1 für positive Zahlen und 0 für Null zurückgibt). Die Verwendung wäre ausdrucksvoller und schneller. (2) Ihr Vorschlag ist schlecht für die Analyse von Daten wie den abgebildeten, da es eine große Diskontinuität bei Null gibt!y <- 1
wann