Transformer des variables pour une régression multiple dans R

26

J'essaie d'effectuer une régression multiple dans R. Cependant, ma variable dépendante a le tracé suivant:

DV

Voici une matrice de nuage de points avec toutes mes variables ( WARest la variable dépendante):

SPLOM

Je sais que je dois effectuer une transformation sur cette variable (et éventuellement les variables indépendantes?) Mais je ne suis pas sûr de la transformation exacte requise. Quelqu'un peut me diriger dans la bonne direction? Je suis heureux de fournir des informations supplémentaires sur la relation entre les variables indépendantes et dépendantes.

Les graphiques de diagnostic de ma régression se présentent comme suit:

Tracés de diagnostic

MODIFIER

Après avoir transformé les variables dépendantes et indépendantes à l'aide de transformations Yeo-Johnson, les tracés de diagnostic ressemblent à ceci:

Après avoir transformé

Si j'utilise un GLM avec un lien de journal, les graphiques de diagnostic sont:

GLM avec log-link

zgall1
la source
3
Salut @ zglaa1 et bienvenue. Pourquoi pensez-vous que vous devez transformer les variables? La première étape consisterait à ajuster la régression avec les varibales d'origine, puis à examiner l'ajustement (résidus, etc.). Les résidus doivent être distribués approximativement normalement, pas les variables. Peut-être que vous trouverez ce post intéressant.
COOLSerdash
Merci pour le lien et la suggestion. J'ai exécuté ma régression et je sais que les variables doivent être transformées en fonction du graphique suivant: i.imgur.com/rbmu14M.jpg Je peux voir la non-impartialité et le manque de variabilité constante dans les résidus. De plus, ils ne sont pas normaux.
zgall1
@COOLSerdash J'ai jeté un œil au lien. J'ai une formation de base en statistiques, donc je comprends la discussion. Cependant, mon problème est que j'ai une expérience limitée de l'application des techniques que j'ai apprises, donc j'ai du mal à comprendre exactement ce que je dois faire avec mes données (soit dans Excel ou R) pour effectuer réellement les transformations nécessaires.
zgall1
Merci pour le graphique. Vous avez absolument raison de dire que cet ajustement n'est pas optimal. Pourriez-vous s'il vous plaît produire une matrice de nuage de points avec les DV et IV dans la régression? Cela peut être fait Ravec la commande pairs(my.data, lower.panel = panel.smooth)my.dataserait votre jeu de données.
COOLSerdash
2
Les transformations de Box-Cox constituent une approche générale de la transformation . Ce que vous pourriez faire est le suivant: 1. Ajustez votre modèle de régression en lmutilisant les variables non transformées. 2. Utilisez la fonction boxcox(my.lm.model)du MASSpackage pour estimer . La commande produit également un graphique que vous pouvez télécharger pour notre commodité. λ
COOLSerdash

Réponses:

30

Le livre de John Fox Un compagnon R de la régression appliquée est une excellente ressource sur la modélisation de régression appliquée avec R. Le package carque j'utilise tout au long de cette réponse est le package d'accompagnement. Le livre a également comme site Web des chapitres supplémentaires.


Transformer la réponse (aka variable dépendante, résultat)

RlmboxCoxcarλfamily="yjPower"

boxCox(my.regression.model, family="yjPower", plotit = TRUE)

Cela produit un tracé comme le suivant:

Box-Cox lambdaplot

λλ

Pour transformer votre variable dépendante maintenant, utilisez la fonction yjPowerdu carpackage:

depvar.transformed <- yjPower(my.dependent.variable, lambda)

lambdaλboxCox

Important: Plutôt que de simplement transformer en journal la variable dépendante, vous devriez envisager d'adapter un GLM avec un lien de journal. Voici quelques références qui fournissent des informations supplémentaires: première , deuxième , troisième . Pour ce faire R, utilisez glm:

glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))

