Imagem por @siora18.
Atenção, a validade dos resultados analisados nesse documento pode não ser precisa. Por não nos preocuparmos no momento com a validade do nosso modelo, ou com hipoteses importantes do modelo clássico, utilizar essas informações pode não ser confiável. Esse documento foi feito para auxiliar a interpretação de resultados de um modelo de regressão para iniciantes da área.
Dicas:
Com base nos dois itens, o modelo aparenta representar a realidade?
Um joalheiro quer obter informações de como precificar seus diamantes. Para isso, ele coletou informações relativas a 53940 diamantes que já foram previamente vendidos. Visualizando graficamente podemos ver a seguinte relação entre preço e quilate.
dataset <- diamonds
ggplot(dataset, aes(carat, price)) +
geom_point(color = "steelblue", size = 0.3) +
geom_jitter(color = "steelblue", size = 0.3) +
theme_classic() +
labs(x = "Quilates", y = "Preço")Uma regressão simples foi estimada, com os seguintes resultados:
summary(lm(price ~ carat, dataset))##
## Call:
## lm(formula = price ~ carat, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18585.3 -804.8 -18.9 537.4 12731.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2256.36 13.06 -172.8 <2e-16 ***
## carat 7756.43 14.07 551.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1549 on 53938 degrees of freedom
## Multiple R-squared: 0.8493, Adjusted R-squared: 0.8493
## F-statistic: 3.041e+05 on 1 and 53938 DF, p-value: < 2.2e-16
O parâmetro de intercepto e de inclinação para a variável quilate são estatisticamente significativos a um nível de 1% de significância, visto que o pvalor associado a estatística de teste é muito próximo a zero. O R2 do modelo, indicado por “Multiple R-squared” é de 84.9%, o que indica que as variações da variável quilate explicam em até 84.9% as variações da variável preço, indicando um bom ajustamento do modelo.
A forma funcional do modelo aparenta ser linear, com base na descrição do modelo acima. Assim o modelo tem a forma: \(\hat{preço} = -2256.36 + 7756.43 \cdot quilate + \mu_i\)
Em termos práticos, podemos dizer que para cada incremento em uma unidade na variável quilate, o preço aumenta em 7756.43 unidades. Isso vai de encontro com a lógica, visto que quanto mais quilates possuirem um diamante, mais caro ele será.Um economista decide verificar a relação de expectativa de vida com um indicador de riqueza de uma nação, o pibpercapita. Após uma pesquisa incessante por dados em diversos países, ele consegue reunir 1704 observações de diversos países.
dataset <- gapminder::gapminder
setnames(dataset, "gdpPercap", "pibpercapita")
setnames(dataset, "lifeExp", "expectativadevida")
ggplot(dataset, aes(pibpercapita, expectativadevida)) +
geom_point(color = "indianred1", size = 0.7) +
theme_classic()Uma regressão simples foi estimada, com os seguintes resultados:
summary(lm(expectativadevida ~ pibpercapita, dataset))##
## Call:
## lm(formula = expectativadevida ~ pibpercapita, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -82.754 -7.758 2.176 8.225 18.426
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.396e+01 3.150e-01 171.29 <2e-16 ***
## pibpercapita 7.649e-04 2.579e-05 29.66 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.49 on 1702 degrees of freedom
## Multiple R-squared: 0.3407, Adjusted R-squared: 0.3403
## F-statistic: 879.6 on 1 and 1702 DF, p-value: < 2.2e-16
O parâmetro de intercepto e de inclinação para a variável quilate são estatisticamente significativos a um nível de 1% de significância, visto que o pvalor associado a estatística de teste é muito próximo a zero. O R2 do modelo, indicado por “Multiple R-squared” é de 34.07%, o que indica que as variações da variável pibpercapita explicam em até 34.07% as variações da variável preço. Como esperado, a expectativa de vida depende de mais informações que simplesmente a renda per capita de um país, mas esse aparenta ser um bom preditor até certo nível.
A forma funcional do modelo aparenta ser linear, com base na descrição do modelo acima. Assim o modelo tem a forma: \(\hat{preço} = 53.96 + 0.0007649 \cdot pibpercapita + \mu_i\)
Em termos práticos, podemos dizer que a expectativa de vida média no mundo, independente da rendapercapita é de aproximadamente 54 anos, e, o incremento em uma unidade de renda percapita aumenta a expectativa de vida em 0.0007649.E se o resultado do modelo fosse o seguinte?
summary(lm(log(expectativadevida) ~ log(pibpercapita), dataset))##
## Call:
## lm(formula = log(expectativadevida) ~ log(pibpercapita), data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.67059 -0.06453 0.01978 0.09086 0.36156
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.864177 0.023283 123.02 <2e-16 ***
## log(pibpercapita) 0.146549 0.002821 51.95 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1445 on 1702 degrees of freedom
## Multiple R-squared: 0.6132, Adjusted R-squared: 0.613
## F-statistic: 2698 on 1 and 1702 DF, p-value: < 2.2e-16
O que muda será a forma funcional do modelo, como podemos ver logo na primeira linha dessa descrição acima. O modelo agora tem a forma log-log, assim o modelo tem a forma: \(\hat{log(preço)} = 2.864177 + 0.14654 \cdot log(pibpercapita) + \mu_i\)
O que muda é a interpretação. Agora o coeficiente estimado para o pibpercapita é a elasticidade, ao invés de efeito marginal. Ou seja, um aumento em 1% na rendapercapita aumenta a expectativa de vida em 0.146%!Uma pessoa curiosa, por algum motivo, decidiu perguntar para 20 pessoas o tamanho do pé delas e o salário que elas recebiam. Os dados podem ser expressos como segue:
set.seed(42)
dataset <- data.frame(tamanho_pe = rnorm(20, 39, 2), salario = rnorm(20, 2000, 500))
ggplot(dataset, aes(tamanho_pe, salario)) +
geom_point(color = "steelblue") +
theme_classic()Uma regressão simples foi estimada, com os seguintes resultados:
summary(lm(salario ~ tamanho_pe, dataset))##
## Call:
## lm(formula = salario ~ tamanho_pe, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -805.02 -235.90 -39.75 177.28 1043.87
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1772.43 1768.38 -1.002 0.3295
## tamanho_pe 92.35 44.81 2.061 0.0541 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 512.7 on 18 degrees of freedom
## Multiple R-squared: 0.1909, Adjusted R-squared: 0.146
## F-statistic: 4.248 on 1 and 18 DF, p-value: 0.05406
O que pode ser dito sobre esse modelo? Nesse caso, a FRA representa remotamente o que poderia ser a FRP? O que aconteceu então?
Caso essa pessoa curiosa decidisse perguntar e coletar dados de mais pessoas, o que você acha que aconteceria?
Ao invés de imaginar, essa mesma pessoa perguntou para 50.000 pessoas o tamanho do pé e o salário delas, resultado nesses dados:
set.seed(42)
dataset <- data.frame(tamanho_pe = rnorm(50000, 39, 2), salario = rnorm(5000, 2000, 500))
ggplot(dataset, aes(tamanho_pe, salario)) +
geom_point(color = "steelblue", size = 0.1) +
theme_classic()Uma regressão simples foi estimada, com os seguintes resultados:
summary(lm(salario ~ tamanho_pe, dataset))##
## Call:
## lm(formula = salario ~ tamanho_pe, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1952.82 -338.65 0.58 327.38 1604.18
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1947.270 43.126 45.15 <2e-16 ***
## tamanho_pe 1.325 1.104 1.20 0.23
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 496.5 on 49998 degrees of freedom
## Multiple R-squared: 2.879e-05, Adjusted R-squared: 8.79e-06
## F-statistic: 1.44 on 1 and 49998 DF, p-value: 0.2302
Para clarificar mais ainda, veja a regressão ajustada nos dados:
ggplot(dataset, aes(tamanho_pe, salario)) +
geom_point(color = "steelblue", size = 0.1) +
geom_smooth(method = "lm", se = F) +
theme_classic()## `geom_smooth()` using formula 'y ~ x'
Essa linha reta nos indica o que? O tamanho do pé tem algum efeito no salário de uma pessoa?
Um pesquisador de economia do desenvolvimento formulou uma teoria sobre a relação da produção de riquezas de um país e o tamanho da população. Ele deseja estimar se seu modelo é condizente e verificar se a população realmente tem impacto sob o PIB. Após uma coleta de dados, ele pode representar suas descobertas da seguinte forma:
dataset <- longley
setnames(dataset, "Population", "populacao")
setnames(dataset, "GNP", "PIB")
ggplot(dataset, aes(populacao, PIB)) +
geom_point(color = "steelblue") +
theme_classic()Uma regressão simples foi estimada, com os seguintes resultados:
summary(lm(PIB ~ populacao, dataset))##
## Call:
## lm(formula = PIB ~ populacao, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.2942 -11.3519 -0.6804 11.2152 18.1277
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1275.2100 59.8256 -21.32 4.53e-12 ***
## populacao 14.1616 0.5086 27.84 1.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.7 on 14 degrees of freedom
## Multiple R-squared: 0.9823, Adjusted R-squared: 0.981
## F-statistic: 775.2 on 1 and 14 DF, p-value: 1.168e-13