Regressao4

Author

Silvio

Modelo de Regressão Linear Multinível

Aplicado nas situações em que a amostra apresenta subgrupos (conglomerados), onde é suposto que as observações dentro de um conglomerado possam apresentar correlações (correlações intraclasse).

\(y_{ij}=\gamma_{00}+\gamma_{10}x_{ij}+u_{0j}+u_{1j}x_{ij}+e_{ij}\)

Exemplo SAEB

Proficiência: A pontuação final do aluno \(i\) na escola \(j\). O valor base foi definido em 250 (escala Saeb).

\(NSE_{ij}\) (Nível 1): O nível socioeconômico afeta o aluno individualmente.

\(Tipo_{j}\) (Nível 2): Variável dicotômica (0=Pública, 1=Privada).

  1. Abrindo dados
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   4.0.2     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
dados<-read_csv("https://raw.githubusercontent.com/Silvioest/teste/refs/heads/master/dadosSAEB.csv")
Rows: 1067 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (4): id_escola, tipo_escola, nse, proficiencia

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(dados)
   id_escola      tipo_escola          nse            proficiencia  
 Min.   : 1.00   Min.   :0.0000   Min.   :-3.24892   Min.   :152.9  
 1st Qu.: 8.00   1st Qu.:0.0000   1st Qu.:-0.60700   1st Qu.:239.6  
 Median :16.00   Median :0.0000   Median : 0.04871   Median :264.0  
 Mean   :15.48   Mean   :0.3018   Mean   : 0.03937   Mean   :269.5  
 3rd Qu.:22.00   3rd Qu.:1.0000   3rd Qu.: 0.71188   3rd Qu.:299.7  
 Max.   :30.00   Max.   :1.0000   Max.   : 3.47607   Max.   :385.6  
  1. Correlação
cor(dados[,3:4])
                   nse proficiencia
nse          1.0000000    0.3786929
proficiencia 0.3786929    1.0000000
  1. Histograma da variável Proficiência
hist(dados$proficiencia,
     main = "Histograma da v.a Proficiência",
     xlab="Proficiência")

  1. Gráfico de dispersão Proficência VS NSE
p<-ggplot(dados, aes(x=nse, y=proficiencia))+
  geom_point(shape=20)+geom_smooth(method=lm, se=FALSE, size=.5)+theme(legend.position="none")
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
p
`geom_smooth()` using formula = 'y ~ x'

  1. Gráfico de dispersão Proficência VS NSE por escola
p1<-ggplot(dados, aes(x=nse, y=proficiencia, color=as.factor(id_escola)))+
  geom_point(shape=20)+geom_smooth(method=lm, se=FALSE, size=.5)+theme(legend.position="none")

p1
`geom_smooth()` using formula = 'y ~ x'

  1. Gráfico de dispersão Proficência VS NSE por escola na forma de painel
p2 <- p1 + facet_wrap(~id_escola, nrow = 4)
p2
`geom_smooth()` using formula = 'y ~ x'

  1. Ajustando o modelo nulo
library(lme4)
Carregando pacotes exigidos: Matrix

Anexando pacote: 'Matrix'
Os seguintes objetos são mascarados por 'package:tidyr':

    expand, pack, unpack
ajuste0<-lmer(proficiencia ~ 1 + (1 | id_escola), data=dados)

summary(ajuste0)
Linear mixed model fit by REML ['lmerMod']
Formula: proficiencia ~ 1 + (1 | id_escola)
   Data: dados

REML criterion at convergence: 10028.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.0530 -0.6610  0.0322  0.6620  3.0279 

Random effects:
 Groups    Name        Variance Std.Dev.
 id_escola (Intercept) 1169.7   34.20   
 Residual               632.4   25.15   
Number of obs: 1067, groups:  id_escola, 30

Fixed effects:
            Estimate Std. Error t value
(Intercept)  271.988      6.295   43.21
  1. ** Calculo do ICC - Efeito da escola **

\[ ICC=\frac{\sigma_{u0}^{2}}{\sigma_{e}^{2}+\sigma_{u0}^{2}}\]

ICC<-1169.7/(1169.7+632.4)
ICC
[1] 0.6490761

8.Efeito da variância da proficiencia do aluno dentro da escola

1-ICC
[1] 0.3509239
  1. Coeficiente do modelo nulo
coef(ajuste0)
$id_escola
   (Intercept)
