Regressões

No exemplo, o objetivo é visualizar graficamente a variável stfdem em todos os passos. Por fim, você deseja calcular um modelo de regressão em stfdem, incluindo os efeitos de stfeco, district, gndr, trstlgl, trstprl e agea.

Primeiro, você calcula o modelo antes de começar as representações gráficas:

model1 <- lm(
  stfdem ~ 1 + stfeco + district + gndr + trstlgl + trstprl + agea,
  pss
)

summary(model1)
## 
## Call:
## lm(formula = stfdem ~ 1 + stfeco + district + gndr + trstlgl + 
##     trstprl + agea, data = pss)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.7191 -1.0880  0.0338  1.1554  5.7564 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          0.582230   0.179506   3.244 0.001189 ** 
## stfeco               0.878646   0.014100  62.314  < 2e-16 ***
## districtDistrikt 5   0.013212   0.082147   0.161 0.872229    
## districtDistrikt 7   0.067992   0.084835   0.801 0.422900    
## districtDistrikt 10  0.073204   0.089332   0.819 0.412567    
## districtDistrikt 12  0.175263   0.097254   1.802 0.071593 .  
## gndrmale            -0.089675   0.050657  -1.770 0.076754 .  
## trstlgl             -0.048787   0.013905  -3.509 0.000455 ***
## trstprl             -0.001430   0.012900  -0.111 0.911713    
## agea                 0.001942   0.002268   0.856 0.391970    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.734 on 4695 degrees of freedom
##   (295 observations deleted due to missingness)
## Multiple R-squared:  0.4593,	Adjusted R-squared:  0.4583 
## F-statistic: 443.2 on 9 and 4695 DF,  p-value: < 2.2e-16

No modelo, você identifica efeitos significativos de stfeco, gndrmale e trstlgl. Vamos representá-los a seguir. Mas antes, repita a representação dos coeficientes de regressão de todos os blocos de aprendizado 4 com dwplot().

Tente por si mesmo primeiro e depois veja aqui!

Frequentemente, o objetivo não é apenas apresentar modelos de regressão em tabelas, mas também representar graficamente efeitos específicos, como os efeitos significativos. Aqui apresentamos uma maneira de fazer isso: manualmente através de suas próprias previsões.

Existem bibliotecas como ggraphExtra, mas elas têm limitações na plotagem.

No entanto, uma vez que temos um modelo multivariado, não é mais tão simples. Devemos manter os outros efeitos constantes para representar corretamente o gráfico. Mas ainda é fácil de fazer, desde que se entenda o que significa manter constante.

Queremos plotar o efeito de stfeco em stfdem. Esse efeito deve ser interpretado juntamente com os outros efeitos. Para plotar o efeito, mantemos o(s) outro(s) efeito(s) constante(s). Para isso, usamos a biblioteca sjPlot e a função plot_model(). Você também precisa carregar o ggplot.

install.packages("sjPlot")
library("sjPlot")
library("tidyverse")

Na função plot_model(), primeiro você chama o objeto do modelo de regressão (aqui model1), indica no segundo argumento que é um gráfico marginal, que inclui valores previstos (type = pred), e então especifica no argumento terms qual efeito deve ser plotado. A função automaticamente mantém todas as variáveis métricas no valor médio e as variáveis categóricas na categoria de referência.

plot_model(
  model1, 
  type = "pred",
  terms = "stfeco"
)

Portanto, na figura, você vê o efeito de stfeco em stfdem, mantendo constante (média) de trstlgl, trstprl e agea para pessoas do sexo feminino (nível de referência gndr) do Distrito 1 (nível de referência district).

Se você quiser adicionar o efeito para diferentes grupos da variável categórica, basta adicionar a variável adicional em terms:

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr"
  )
)

Da mesma forma, você poderia adicionar facilmente a próxima variável categórica:

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district"
  )
)

Você também pode restringir a saída para determinados levels (valores de uma variável) ao colocar os levels entre colchetes [..] após os nomes das variáveis (mas dentro das "..."):

# levels von district
levels(pss$district)
## [1] "Distrikt 1"  "Distrikt 5"  "Distrikt 7"  "Distrikt 10" "Distrikt 12"
plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district[Distrikt 1, Distrikt 12]")
)

Modificações em um ggplot também funcionam aqui: Vamos alterar os eixos e as cores!

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district"
  )
) +
  scale_x_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  ) +
  scale_y_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  ) +
  scale_color_manual(values = beyonce_palette(72))

Agora represente a relação entre trstlgl e stfdem. Para cada distrito, uma linha própria deve ser exibida e os gráficos devem ser separados por sexo. Experimente primeiro por conta própria antes de ver a solução.

plot_model(
model1,
type = “pred”,
terms = c(
“trstlgl”,
“district”,
“gndr”
)
) +
scale_x_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_y_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_color_manual(values = beyonce_palette(18))

Isso é tudo! Você praticou neste capítulo como representar gráficos para métodos individuais e agora domina os primeiros passos com ggplot!