Come eseguire una trasformazione box-cox in r (con esempi)


Una trasformazione box-cox è un metodo comunemente utilizzato per trasformare un set di dati non distribuito normalmente in un set distribuito più normalmente .

L’idea alla base di questo metodo è trovare un valore per λ tale che i dati trasformati siano il più vicino possibile alla distribuzione normale, utilizzando la seguente formula:

  • y(λ) = (y λ – 1) / λ se y ≠ 0
  • y(λ) = log(y) se y = 0

Possiamo eseguire una trasformazione box-cox in R utilizzando la funzione boxcox() dalla libreria MASS() . L’esempio seguente mostra come utilizzare questa funzione nella pratica.

Fare riferimento a questo articolo dell’Università del Connecticut per un bel riassunto dello sviluppo della trasformazione Box-Cox.

Esempio: trasformazione di Box-Cox in R

Il codice seguente mostra come adattare un modello di regressione lineare a un set di dati, quindi utilizzare la funzione boxcox() per trovare un lambda ottimale per trasformare la variabile di risposta e adattare un nuovo modello.

 library (MASS)

#create data
y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8)
x=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8)

#fit linear regression model
model <- lm(y~x)

#find optimal lambda for Box-Cox transformation 
bc <- boxcox(y ~ x)
(lambda <- bc$x[which.max(bc$y)])

[1] -0.4242424

#fit new linear regression model using the Box-Cox transformation
new_model <- lm(((y^lambda-1)/lambda) ~ x)

Il lambda ottimale si è rivelato essere -0.4242424 . Pertanto, il nuovo modello di regressione ha sostituito la variabile di risposta originale y con la variabile y = (y -0,4242424 – 1) / -0,4242424.

Il codice seguente mostra come creare due grafici QQ in R per visualizzare le differenze nei residui tra i due modelli di regressione:

 #define plotting area
op <- par(pty = "s", mfrow = c(1, 2))

#QQ plot for original model
qqnorm(model$residuals)
qqline(model$residuals)

#QQ plot for Box-Cox transformed model
qqnorm(new_model$residuals)
qqline(new_model$residuals)

#display both QQ plots
by(op)

Terreno QQ trasformato da Box-Cox in R

Generalmente, se i punti dati si trovano lungo una linea diagonale retta in un grafico QQ, il set di dati probabilmente segue una distribuzione normale.

Si noti come il modello trasformato di box-cox produce un grafico QQ con una linea molto più retta rispetto al modello di regressione originale.

Ciò indica che i residui del modello trasformato di box-cox sono distribuiti molto più normalmente, il che soddisfa uno dei presupposti della regressione lineare .

Risorse addizionali

Come trasformare i dati in R (log, radice quadrata, radice cubica)
Come creare e interpretare un grafico QQ in R
Come eseguire un test di Shapiro-Wilk per la normalità in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *