Como aplicar o termo coeficiente de fatores e termos interativos em uma equação linear?

9

Usando R, ajustei um modelo linear para uma variável de resposta única a partir de uma mistura de preditores contínuos e discretos. Isso é super básico, mas estou tendo problemas para entender como funciona um coeficiente para um fator discreto.

Conceito: Obviamente, o coeficiente da variável contínua 'x' é aplicado na forma, y = coefx(varx) + interceptmas como isso funciona para um fator z se o fator não é numérico?y = coefx(varx) + coefz(factorz???) + intercept

Específico: ajustei um modelo em R como lm(log(c) ~ log(d) + h + a + f + h:a)onde he fsão fatores discretos e não numéricos. Os coeficientes são:

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

Como os uso para criar a equação preditiva:

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

Ou estou fazendo errado?

Eu acho que esse conceito é se o assunto se enquadra na categoria h1e f2, a equação se torna:

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

Mas, na verdade, não estou claro como o h:atermo interativo é analisado. Obrigado por ir com calma.

Trees4theForest
fonte

Respostas:

14

Este não é um problema específico de R. R usa uma exibição convencional de coeficientes.

Ao ler essa saída de regressão (em um artigo, livro ou software estatístico), você precisa saber quais variáveis ​​são "contínuas" e quais são "categóricas":

  • Os "contínuos" são explicitamente numéricos e seus valores numéricos foram usados ​​como estão no ajuste de regressão.

  • As variáveis ​​"categóricas" podem ser de qualquer tipo, incluindo aquelas que são numéricas! O que os torna categóricos é que o software os tratou como "fatores": ou seja, cada valor distinto encontrado é considerado um indicador de algo distinto.

    A maioria dos softwares tratará valores não numéricos (como seqüências de caracteres) como fatores. A maioria dos softwares pode ser persuadida a tratar valores numéricos também como fatores. Por exemplo, um código de serviço postal (CEP nos EUA) se parece com um número, mas na verdade é apenas um código para um conjunto de caixas de correio; não faria sentido adicionar, subtrair e multiplicar códigos postais por outros números! (Essa flexibilidade é a fonte de um erro comum: se você não for cuidadoso ou inconsciente, seu software poderá tratar uma variável que você considera categórica como contínua ou vice-versa. Cuidado!)

    No entanto, variáveis ​​categóricas precisam ser representadas de alguma forma como números, a fim de aplicar os algoritmos de ajuste. Existem muitas maneiras de codificá- las. Os códigos são criados usando "variáveis ​​fictícias". Saiba mais sobre a codificação de variáveis ​​fictícias pesquisando neste site; os detalhes não importam aqui.

Na pergunta, somos informados disso he fsão valores categóricos ("discretos"). Por padrão, log(d)e asão contínuos. É tudo o que precisamos saber. O modelo é

y=-0.679695+1,791294 registro(d)+0.870735 E se h=h1 1-0.447570 E se h=h2+0,542033 E se h=h3+0,037362 uma-0,588362 E se f=f1 1+0.816825 E se f=f2+0.534440 E se f=f3-0,085658 uma E se h=h1 1-0,034970 uma E se h=h2-0,040637 uma E se h=h3

As regras aplicadas aqui são:

  • O termo "interceptação", se aparecer, é uma constante aditiva (primeira linha).

  • As variáveis contínuas são multiplicados por seus coeficientes, mesmo em "interações" como o h1:a, h2:ae h3:atermos. (Isso responde à pergunta original.)

  • Qualquer variável categórica (ou fator) é incluída apenas nos casos em que o valor desse fator aparece.

Por exemplo, suponha que , , , e . O valor ajustado neste modelo éregistro(d)=2h=h3uma=-1 1f=f2

y^=-0.6797+1,7913×(2)+0,5420+0,0374×(-1 1)+0.8168-0,0406×(-1 1).

