Comment appliquer le terme de coefficient pour les facteurs et les termes interactifs dans une équation linéaire?

9

En utilisant R, j'ai ajusté un modèle linéaire pour une variable de réponse unique à partir d'un mélange de prédicteurs continus et discrets. C'est uber-basique, mais j'ai du mal à comprendre comment fonctionne un coefficient pour un facteur discret.

Concept: De toute évidence, le coefficient de la variable continue «x» est appliqué dans le formulaire, y = coefx(varx) + interceptmais comment cela fonctionne-t-il pour un facteur z si le facteur n'est pas numérique?y = coefx(varx) + coefz(factorz???) + intercept

Spécifique: J'ai ajusté un modèle en R comme lm(log(c) ~ log(d) + h + a + f + h:a)het fsont des facteurs discrets et non numériques. Les coefficients sont:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

Comment les utiliser pour créer l'équation prédictive:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

Ou je me trompe?

JE PENSE que ce concept est si le sujet tombe dans la catégorie h1et f2l'équation devient:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

Mais je ne sais vraiment pas comment le h:aterme interactif est analysé. Merci d'être gentil avec moi.

Arbres4laForêt
la source

Réponses:

14

Ce n'est pas un problème spécifique à R. R utilise un affichage conventionnel des coefficients.

Lorsque vous lisez une telle sortie de régression (dans un document, un manuel ou à partir d'un logiciel statistique), vous devez savoir quelles variables sont "continues" et lesquelles sont "catégoriques":

  • Les valeurs "continues" sont explicitement numériques et leurs valeurs numériques ont été utilisées telles quelles dans l'ajustement de régression.

  • Les variables "catégorielles" peuvent être de tout type, y compris celles qui sont numériques! Ce qui les rend catégoriques, c'est que le logiciel les a traités comme des «facteurs»: autrement dit, chaque valeur distincte trouvée est considérée comme un indicateur de quelque chose de distinct.

    La plupart des logiciels traitent les valeurs non numériques (telles que les chaînes) comme des facteurs. La plupart des logiciels peuvent également être convaincus de traiter les valeurs numériques comme des facteurs. Par exemple, un code de service postal (code postal aux États-Unis) ressemble à un numéro mais n'est en réalité qu'un code pour un ensemble de boîtes aux lettres; cela n'aurait aucun sens d'ajouter, de soustraire et de multiplier les codes postaux par d'autres nombres! (Cette flexibilité est la source d'une erreur courante: si vous ne faites pas attention ou si vous ne le voulez pas, votre logiciel peut traiter une variable que vous considérez comme catégorique comme continue, ou vice-versa. Soyez prudent!)

    Néanmoins, les variables catégorielles doivent être représentées d'une certaine manière sous forme de nombres afin d'appliquer les algorithmes d'ajustement. Il existe de nombreuses façons de les encoder . Les codes sont créés à l'aide de "variables factices". En savoir plus sur l'encodage des variables factices en effectuant une recherche sur ce site; les détails n'ont pas d'importance ici.

Dans la question , on nous dit que het fsont des valeurs catégoriques ( « discrètes »). Par défaut, log(d)et asont continus. C'est tout ce que nous devons savoir. Le modèle est

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

