Vou dar meus exemplos com chamadas R. Primeiro, um exemplo simples de regressão linear com uma variável dependente 'vida útil' e duas variáveis explicativas contínuas.
data.frame(height=runif(4000,160,200))->human.life
human.life$weight=runif(4000,50,120)
human.life$lifespan=sample(45:90,4000,replace=TRUE)
summary(lm(lifespan~1+height+weight,data=human.life))
Call:
lm(formula = lifespan ~ 1 + height + weight, data = human.life)
Residuals:
Min 1Q Median 3Q Max
-23.0257 -11.9124 -0.0565 11.3755 23.8591
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 63.635709 3.486426 18.252 <2e-16 ***
height 0.007485 0.018665 0.401 0.6884
weight 0.024544 0.010428 2.354 0.0186 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.41 on 3997 degrees of freedom
Multiple R-squared: 0.001425, Adjusted R-squared: 0.0009257
F-statistic: 2.853 on 2 and 3997 DF, p-value: 0.05781
Para encontrar a estimativa de 'vida útil' quando o valor de 'peso' é 1, adiciono (Interceptação) + altura = 63,64319
Agora, e se eu tiver um quadro de dados semelhante, mas um em que uma das variáveis explicativas seja categórica?
data.frame(animal=rep(c("dog","fox","pig","wolf"),1000))->animal.life
animal.life$weight=runif(4000,8,50)
animal.life$lifespan=sample(1:10,replace=TRUE)
summary(lm(lifespan~1+animal+weight,data=animal.life))
Call:
lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)
Residuals:
Min 1Q Median 3Q Max
-4.7677 -2.7796 -0.1025 3.1972 4.3691
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.565556 0.145851 38.159 < 2e-16 ***
animalfox 0.806634 0.131198 6.148 8.6e-10 ***
animalpig 0.010635 0.131259 0.081 0.9354
animalwolf 0.806650 0.131198 6.148 8.6e-10 ***
weight 0.007946 0.003815 2.083 0.0373 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.933 on 3995 degrees of freedom
Multiple R-squared: 0.01933, Adjusted R-squared: 0.01835
F-statistic: 19.69 on 4 and 3995 DF, p-value: 4.625e-16
Nesse caso, para encontrar a estimativa de 'tempo de vida' quando o valor de 'peso' é 1, devo adicionar cada um dos coeficientes de 'animal' à interceptação: (Interceptação) + animalfox + animalpig + animalwolf? Ou qual é a maneira correta de fazer isso?
Obrigado Sverre
code
, recuar por 4 espaços.code
linha, use backticks:this is code with a $ and *
set.seed(1)
(ou qualquer número que desejar) antes de executar a geração aleatória de números, para que todos obtenham exatamente os mesmos resultados que você (embora isso não importe muito nesse caso).Respostas:
Não, você não deve adicionar todos os coeficientes. Você essencialmente tem o modelo
onde, por exemplo,p i g =1 se o animal era um porco e 0 em caso contrário. Então, para calcularβ0 0+β1+β2+β3+β4 como você sugeriu para obter a média geral quando w e i g h t =1 é como dizer "se você fosse um porco, um lobo e uma raposa, e seu peso fosse 1, qual é a sua expectativa de vida?". Claramente, já que cada animal é apenas uma dessas coisas, isso não faz muito sentido.
Você terá que fazer isso separadamente para cada animal. Por exemplo,β0 0+β2+β4 é a expectativa de vida útil de um porco quando seu peso é 1.
fonte
A coisa mais simples a fazer é usar a função de previsão no objeto lm, para cuidar de muitos detalhes, como converter um fator nos valores certos para adicionar. Se você está tentando entender as peças que entram na previsão, defina
type='terms'
e elas mostrarão as peças individuais que se juntam e fazem sua previsão.Observe também que como um fator é convertido em variáveis depende de algumas opções, o padrão escolherá um grupo de linha de base para comparar os outros grupos, mas você também pode configurá-lo para uma média e diferenças dessa média (ou outras comparações de interesse) .
fonte
Se você deseja uma vida útil média quando o peso é 1, basta retirar "animal" nesta chamada:
fonte