Observe como a maioria dos coeficientes do modelo simplesmente não aparece no cálculo, pois hpode assumir exatamente um dos três valores , , e, portanto, apenas um dos três coeficientes se aplica a e apenas um dos três coeficientes se multiplicará na interação; Da mesma forma, apenas um coeficiente se aplica a qualquer caso particular.h 2 h 3 ( 0.870735h1 1h2h3( - 0,085658 , - 0,034970 , - 0,040637 )(0.870735,-0.447570,0,542033)h(-0,085658,-0,034970,-0,040637)ah:af

whuber
fonte
8

Este é apenas um comentário, mas não se encaixa como tal nas caixas de edição limitadas que temos à nossa disposição.

Eu gosto de ver uma equação de regressão claramente escrita em texto simples, como @whuber fez em sua resposta. Aqui está uma maneira rápida de fazer isso no R, com o pacote Hmisc . (Eu também usarei rms , mas isso realmente não importa.) Basicamente, apenas supõe que um sistema de composição esteja disponível em sua máquina.euUMATEX

Vamos simular alguns dados primeiro,

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)

então ajuste um modelo de regressão,

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

que produz os seguintes resultados:

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  

Em seguida, para imprimir a equação de regressão correspondente, basta usar a latexfunção genérica , assim:

latex(f)

Após a conversão do dvi para png, você deve obter algo parecido

insira a descrição da imagem aqui

Na IMO, isso tem o mérito de mostrar como calcular valores previstos, dependendo dos valores reais ou escolhidos para os preditores numéricos e categóricos. Para este último, os níveis dos fatores são indicados entre parênteses, próximo ao coeficiente correspondente.

chl
fonte
11
+1 Essa é uma boa capacidade. A sintaxe de termos como , no entanto, é potencialmente confusa: não há relação evidente entre essa expressão e a variável categórica , nem é totalmente evidente que realmente representa um indicador de que em vez do valor numérico de ! (Aqui, realmente significa "b" - a letra - que pode ser aviso suficiente, mas quando as categorias são codificadas por números, como e , cuidado ...){ b } g 1 = b b b 0 1+0,2099013{b}g1{b}g1 1=bbb0 01 1
whuber
11
@whuber A imagem acima foi cortada, mas há uma nota de rodapé lembrando que "{c} = 1 se o assunto estiver no grupo c, 0 caso contrário" (a escolha de cpode ser confusa nesse caso em particular, porque escolho duas letras para representam os níveis g1, mas geralmente é bastante intuitivo - e isso é puro tex, para que possamos editar o arquivo de origem posteriormente). Em anexo está outro resumo em que alterei, g1para que agora seja um fator de quatro níveis. No entanto, com rótulos 0/1 que podem ser mais confusos .
chl
5

Você pode verificar se seus "contrastes" são o padrão options()e procurando:

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

Se seus contrastes não ordenados estiverem definidos como contr.treatment(como deveriam ser, a menos que você os tenha alterado), o primeiro nível de cada um de seus fatores será definido como linha de base. Você receberá apenas estimativas para os coeficientes na frente das variáveis ​​fictícias criadas para outros níveis do fator. De fato, esses coeficientes serão "quão diferentes, em média, é a variável de resposta nesse nível do fator, em comparação com o nível de linha de base do fator, tendo controlado para tudo o mais no modelo".

Suponho que, a partir da sua saída, exista um h0e f0quais são os níveis de linha de base para he ef (a menos que você tenha uma opção não padrão para contrastes; nesse caso, existem várias possibilidades; tente ?contr.treatmentalguma ajuda).

É semelhante à interação. Se meu parágrafo anterior estiver correto, a estimativa fornecida aserá realmente a inclinação de aquando h=h0. As estimativas fornecidas no resumo que se aplicam às interações são o quanto essa inclinação muda para diferentes níveis de h.

Portanto, no seu exemplo em que h = h1 ef = f2, tente:

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

Ah, e você também pode predict()fazer muitas coisas úteis ... se realmente deseja prever algo (em vez de escrever a equação para um relatório). Tente ?predict.lmver o que predict()faz com um objeto criado por lm.

Peter Ellis
fonte
+1 (na verdade, votei com um voto positivo há um mês atrás e, por acaso, voltei a lê-lo agora) de qualquer forma, me ocorre que você recomenda verificar o tipo de contraste por options(). Você precisará rolar muito lixo para encontrar o que precisa. Você pode tentar options()$contrasts, o que produzirá apenas o que você deseja.
gung - Restabelece Monica
boa sugestão, meu cérebro deve estar dormindo.
Peter Ellis
Sabe, muitas vezes eu respondo perguntas sobre CV bem antes de ir para a cama ...
gung - Reinstate Monica