Les règles appliquées ici sont:

  • Le terme "interception", s'il apparaît, est une constante additive (première ligne).

  • Les variables continues sont multipliées par leurs coefficients, même dans les « interactions » comme h1:a, h2:aet les h3:atermes. (Cela répond à la question d'origine.)

  • Toute variable (ou facteur) catégorielle est incluse uniquement dans les cas où la valeur de ce facteur apparaît.

Par exemple, supposons que , , et . La valeur ajustée dans ce modèle estlog(d)=2h=h3a=1f=f2

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

Remarquez comment la plupart des coefficients du modèle n'apparaissent tout simplement pas dans le calcul, car ils hpeuvent prendre exactement l' une des trois valeurs , , et donc un seul des trois coefficients s'applique à et uniquement l'un des trois coefficients se multipliera dans l' interaction; de même, un seul coefficient s'applique dans un cas particulier.h 2 h 3 ( 0,870735 , - 0,447570 , 0,542033 ) ( - 0,085658 , - 0,034970 , - 0,040637 )h1h2h3(0.870735,0.447570,0.542033)h(0.085658,0.034970,0.040637)ah:af

whuber
la source
8

Ceci est juste un commentaire mais il ne rentrera pas en tant que tel dans les zones d'édition limitées que nous avons à notre disposition.

J'aime voir une équation de régression clairement écrite en texte clair, comme @whuber l'a fait dans sa réponse. Voici un moyen rapide pour cela dans R, avec le package Hmisc . (J'utiliserai également rms , mais cela n'a pas vraiment d'importance.) Fondamentalement, cela suppose seulement qu'un système de composition est disponible sur votre machine.LATEX

Simulons d'abord certaines données,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

puis adapter un modèle de régression,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

ce qui donne les résultats suivants:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

Ensuite, pour imprimer l'équation de régression correspondante, utilisez simplement la latexfonction générique , comme ceci:

latex(f)

Lors de la conversion du dvi en png, vous devriez obtenir quelque chose comme ça

entrez la description de l'image ici

OMI, cela a le mérite de montrer comment calculer les valeurs prédites en fonction des valeurs réelles ou choisies pour les prédicteurs numériques et catégoriques. Pour ces derniers, les niveaux de facteurs sont indiqués entre parenthèses près du coefficient correspondant.

chl
la source
1
+1 C'est une belle capacité. La syntaxe de termes comme , cependant, est potentiellement déroutante: il n'y a pas de relation évidente entre cette expression et la variable catégorielle , ni tout à fait évident que représente vraiment un indicateur que plutôt que pour la valeur numérique de ! (Ici, signifie vraiment "b" - la lettre - ce qui peut être un avertissement suffisant, mais lorsque les catégories sont codées par des nombres, tels que et , attention ...){ b } g 1 = b b b 0 1+0.2099013{b}g1{b}g1=bbb01
whuber
1
@whuber L'image ci-dessus a été recadrée mais il y a une sorte de note de bas de page rappelant que "{c} = 1 si le sujet est dans le groupe c, 0 sinon" (le choix de cpourrait être déroutant dans ce cas particulier, parce que je choisis deux lettres pour représentent les niveaux g1, mais en général, c'est assez intuitif - et c'est du pur tex afin que nous puissions encore éditer le fichier source par la suite). Ci - joint un autre résumé où j'ai modifié g1afin qu'il soit maintenant un facteur à quatre niveaux. Pourtant, avec des étiquettes 0/1 qui pourraient être plus déroutantes .
chl
5

Vous pouvez vérifier vos «contrastes» par défaut en options()recherchant:

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

Si vos contrastes non ordonnés sont définis comme contr.treatment(comme ils devraient l'être à moins que vous ne les ayez modifiés), le premier niveau de chacun de vos facteurs sera défini comme ligne de base. Vous ne recevrez que des estimations pour les coefficients devant les variables fictives créées pour les autres niveaux du facteur. En effet, ces coefficients seront "à quel point en moyenne la variable de réponse est-elle différente à ce niveau du facteur, par rapport au niveau de base du facteur, ayant contrôlé tout le reste dans le modèle".

Je suppose que d'après votre sortie, il y a un h0et f0qui sont les niveaux de base pour h et f (sauf si vous avez une option non par défaut pour les contrastes, auquel cas il y a plusieurs possibilités; essayez ?contr.treatmentpour de l'aide).

C'est similaire avec l'interaction. Si mon paragraphe précédent est correct, l'estimation donnée pour asera vraiment la pente pour aquand h=h0. Les estimations données dans le résumé qui s'appliquent aux interactions sont la variation de la pente pour différents niveaux de h.

Donc, dans votre exemple où h = h1 et f = f2, essayez:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

Oh, et vous pouvez aussi predict()faire beaucoup de choses utiles ... si vous voulez réellement prédire quelque chose (plutôt que d'écrire l'équation d'un rapport). Essayez ?predict.lmde voir ce que predict()fait un objet créé par lm.

Peter Ellis
la source
+1 (en fait, j'ai voté cela il y a un mois et il se trouve que je suis en train de le relire maintenant) en tout cas, il me semble que vous recommandez de vérifier le type de contraste par options(). Vous devrez faire défiler beaucoup d'ordures pour trouver ce dont vous avez besoin. Vous pourriez essayer options()$contrasts, qui ne produira que ce que vous voulez.
gung - Rétablir Monica
bonne suggestion, mon cerveau devait être endormi.
Peter Ellis
Tu sais, je réponds souvent aux questions de CV juste avant d'aller me coucher ...
gung - Réinstalle Monica