Box Cox si trasforma per regressione


9

Sto cercando di adattare un modello lineare su alcuni dati con un solo predittore (diciamo (x, y)). I dati sono tali che per valori piccoli di x, i valori y si adattano perfettamente a una linea retta, tuttavia quando i valori x aumentano, i valori y diventano più volatili. Ecco un esempio di tali dati (codice R)

y = c(3.2,3.4,3.5,3.8,4.2,5.5,4.5,6.8,7.4,5.9)
x = seq(1,10,1)

Sono curioso di sapere se esiste una trasformazione di potenza (forse Box cox?) Che mi consente di ottenere una misura migliore per i dati rispetto al semplice adattamento lineare come mostrato di seguito.

fit = lm(y ~ x)

A quanto ho capito, lo scopo di trasformazioni come Box Cox non è quello di ottenere una migliore vestibilità, ma di soddisfare i presupposti del modello. Ciò potrebbe ottenere un adattamento migliore, un adattamento peggiore o un cambiamento non molto, ma sarà un adattamento che non viola le ipotesi.
Peter Flom

una trasformazione non lineare renderà non lineare una relazione lineare (anche se a volte è possibile trasformare anche x e risolverlo). Tuttavia, la trasformazione può anche raddrizzare una curva, e allo stesso tempo ridurre l'eteroschedasticità (sebbene non sia sempre possibile fare entrambe le cose con la stessa trasformazione). Per quei dati una trasformazione del log aiuta in qualche modo.
Glen_b

4
Utilizzando i due valori estremo e medio (quinto) di , il metodo mostrato in stats.stackexchange.com/questions/35711/… indica che un logaritmo (trasformazione di Box-Cox con il parametro 0) sarebbe appropriato per linearizzare la relazione. L'uso del primo, sesto e ultimo valore indica che il reciproco (parametro -1) sarebbe positivo. Ciò suggerisce che quasi tutti i parametri tra 0 e -1 potrebbero funzionare. L'intervallo non sorprende, dato il numero limitato di dati disponibili. Nessuna re-espressione monotonica stabilizzerà la variazione per questi dati. y
whuber

Risposte:


6

Il pacchetto MASS fornito con la tua R già installata ha la boxcox()funzione che puoi usare: Dopo aver letto i dati, fai:

library(MASS)
boxcox(y ~ x)

Quindi guarda il grafico che produce, che mostra graficamente un intervallo di confidenza al 95% per il parametro di trasformazione boxcox. Ma in realtà non hai abbastanza dati (n = 10) per farlo, l'intervallo di confidenza risultante va quasi da -2 a 2 !, con una stima della probabilità massima di circa 0 (una trasformazione del log, come detto prima). Se i tuoi dati reali hanno più osservazioni, dovresti provare questo.

Come altri hanno già detto, questa trasformazione sta davvero cercando di stabilizzare le varianze. Questo non è davvero ovvio dalla teoria, quello che fa è cercare di massimizzare una funzione di verosimiglianza basata sulla distribuzione normale, che assume una varianza costante. Si potrebbe pensare che massimizzare una probabilità su base normale proverebbe a normalizzare la distribuzione dei residui, ma in pratica il contributo principale alla massimizzazione della probabilità viene dalla stabilizzazione delle varianze. Questo forse non è così sorprendente, dato che la probabilità che massimizziamo si basa su una famiglia di distribuzione normale con varianza costante!

Una volta ho scritto una demo basata su slider in XLispStat, che lo ha dimostrato chiaramente!


3

Quando si ha una relazione lineare, ma varianze disuguali, in genere è necessario trasformare sia x che y per ottenere una relazione lineare con varianze uguali (o semplicemente utilizzare la regressione dei minimi quadrati ponderati sulle variabili non trasformate).

La procedura AVAS può essere utilizzata per suggerire possibili trasformazioni.


Dai un'occhiata ai dati: tende monotonicamente per da a , quindi oscilla sistematicamente molto per tra e . Ciò implica che nessuna re-espressione monotonica continua di riuscirà a stabilizzare le varianze. Il tuo suggerimento di minimi quadrati ponderati sembra promettente alla luce di questa limitazione, ma come si dovrebbero scegliere i pesi? x 1 5 x 5 10 yyx15x510y
whuber

Concordo con @whuber
broccoli il

1
Sono d'accordo con @whuber per questo specifico set di dati, ho appena ipotizzato che questi dati siano stati rapidamente elaborati per illustrare (e quindi mostrano la mancanza umana di casualità / realtà). La mia risposta è più il consiglio generale per il caso generale di varianze disuguali.
Greg Snow,

Dato che la varianza aumenta con x, un glmframework con una funzione di collegamento di Poisson la taglierebbe?
Roman Luštrik,

3
@ RomanLuštrik, una regressione di Poisson è qualcosa da considerare, ma la scelta dovrebbe essere fatta in base alla scienza, non ai dati. I dati di cui sopra hanno numeri interi per , quindi dovrebbe esserci un qualche tipo di peso o finestra di osservazione affinché i non numeri interi abbiano senso in una regressione di Poisson. Dovrebbe essere preso in considerazione solo se la variabile di risposta rappresenta i conteggi e la scienza alla base dei dati è coerente con la distribuzione di Poisson. y
Greg Snow,

1

Bene, in R potresti provare questo:

library(MASS)
boxcox(y~x)
plot(1/y^2~x) # since the profile likelihood has a maximum near 2

inserisci qui la descrizione dell'immagine

Ma dipende davvero da cosa intendi per "migliore adattamento ai dati"


-2

bene se tutti i tuoi dati per x non sono negativi, puoi usare la trasformazione box cox ... per stimare il valore ideale del parametro lambda della trasformazione puoi usare matlab ... http://www.mathworks.in/ help / finanza / boxcox.html


1
"Ideale" qui significa qualcosa di diverso da quello richiesto nella domanda. La domanda cerca di stabilizzare le variazioni, mentre la soluzione Matlab cerca di renderle il più vicino possibile alla distribuzione normale.
whuber
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.