1     308.5453
2     309.2242
3     272.9411
4     252.8599
5     309.5960
6     267.9398
7     262.2940
8     311.3494
9     333.1301
10    237.4679
11    316.9333
12    267.5575
13    324.5646
14    254.1270
15    263.0281
16    314.7944
17    252.4165
18    321.5714
19    227.6949
20    234.8530
21    238.3434
22    239.8882
23    262.1959
24    264.3514
25    247.9590
26    240.9145
27    242.0418
28    310.6395
29    242.5376
30    227.8711

attr(,"class")
[1] "coef.mer"
  1. Modelo com NSE no primeiro nível
ajuste1<-lmer(proficiencia ~ nse + (1 | id_escola), data=dados)

summary(ajuste1)
Linear mixed model fit by REML ['lmerMod']
Formula: proficiencia ~ nse + (1 | id_escola)
   Data: dados

REML criterion at convergence: 9598.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.8896 -0.6510  0.0032  0.6607  3.5346 

Random effects:
 Groups    Name        Variance Std.Dev.
 id_escola (Intercept) 1141.6   33.79   
 Residual               419.2   20.47   
Number of obs: 1067, groups:  id_escola, 30

Fixed effects:
            Estimate Std. Error t value
(Intercept) 271.5954     6.2028   43.79
nse          15.0955     0.6561   23.01

Correlation of Fixed Effects:
    (Intr)
nse -0.003
  1. Coeficiente do modelo com NSE no primeiro nível
coef(ajuste1)
$id_escola
   (Intercept)      nse
1     304.7896 15.09552
2     312.0124 15.09552
3     266.7696 15.09552
4     253.3116 15.09552
5     314.1567 15.09552
6     267.5039 15.09552
7     261.7787 15.09552
8     313.0578 15.09552
9     327.3642 15.09552
10    235.8471 15.09552
11    316.2743 15.09552
12    270.1802 15.09552
13    325.6863 15.09552
14    249.0876 15.09552
15    261.9421 15.09552
16    311.8741 15.09552
17    249.9307 15.09552
18    319.3385 15.09552
19    228.0076 15.09552
20    236.5014 15.09552
21    241.3039 15.09552
22    243.0579 15.09552
23    263.4017 15.09552
24    264.2534 15.09552
25    250.6910 15.09552
26    240.5979 15.09552
27    241.8410 15.09552
28    309.7683 15.09552
29    242.0182 15.09552
30    225.5148 15.09552

attr(,"class")
[1] "coef.mer"
  1. Modelo com NSE no primeiro nível e tipo de escola segundo nível
ajuste2<-lmer(proficiencia ~ nse + factor(tipo_escola) +(1 | id_escola), data=dados)

summary(ajuste2)
Linear mixed model fit by REML ['lmerMod']
Formula: proficiencia ~ nse + factor(tipo_escola) + (1 | id_escola)
   Data: dados

REML criterion at convergence: 9532.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.8545 -0.6629 -0.0064  0.6638  3.5052 

Random effects:
 Groups    Name        Variance Std.Dev.
 id_escola (Intercept) 130.9    11.44   
 Residual              419.2    20.47   
Number of obs: 1067, groups:  id_escola, 30

Fixed effects:
                     Estimate Std. Error t value
(Intercept)          249.3898     2.6720   93.33
nse                   15.1054     0.6553   23.05
factor(tipo_escola)1  66.5105     4.6501   14.30

Correlation of Fixed Effects:
            (Intr) nse   
nse         -0.003       
fctr(tp_s)1 -0.575 -0.006
  1. Coeficiente do modelo com NSE no primeiro nível e tipo de escola segundo nível
coef(ajuste2)
$id_escola
   (Intercept)      nse factor(tipo_escola)1
1     239.3334 15.10542             66.51055
2     246.6309 15.10542             66.51055
3     265.5228 15.10542             66.51055
4     252.6035 15.10542             66.51055
5     248.2876 15.10542             66.51055
6     266.2941 15.10542             66.51055
7     260.7019 15.10542             66.51055
8     247.3278 15.10542             66.51055
9     260.2059 15.10542             66.51055
10    236.4486 15.10542             66.51055
11    250.0924 15.10542             66.51055
12    267.2898 15.10542             66.51055
13    258.7382 15.10542             66.51055
14    248.9420 15.10542             66.51055
15    260.9519 15.10542             66.51055
16    246.0177 15.10542             66.51055
17    249.7240 15.10542             66.51055
18    252.9618 15.10542             66.51055
19    229.0743 15.10542             66.51055
20    237.0570 15.10542             66.51055
21    241.6558 15.10542             66.51055
22    243.2632 15.10542             66.51055
23    262.1155 15.10542             66.51055
24    262.8641 15.10542             66.51055
25    250.3361 15.10542             66.51055
26    241.1187 15.10542             66.51055
27    242.2947 15.10542             66.51055
28    244.3022 15.10542             66.51055
29    242.3801 15.10542             66.51055
30    227.1581 15.10542             66.51055

