Box Cox Transforms para regressão

9

Estou tentando ajustar um modelo linear em alguns dados com apenas um preditor (digamos (x, y)). Os dados são tais que, para valores pequenos de x, os valores de y ajustam-se firmemente a uma linha reta; no entanto, à medida que os valores de x aumentam, os valores de y se tornam mais voláteis. Aqui está um exemplo desses dados (código 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)

Estou curioso para saber se existe alguma transformação de energia (caixa cox, talvez?) Que me permita obter um melhor ajuste para os dados do que simplesmente fazer um ajuste linear, como mostrado abaixo.

fit = lm(y ~ x)
brócolis
fonte
Pelo que entendi, o objetivo de transformações como Box Cox não é obter um melhor ajuste, mas atender às suposições do modelo. Isso pode ter um ajuste melhor, um ajuste pior ou não muito, mas será um ajuste que não viola as suposições.
Peter Flom - Restabelece Monica
uma transformação não linear tornará um relacionamento linear não linear (embora às vezes você possa transformar x também e consertar isso). No entanto, a transformação também pode endireitar uma curva e, ao mesmo tempo, reduzir a heterocedasticidade (embora nem sempre seja possível fazer as duas coisas com a mesma transformação). Para esses dados, uma transformação de log ajuda um pouco.
Glen_b -Reinstala Monica
4
Usando os dois valores extremos e médios (quinto) de , o método mostrado em stats.stackexchange.com/questions/35711/… indica que um logaritmo (transformação Box-Cox com parâmetro 0) seria apropriado para linearizar o relacionamento. O uso dos primeiro, sexto e último valores indica que o recíproco (parâmetro -1) seria bom. Isso sugere que quase qualquer parâmetro entre 0 e -1 pode funcionar. O intervalo não é surpresa, dado o número de dados que há. Nenhuma reexpressão monotônica estabilizará a variação para esses dados. y
whuber

Respostas:

6

O pacote MASS que já vem com o seu R instalado, tem a boxcox()função que você pode usar: Após ler os dados, faça:

library(MASS)
boxcox(y ~ x)

Em seguida, observe o gráfico que produz, que mostra graficamente um intervalo de confiança de 95% para o parâmetro de transformação boxcox. Mas você realmente não possui dados suficientes (n = 10) para fazer isso, o intervalo de confiança resultante varia quase de -2 a 2 !, com uma estimativa de probabilidade máxima de aproximadamente 0 (uma transformação de log, como dito anteriormente). Se seus dados reais tiverem mais observações, tente isso.

Como outros já disseram, essa transformação está realmente tentando estabilizar variações. Isso não é realmente óbvio da teoria, o que ela faz é tentar maximizar uma função de probabilidade baseada na distribuição normal, que assume variação constante. Pode-se pensar que maximizar uma probabilidade baseada em normal tentaria normalizar a distribuição dos resíduos, mas, na prática, a principal contribuição para maximizar a probabilidade advém da estabilização das variações. Talvez isso não seja tão surpreendente, dado que a probabilidade que maximizamos é baseada em uma família de distribuição normal de variação constante!

Certa vez, escrevi uma demonstração baseada em slider no XLispStat, que demonstrou isso claramente!

kjetil b halvorsen
fonte
3

Quando você tem um relacionamento linear, mas variações desiguais, geralmente é necessário transformar xey para obter um relacionamento linear com variações iguais (ou apenas usar a regressão ponderada de mínimos quadrados nas variáveis ​​não transformadas).

O procedimento AVAS pode ser usado para sugerir possíveis transformações.

Greg Snow
fonte
Dê uma olhada nos dados: tende monotonicamente para de a e oscila sistematicamente muito para entre e . Isso implica que nenhuma re-expressão monotônica contínua de conseguirá estabilizar as variações. Sua sugestão de mínimos quadrados ponderados parece promissora à luz dessa limitação, mas como escolher os pesos? x 1 5 xyx15x10 y510y
whuber
Concordo com @whuber
broccoli
11
Concordo com o @whuber para este conjunto de dados específico, apenas assumi que esses dados foram rapidamente criados para ilustrar (e, portanto, mostram falta humana de aleatoriedade / realidade). Minha resposta é mais o conselho geral para o caso geral de variações desiguais.
Greg Neve
Dado que a variação aumenta com x, uma glmestrutura com uma função de link de Poisson a cortaria?
Roman Luštrik
3
@ RomanLuštrik, uma regressão de Poisson é algo a considerar, mas a escolha deve ser feita com base na ciência, não nos dados. Os dados acima têm números não inteiros para , portanto, seria necessário algum tipo de peso ou janela de observação para que os não inteiros fizessem sentido em uma regressão de Poisson. Só deve ser considerado se a variável resposta representar contagens e a ciência por trás dos dados for consistente com a distribuição de Poisson. y
Greg Neve
1

Bem, em R você pode tentar o seguinte:

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

insira a descrição da imagem aqui

Mas isso realmente depende do que você quer dizer com 'melhor ajuste aos dados'

Glen_b -Reinstate Monica
fonte
-2

bem, se todos os seus dados para x não são negativos, você pode usar a transformação cox da caixa ... para estimar o valor ideal do parâmetro lambda da transformação, você pode usar o matlab ... http://www.mathworks.in/ ajuda / finanças / boxcox.html

Nuzhi
fonte
11
"Ideal" aqui significa algo diferente do solicitado na pergunta. A questão procura estabilizar as variações, enquanto a solução Matlab procura torná-las o mais próximo possível da distribuição normal.
whuber