Box Cox se transforme pour la régression

9

J'essaie d'adapter un modèle linéaire sur certaines données avec un seul prédicteur (disons (x, y)). Les données sont telles que pour les petites valeurs de x, les valeurs y donnent un ajustement serré à une ligne droite, mais à mesure que les valeurs x augmentent, les valeurs y deviennent plus volatiles. Voici un exemple de telles données (code 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)

Je suis curieux de savoir s'il existe une transformation de puissance (Box cox peut-être?) Qui me permet d'obtenir un meilleur ajustement pour les données que de simplement effectuer un ajustement linéaire comme indiqué ci-dessous.

fit = lm(y ~ x)
brocoli
la source
Si je comprends bien, le but de transformations comme Box Cox n'est pas d'obtenir un meilleur ajustement, mais de répondre aux hypothèses du modèle. Cela pourrait obtenir un meilleur ajustement, un ajustement pire ou pas beaucoup de changement, mais ce sera un ajustement qui ne viole pas les hypothèses.
Peter Flom
une transformation non linéaire rendra une relation linéaire non linéaire (bien que parfois vous puissiez également transformer x et corriger cela). Cependant, la transformation peut également redresser une courbe, et en même temps réduire l'hétéroskédasticité (bien qu'il ne soit pas toujours possible de faire les deux avec la même transformation). Pour ces données, une transformation de journal aide quelque peu.
Glen_b -Reinstate Monica
4
En utilisant les deux valeurs extrêmes et moyennes (cinquième) de , la méthode indiquée sur stats.stackexchange.com/questions/35711/… indique qu'un logarithme (transformation de Box-Cox avec le paramètre 0) serait approprié pour linéariser la relation. L'utilisation des première, sixième et dernière valeurs indique que la réciproque (paramètre -1) serait bonne. Cela suggère que presque tous les paramètres entre 0 et -1 pourraient fonctionner. La fourchette n'est pas surprenante étant donné le peu de données disponibles. Aucune ré-expression monotone ne stabilisera la variation de ces données. y
whuber

Réponses:

6

Le package MASS fourni avec votre R déjà installé a la boxcox()fonction que vous pouvez utiliser: Après avoir lu les données, faites:

library(MASS)
boxcox(y ~ x)

Regardez ensuite le graphique que cela produit, qui montre graphiquement un intervalle de confiance à 95% pour le paramètre de transformation boxcox. Mais vous n'avez pas vraiment assez de données (n = 10) pour cela, l'intervalle de confiance qui en résulte passe presque de -2 à 2 !, avec une estimation de vraisemblance maximale d'environ 0 (une transformation logarithmique, comme dit précédemment). Si vos données réelles contiennent plus d'observations, vous devriez essayer ceci.

Comme d'autres l'ont dit, cette transformation tente vraiment de stabiliser les variances. Ce n'est pas vraiment évident d'après la théorie, ce qu'elle fait, c'est d'essayer de maximiser une fonction de vraisemblance basée sur une distribution normale, qui suppose une variance constante. On pourrait penser que maximiser une vraisemblance basée sur la normale essayerait de normaliser la distribution des résidus, mais dans la pratique, la principale contribution à la maximisation de la vraisemblance vient de la stabilisation des variances. Ce n'est peut-être pas si surprenant, étant donné que la probabilité que nous maximisons est basée sur une famille de distribution normale à variance constante!

J'ai écrit une fois une démonstration basée sur un curseur dans XLispStat, qui l'a clairement démontré!

kjetil b halvorsen
la source
3

Lorsque vous avez une relation linéaire, mais des variances inégales, vous devez généralement transformer à la fois x et y pour obtenir une relation linéaire avec des variances égales (ou simplement utiliser une régression des moindres carrés pondérés sur les variables non transformées).

La procédure AVAS peut être utilisée pour suggérer des transformations possibles.

Greg Snow
la source
yX15X5dixy
D'accord avec @whuber
brocoli
1
Je suis d'accord avec @whuber pour cet ensemble de données spécifique, j'ai simplement supposé que ces données ont été rapidement constituées pour illustrer (et montrent donc un manque humain de caractère aléatoire / réel). Ma réponse est plutôt le conseil général pour le cas général des variances inégales.
Greg Snow
Étant donné que la variance augmente avec x, un glmcadre avec une fonction de lien de Poisson la couperait-il?
Roman Luštrik
3
y
1

Eh bien, dans R, vous pouvez essayer ceci:

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

entrez la description de l'image ici

Mais cela dépend vraiment de ce que vous entendez par «meilleur ajustement aux données»

Glen_b -Reinstate Monica
la source
-2

eh bien si toutes vos données pour x ne sont pas négatives alors vous pouvez utiliser la transformation cox box ... pour estimer la valeur idéale du paramètre lambda de la transformation vous pouvez utiliser matlab ... http://www.mathworks.in/ aide / finance / boxcox.html

Nuzhi
la source
1
«Idéal» signifie ici autre chose que ce qui est demandé dans la question. La question cherche à stabiliser les variances, alors que la solution Matlab cherche à les rendre aussi proches que possible de la distribution normale.
whuber