John Tukey sprach sich für seine " Drei-Punkte-Methode " aus, um Re-Ausdrücke von Variablen zur Linearisierung von Beziehungen zu finden.
Ich werde dies mit einer Übung aus seinem Buch Exploratory Data Analysis veranschaulichen . Dies sind Quecksilberdampfdruckdaten aus einem Experiment, bei dem die Temperatur variiert und der Dampfdruck gemessen wurde.
pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4,
9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C
Die Beziehung ist stark nichtlinear: siehe linkes Feld in der Abbildung.
Da es sich um eine Erkundungsübung handelt , erwarten wir, dass sie interaktiv ist. Der Analytiker wird gebeten , zunächst drei "typische" Punkte in der Handlung zu identifizieren : einen in der Nähe jedes Endes und einen in der Mitte. Ich habe das hier getan und sie rot markiert. (Als ich diese Übung vor langer Zeit zum ersten Mal gemacht habe, habe ich einen anderen Satz von Punkten verwendet, bin aber zu den gleichen Ergebnissen gekommen.)
Bei der Dreipunktmethode wird nach einer Box-Cox-Transformation gesucht, die bei Anwendung auf eine der Koordinaten (y oder x) (a) die typischen Punkte ungefähr auf a platziert line und (b) verwenden eine "nette" Potenz, die normalerweise aus einer "Rangliste" von Potenzen ausgewählt wird, die vom Analytiker interpretiert werden können.
Aus Gründen, die sich später zeigen werden, habe ich die Box-Cox-Familie um einen "Versatz" erweitert, damit die Transformationen in der Form vorliegen
x→(x+α)λ−1λ.
Hier ist eine schnelle und schmutzige R
Implementierung. Es findet zuerst eine optimale Lösung, rundet dann auf den nächsten Wert auf der Leiter und optimiert (innerhalb angemessener Grenzen) , vorbehaltlich dieser Einschränkung . Es ist unglaublich schnell, da alle Berechnungen nur auf diesen drei typischen Punkten des ursprünglichen Datensatzes basieren. (Sie könnten sie sogar mit Bleistift und Papier machen, genau das hat Tukey getan.)λ α(λ,α)λα
box.cox <- function(x, parms=c(1,0)) {
lambda <- parms[1]
offset <- parms[2]
if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
# x and y are length-three samples from a dataset.
dx <- diff(x)
f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
fit <- nlm(f, c(1,0))
parms <- fit$estimate #$
lambda <- ladder[which.min(abs(parms[1] - ladder))]
if (lambda==0) offset = 0 else {
do <- diff(range(y))
offset <- optimize(function(x) f(c(lambda, x)),
c(max(-min(x), parms[2]-do), parms[2]+do))$minimum
}
c(lambda, offset)
}
Wenn die Dreipunktmethode auf die Druckwerte (y) im Quecksilberdampfdatensatz angewendet wird, erhalten wir das mittlere Feld der Diagramme.
data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)
In diesem Fall ergibt sich parms
gleich : Die Methode wählt die log-Transformation des Drucks.(0,0)
Wir sind an einem Punkt angelangt, der dem Kontext der Frage entspricht: Aus irgendeinem Grund (normalerweise zur Stabilisierung der Restvarianz) haben wir die abhängige Variable erneut ausgedrückt , aber wir stellen fest, dass die Beziehung zu einer unabhängigen Variablen nichtlinear ist. Um die Beziehung zu linearisieren, wenden wir uns nun der Umformulierung der unabhängigen Variablen zu. Dies geschieht auf die gleiche Weise, indem lediglich die Rollen von x und y vertauscht werden:
parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)
Die Werte parms
für die unabhängige Variable (Temperatur) sind : Mit anderen Worten, wir sollten die Temperatur in Grad Celsius über C und ihren Kehrwert (die Potenz) verwenden. (Aus technischen Gründen fügt die Box-Cox-Transformation dem Ergebnis eine weitere hinzu .) Die resultierende Beziehung wird im rechten Bereich angezeigt.- 254 - 1 1(−1,253.75)−254−11
Inzwischen hat jeder mit dem geringsten wissenschaftlichen Hintergrund erkannt, dass die Daten uns "auffordern", absolute Temperaturen zu verwenden - wobei der Offset statt beträgt -, da diese physikalisch bedeutsam sein werden. (Wenn der letzte Plot mit einem Versatz von anstelle von neu gezeichnet wird , gibt es kaum sichtbare Änderungen. Ein Physiker würde dann die x-Achse mit beschriften, dh mit der reziproken absoluten Temperatur.)254 273 254 1 / ( 1 - x )2732542732541/(1−x)
Dies ist ein schönes Beispiel dafür, wie statistische Untersuchungen mit dem Verständnis des Untersuchungsgegenstands interagieren müssen . Tatsächlich zeigen sich gegenseitige absolute Temperaturen in physikalischen Gesetzen die ganze Zeit. Folglich allein mit einfachen EDA Methoden dieses jahrhundertealte, einfach, Daten - Set zu erkunden, haben wir die neu entdeckt Clapeyron-Beziehung : der Logarithmus des Dampfdruckes ist eine lineare Funktion der reziproken absoluten Temperatur. Nicht nur das, wir haben eine nicht sehr schlechte Schätzung des absoluten Nullpunkts (0−254Grad C), aus der Steigung des rechten Diagramms können wir die spezifische Verdampfungsenthalpie berechnen, und - wie sich herausstellt - eine sorgfältige Analyse der Rückstände identifiziert einen Ausreißer (den Wert bei einer Temperatur von Grad C), zeigt uns, wie sich die Verdampfungsenthalpie (sehr geringfügig) mit der Temperatur ändert (wodurch das ideale Gasgesetz verletzt wird), und kann uns letztendlich genaue Informationen über den effektiven Radius der Quecksilbergasmoleküle geben! Das alles aus 19 Datenpunkten und einigen Grundkenntnissen in EDA.0
R
und wenn ich einen Moment darüber nachdenke, bin ich mir nicht sicher, wie man das überhaupt tun würde. Welche Kriterien würden Sie optimieren, um die "linearste" Transformation sicherzustellen? ist verlockend, aber wie in meiner Antwort hier zu sehen ist , kann allein nicht verwendet werden, um festzustellen, ob die Linearitätsannahme eines Modells erfüllt ist. Hatten Sie einige Kriterien im Auge?