Trasformazione simile a Box-Cox per variabili indipendenti?


53

Esiste una trasformazione simile a Box-Cox per variabili indipendenti? Cioè, una trasformazione che ottimizza la variabile modo che possa adattarsi più ragionevolmente a un modello lineare?Xy~f(x)

In tal caso, esiste una funzione per eseguire questa operazione R?


1
Non conosco nessuna struttura per farlo Re, pensandoci per un momento, non sono sicuro di come si farebbe. Quali criteri ottimizzeresti per garantire la trasformazione "più lineare"? è allettante ma, come si vede nella mia risposta qui , R 2 da solo non può essere utilizzato per vedere se l'assunzione di linearità di un modello è soddisfatta. Hai in mente alcuni criteri? R2R2
Macro

1
Ho l'impressione di aver già visto un articolo che ne parlava. Forse googling con "covariata" invece di "variabile indipendente" è più giudizioso.
Stéphane Laurent,

Penso che (dalla memoria ...) ci sia una certa implementazione di questo nel pacchetto auto (R). Ma anche tu indagherai sul gam come nel pacchetto gmcv.
kjetil b halvorsen,

Un thread che discute dell'inferenza automatica dei parametri Box-Cox ( trasformando simultaneamente tutte le variabili indipendenti insieme alla variabile dipendente) è apparso su stats.stackexchange.com/questions/60431/… .
whuber

Risposte:


72

John Tukey ha sostenuto il suo " metodo a tre punti " per trovare re-espressioni di variabili per linearizzare le relazioni.

Illustrerò con un esercizio tratto dal suo libro, Exploratory Data Analysis . Questi sono i dati sulla pressione del vapore di mercurio da un esperimento in cui è stata variata la temperatura e misurata la pressione del vapore.

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

La relazione è fortemente non lineare: vedere il riquadro di sinistra nell'illustrazione.

Terreni

Poiché si tratta di un esercizio esplorativo , ci aspettiamo che sia interattivo. All'analista viene chiesto di iniziare identificando tre punti "tipici" nella trama : uno vicino ad ogni estremità e uno al centro. L'ho fatto qui e li ho contrassegnati in rosso. (Quando ho fatto questo esercizio per la prima volta molto tempo fa, ho usato una serie diversa di punti ma sono arrivato agli stessi risultati.)

Nel metodo a tre punti, si cerca - con la forza bruta o in altro modo - una trasformazione Box-Cox che, quando applicata a una delle coordinate - y o x - (a) posizionerà i punti tipici approssimativamente su un line e (b) usa un potere "piacevole", di solito scelto da una "scala" di poteri che potrebbero essere interpretabili dall'analista.

Per ragioni che appariranno in seguito, ho esteso la famiglia Box-Cox consentendo un "offset" in modo che le trasformazioni siano nella forma

X(X+α)λ-1λ.

R(λ,α)λα

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)
}

Quando il metodo a tre punti viene applicato ai valori di pressione (y) nel set di dati del vapore di mercurio, otteniamo il pannello centrale dei grafici.

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)

parms(0,0)

Abbiamo raggiunto un punto analogo al contesto della domanda: per qualsiasi motivo (di solito per stabilizzare la varianza residua), abbiamo ri-espresso la variabile dipendente , ma scopriamo che la relazione con una variabile indipendente non è lineare. Quindi ora passiamo a ri-esprimere la variabile indipendente nel tentativo di linearizzare la relazione. Questo viene fatto allo stesso modo, semplicemente invertendo i ruoli di xey:

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parms(-1,253,75)-254-11


2732542732541/(1-X)

-2540


2
Ciao caro Whuber. Che risposta interessante, l'ho letta con piacere, grazie! (e ci giocherò anche un po 'per vedere come potrebbe adattarsi al problema con cui sto lavorando)
Tal Galili

3
n2data <- cbind(temperature, pressure)R
whuber

2
@landroni Poteri integrali e piccoli frazionari spesso sorgono in teorie fisiche, chimiche e biologiche, nonché attraverso considerazioni geometriche. (Ad esempio, quando una variabile è un volume, la sua radice cubica è una lunghezza - che è interpretabile - mentre, diciamo, la sua settima radice non ha una semplice interpretazione geometrica.) Altri poteri raramente hanno una tale interpretazione.
whuber

3
@Frank Esatto; è esplicitamente e sfacciatamente una tecnica esplorativa. Si noti che non pretende nemmeno di essere predittivo. L'esplorazione può solo suggerire modi per procedere. È possibile immaginare di allocare quattro df del budget di modellazione per stimare queste trasformazioni, e la stima potrebbe essere incorporata automaticamente nell'algoritmo di adattamento usando l'approccio di Tukey o in altro modo (ML è una possibilità ovvia).
whuber

5
YYλ

11

Dai un'occhiata a queste diapositive su "Diagnostica della regressione" di John Fox (disponibile da qui , completo di riferimenti), che discutono brevemente della questione della trasformazione della non linearità. Copre la "regola di rigonfiamento" di Tukey per la selezione delle trasformazioni di potenza (affrontata dalla risposta accettata), ma menziona anche le famiglie di trasformazioni Box-Cox e Yeo-Johnson. Vedere la sezione 3.6 delle diapositive. Per una versione più formale dello stesso autore si veda J. Fox, Applied Regression Analysis and Generalized Linear Models, Second Edition (Sage, 2008) .

Per quanto riguarda i pacchetti R reali che aiutano con questo, dai un'occhiata assolutamente al pacchetto auto , creato da J. Fox e S. Weisberg. Questo pacchetto accompagna J. Fox e S. Weisberg, An R Companion to Applied Regression, Seconda Edizione, (Sage, 2011) , un altro libro da leggere. Usando quel pacchetto puoi iniziare da basicPower()(semplici trasformazioni di potenza), bcPower()(trasformazioni Box-Cox) e yjPower()(trasformazioni Yeo-Johnson). C'è anche powerTransform () :

La funzione powerTransform viene utilizzata per stimare trasformazioni normalizzanti di una variabile casuale univariata o multivariata.

Controlla entrambi i libri per maggiori dettagli sulla teoria alla base di queste trasformazioni e sugli approcci computazionali.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.