yest votre variable dépendante et x1, x2etc. sont vos variables indépendantes.


Transformations des prédicteurs

Les transformations de prédicteurs strictement positifs peuvent être estimées par maximum de vraisemblance après la transformation de la variable dépendante. Pour ce faire, utilisez la fonction boxTidwelldu carpackage (pour le papier d'origine voir ici ). Utilisez - le comme ça: boxTidwell(y~x1+x2, other.x=~x3+x4). L'important ici est que cette option other.xindique les termes de la régression qui ne doivent pas être transformés. Ce serait toutes vos variables catégorielles. La fonction produit une sortie de la forme suivante:

boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)

          Score Statistic   p-value MLE of lambda
income          -4.482406 0.0000074    -0.3476283
education        0.216991 0.8282154     1.2538274

incomeλincomele revenunew=1/le revenuol

Un autre article très intéressant sur le site sur la transformation des variables indépendantes est celui-ci .


Inconvénients des transformations

1/yλλ


Modélisation de relations non linéaires

Les polynômes fractionnaires et les splines sont deux méthodes assez flexibles pour ajuster les relations non linéaires . Ces trois articles offrent une très bonne introduction aux deux méthodes: première , deuxième et troisième . Il y a aussi un livre entier sur les polynômes fractionnaires et R. Le R packagemfp implémente des polynômes fractionnaires multivariables. Cette présentation pourrait être informative concernant les polynômes fractionnaires. Pour adapter les splines, vous pouvez utiliser la fonction gam(modèles additifs généralisés, voir ici pour une excellente introduction avec R) du packagemgcv ou les fonctionsns(splines cubiques naturelles) et bs(splines B cubiques) du package splines(voir ici un exemple d'utilisation de ces fonctions). À l'aide de, gamvous pouvez spécifier les prédicteurs que vous souhaitez ajuster à l'aide de splines à l'aide de la s()fonction:

my.gam <- gam(y~s(x1) + x2, family=gaussian())

ici, x1serait ajusté en utilisant une spline et x2linéairement comme dans une régression linéaire normale. À l'intérieur, gamvous pouvez spécifier la famille de distribution et la fonction de liaison comme dans glm. Donc, pour adapter un modèle avec une fonction de liaison de journal, vous pouvez spécifier l'option family=gaussian(link="log")dans gamcomme dans glm.

Jetez un oeil à cet article sur le site.

COOLSerdash
la source
1
Bonne explication. Je ne sais pas que Box-Cox explicite est vraiment la méthode la plus courante pour choisir une transformation. Si vous comptez les gens qui choisissent simplement les journaux de toute façon, ma propre supposition est que c'est une méthode minoritaire. Ce point difficile n'affecte rien d'autre, naturellement.
Nick Cox
@NickCox Merci (+1 pour votre réponse, btw). L'affirmation que Box-Cox est la méthode la plus courante vient du livre de John Fox. Je l'ai pris au pied de la lettre car je n'ai pas assez d'expérience pour juger la déclaration. Je vais supprimer la déclaration.
COOLSerdash
Merci beaucoup pour l'explication détaillée. Je vais essayer de l'appliquer à mes données maintenant.
zgall1
@COOLSerdash En utilisant votre procédure détaillée, j'ai appliqué la transformation Box Cox à mes variables dépendantes puis indépendantes et j'ai le tracé suivant de mes variables de diagnostic - i.imgur.com/eO01djl.jpg De toute évidence, il y a une amélioration mais il semble toujours être des problèmes avec une variabilité et une impartialité constantes et il y a certainement un problème de normalité. Où puis-je partir d'ici?
zgall1
1
@ zgall1 Merci pour vos commentaires, je l'apprécie. Hm, oui, les transformations ne semblent pas avoir beaucoup aidé :). À ce stade, j'essaierais probablement d'utiliser des splines pour les prédicteurs en utilisant des modèles additifs généralisés (GAM) avec le mgcvpackage et gam. Si cela n'aide pas, je suis au bout de ma tête, j'ai peur. Il y a des gens ici beaucoup plus expérimentés que moi et ils peuvent peut-être vous donner des conseils supplémentaires. Je ne connais pas non plus le baseball. Il existe peut-être un modèle plus logique qui a du sens avec ces données.
COOLSerdash
8

Vous devriez nous en dire plus sur la nature de votre variable de réponse (résultat, dépendante). Depuis votre premier graphique, il est fortement biaisé positivement avec de nombreuses valeurs proches de zéro et certaines négatives. De là, il est possible, mais pas inévitable, que la transformation vous aide, mais la question la plus importante est de savoir si la transformation rendrait vos données plus proches d'une relation linéaire.

Notez que les valeurs négatives pour la réponse excluent la transformation logarithmique directe, mais pas le log (réponse + constante), et pas un modèle linéaire généralisé avec lien logarithmique.

Il existe de nombreuses réponses sur ce site discutant le journal (réponse + constante), qui divise les statistiques: certaines personnes ne l'aiment pas comme étant ad hoc et difficile à travailler, tandis que d'autres le considèrent comme un appareil légitime.

Un GLM avec un lien de journal est toujours possible.

Alternativement, il se peut que votre modèle reflète une sorte de processus mixte, auquel cas un modèle personnalisé reflétant de plus près le processus de génération de données serait une bonne idée.

(PLUS TARD)

L'OP a une variable WAR dépendante avec des valeurs allant d'environ 100 à -2. Pour surmonter les problèmes de prise de logarithmes de valeurs nulles ou négatives, OP propose un fondu de zéros et de négatifs à 0,000001. Maintenant, sur une échelle logarithmique (base 10), ces valeurs vont d'environ 2 (environ 100) à -6 (0,000001). La minorité de points truqués à l'échelle logarithmique est maintenant une minorité de valeurs aberrantes massives. Tracez log_10 (Fudged WAR) contre quoi que ce soit d'autre pour voir cela.

Nick Cox
la source
Comme vous pouvez le constater à partir du nuage de points affiché ci-dessus, j'utilise un ensemble de données statistiques sur le baseball. La variable indépendante, WAR, est essentiellement une mesure cumulative de la valeur apportée par un joueur au cours de sa carrière au niveau des ligues majeures. Les variables indépendantes, AdjSLG, SOPct et BBPct sont des statistiques des ligues mineures qui sont communément supposées prédire le succès au niveau des ligues majeures. La variable Âge est l'âge auquel le joueur a produit les statistiques des ligues mineures. Les variables fictives sont utilisées pour indiquer le niveau de ligue mineure auquel les statistiques ont été produites.
zgall1
En ce qui concerne le problème des variables indépendantes négatives (WAR), pour des raisons un peu complexes, il est raisonnable de les recoder comme des zéros si cela facilite le processus de transformation. Dans le cadre de cet ensemble de données, il s'agit d'une procédure justifiable. Si vous souhaitez que j'entre dans les détails (avertissement - jargon de baseball requis), je suis heureux de le faire.
zgall1
1
Il semble que WAR soit votre variable dépendante . Vous apportez la preuve de mon affirmation, contestée ailleurs sur ce site, que les deux termes sont souvent confondus. Mon conseil n'est pas de recoder des valeurs négatives en zéros (maltraite les données) mais d'utiliser un GLM avec un lien de journal. S'il vous plaît, présumez que vous ne portez aucun intérêt ou aucune connaissance des minuties du baseball.
Nick Cox
Vous avez raison de dire que WAR est ma variable dépendante. Je vais examiner un GLM avec un lien de journal. Merci pour le conseil.
zgall1
1
Il pourrait être utile de savoir comment est calculé le WAR de carrière (c'est-à-dire comprendre le processus de génération de données).
Affine