attr(,"class")
[1] "coef.mer"
  1. Modelo com NSE no primeiro nível e tipo de escola segundo nível e coef aleatório
ajuste3<-lmer(proficiencia ~ nse + factor(tipo_escola) +(1 + nse | id_escola), data=dados)
boundary (singular) fit: see help('isSingular')
summary(ajuste3)
Linear mixed model fit by REML ['lmerMod']
Formula: proficiencia ~ nse + factor(tipo_escola) + (1 + nse | id_escola)
   Data: dados

REML criterion at convergence: 9527.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.8069 -0.6605  0.0000  0.6787  3.4903 

Random effects:
 Groups    Name        Variance Std.Dev. Corr 
 id_escola (Intercept) 131.951  11.487        
           nse           2.144   1.464   -1.00
 Residual              417.062  20.422        
Number of obs: 1067, groups:  id_escola, 30

Fixed effects:
                     Estimate Std. Error t value
(Intercept)          249.4745     2.6219   95.15
nse                   15.0229     0.7058   21.28
factor(tipo_escola)1  66.3658     4.3357   15.31

Correlation of Fixed Effects:
            (Intr) nse   
nse         -0.320       
fctr(tp_s)1 -0.547  0.014
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
  1. Coeficiente do modelo com NSE no primeiro nível e tipo de escola segundo nível e coef aleatório
coef(ajuste3)
$id_escola
   (Intercept)      nse factor(tipo_escola)1
1     239.5172 16.29207             66.36578
2     246.7561 15.36936             66.36578
3     266.5831 12.84210             66.36578
4     252.6494 14.61817             66.36578
5     248.2120 15.18379             66.36578
6     266.4730 12.85612             66.36578
7     260.5280 13.61392             66.36578
8     247.8239 15.23326             66.36578
9     260.3690 13.63419             66.36578
10    236.3666 16.69367             66.36578
11    250.1187 14.94075             66.36578
12    267.2951 12.75135             66.36578
13    258.6936 13.84774             66.36578
14    248.8874 15.09770             66.36578
15    261.0683 13.54505             66.36578
16    246.0831 15.45515             66.36578
17    250.2143 14.92856             66.36578
18    252.8483 14.59281             66.36578
19    228.6651 17.67535             66.36578
20    237.2482 16.58129             66.36578
21    242.1275 15.95935             66.36578
22    243.0663 15.83969             66.36578
23    261.7322 13.46043             66.36578
24    262.9657 13.30319             66.36578
25    250.3187 14.91526             66.36578
26    240.3862 16.18131             66.36578
27    242.8595 15.86605             66.36578
28    245.1620 15.57256             66.36578
29    242.4129 15.92297             66.36578
30    226.8049 17.91246             66.36578

attr(,"class")
[1] "coef.mer"

16.Comparação entre os modelos

anova(ajuste0,ajuste1,ajuste2,ajuste3)
refitting model(s) with ML (instead of REML)
Data: dados
Models:
ajuste0: proficiencia ~ 1 + (1 | id_escola)
ajuste1: proficiencia ~ nse + (1 | id_escola)
ajuste2: proficiencia ~ nse + factor(tipo_escola) + (1 | id_escola)
ajuste3: proficiencia ~ nse + factor(tipo_escola) + (1 + nse | id_escola)
        npar     AIC     BIC  logLik -2*log(L)    Chisq Df Pr(>Chisq)    
ajuste0    3 10039.7 10054.6 -5016.9   10033.7                           
ajuste1    4  9613.4  9633.3 -4802.7    9605.4 428.3071  1  < 2.2e-16 ***
ajuste2    5  9551.7  9576.6 -4770.9    9541.7  63.6621  1  1.477e-15 ***
ajuste3    7  9550.9  9585.7 -4768.5    9536.9   4.8205  2    0.08979 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  1. Gráfico de análise dos coeficientes com intervalo de confiança
library(lattice)
dotplot(ranef(ajuste3, condVar = TRUE))
$id_escola

  1. Analise da qualidade do modelo
library(performance)

check_model(ajuste3, check = "linearity")

check_model(ajuste3, check = "qq")

check_model(ajuste3, check = "reqq")

AJUSTE OK