O artigo “Ecofriendly Dyeing of Silk with Extract of Yerba Mate” (Textile Res. J. 2017: 829–837) descreve um experimento para estudar os efeitos da concentração de corante (mg/L), da temperatura (°C) e do pH na adsorção de corante (mg de corante por grama de tecido). Adsorção de corante é um indicador de cor.
concentracao adsorcao
Min. :10.00 Min. :157.0
1st Qu.:11.25 1st Qu.:280.8
Median :17.50 Median :379.5
Mean :16.00 Mean :371.5
3rd Qu.:20.00 3rd Qu.:435.0
Max. :20.00 Max. :593.0
sd(dados$concentracao)
[1] 4.594683
sd(dados$adsorcao)
[1] 133.3552
Correlação entre as variáveis
plot(dados$concentracao, dados$adsorcao)
ggplot(dados, aes(x = concentracao, y = adsorcao)) +geom_point() +labs(title ="Relação entre concentração e adsorção",x ="Concentração (mg/L)",y ="Adsorção (mg/g)" )
cor(dados$concentracao, dados$adsorcao)
[1] 0.8640818
Teste de hipóteses:
\(H_0: rho = 0\)
cor.test(dados$concentracao, dados$adsorcao)
Pearson's product-moment correlation
data: dados$concentracao and dados$adsorcao
t = 4.8554, df = 8, p-value = 0.001263
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5142117 0.9673971
sample estimates:
cor
0.8640818
Observe o IC para \(\rho\).
Ajuste do modelo
modelo <-lm(adsorcao ~ concentracao, data = dados)modelo
Analysis of Variance Table
Response: adsorcao
Df Sum Sq Mean Sq F value Pr(>F)
concentracao 1 119501 119501 23.575 0.001263 **
Residuals 8 40551 5069
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Estimativas, erros-padrões, estatísticas \(t\), valores \(p\), \(\sigma\), \(R^2\), \(R^2_{aj}\), \(F_c\) para regressão (e valor \(p\)):
summary(modelo)
Call:
lm(formula = adsorcao ~ concentracao, data = dados)
Residuals:
Min 1Q Median 3Q Max
-94.82 -53.22 15.28 33.93 121.18
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -29.763 85.654 -0.347 0.73719
concentracao 25.079 5.165 4.855 0.00126 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 71.2 on 8 degrees of freedom
Multiple R-squared: 0.7466, Adjusted R-squared: 0.715
F-statistic: 23.58 on 1 and 8 DF, p-value: 0.001263
Testes de hipóteses:
\[
H_0: \beta_0 = 0 \quad vs \quad H_1: \beta_0 \neq 0
\]\[
H_0: \beta_1 = 0 \quad vs \quad H_1: \beta_1 \neq 0
\] Para o teste \(t\) dos coeficientes, comparamos os valores \(t_c\) com o valor \(t_{tab} = t_{\alpha/2, gl(erro)}\)
qt(0.05/2, df =8, lower.tail =FALSE) # t tabulado
[1] 2.306004
Para o teste de hipóteses, \(i = 0\) ou \(1\): \[
H_0: \beta_i = \beta_{i,0} \quad vs \quad H_1: \beta_i \neq \beta_{i,0}
\] onde \(\beta_{i,0}\) é o valor hipotetizado para o parâmetro (geralmente 0).
A estatística de teste é dada por: \[
t_c = \frac{\hat{\beta}_i - \beta_{i,0}}{se(\hat{\beta}_i)}
\]
Para o seguinte exemplo: \[
H_0: \beta_1 = 25 \quad vs \quad H_1: \beta_1 \neq 25
\]
A estatística de teste é: \[
t_c = \frac{\hat{\beta}_1 - 25}{se(\hat{\beta}_1)}
\]
t_calc <- (25.079-25)/5.165t_calc
[1] 0.01529526
t_tab <-qt(0.05/2, df =8, lower.tail =FALSE) # t tabuladot_tab
Analysis of Variance Table
Response: adsorcao
Df Sum Sq Mean Sq F value Pr(>F)
concentracao 1 1499012 1499012 327.75 2.182e-08 ***
Residuals 9 41163 4574
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo2)
Call:
lm(formula = adsorcao ~ -1 + concentracao, data = dados)
Residuals:
Min 1Q Median 3Q Max
-89.945 -61.341 4.027 29.541 126.055
Coefficients:
Estimate Std. Error t value Pr(>|t|)
concentracao 23.35 1.29 18.1 2.18e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 67.63 on 9 degrees of freedom
Multiple R-squared: 0.9733, Adjusted R-squared: 0.9703
F-statistic: 327.7 on 1 and 9 DF, p-value: 2.182e-08
Comparação entre modelo completo e modelo reduzido (sem intercepto)
anova(modelo2, modelo)
Analysis of Variance Table
Model 1: adsorcao ~ -1 + concentracao
Model 2: adsorcao ~ concentracao
Res.Df RSS Df Sum of Sq F Pr(>F)
1 9 41163
2 8 40551 1 612.04 0.1207 0.7372
Se não há diferença entre os modelos, qual deve ser escolhido?
Comparação entre modelo completo e modelo reduzido (sem intercepto)
anova(modelo2, modelo)
Analysis of Variance Table
Model 1: adsorcao ~ -1 + concentracao
Model 2: adsorcao ~ concentracao
Res.Df RSS Df Sum of Sq F Pr(>F)
1 9 41163
2 8 40551 1 612.04 0.1207 0.7372
Se não há diferença entre os modelos, qual deve ser escolhido?
O modelo mais simples: com menos parâmetros.
Comparação de R2 e R2ajustado
summary(modelo)
Call:
lm(formula = adsorcao ~ concentracao, data = dados)
Residuals:
Min 1Q Median 3Q Max
-94.82 -53.22 15.28 33.93 121.18
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -29.763 85.654 -0.347 0.73719
concentracao 25.079 5.165 4.855 0.00126 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 71.2 on 8 degrees of freedom
Multiple R-squared: 0.7466, Adjusted R-squared: 0.715
F-statistic: 23.58 on 1 and 8 DF, p-value: 0.001263
summary(modelo2)
Call:
lm(formula = adsorcao ~ -1 + concentracao, data = dados)
Residuals:
Min 1Q Median 3Q Max
-89.945 -61.341 4.027 29.541 126.055
Coefficients:
Estimate Std. Error t value Pr(>|t|)
concentracao 23.35 1.29 18.1 2.18e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 67.63 on 9 degrees of freedom
Multiple R-squared: 0.9733, Adjusted R-squared: 0.9703
F-statistic: 327.7 on 1 and 9 DF, p-value: 2.182e-08
Modelo de Regressão Linear Múltipla
Seja \(Y\) a adsorção de corante, \(X_1\) a concentração, \(X_2\) a temperatura e \(X_3\) o pH. O modelo de regressão linear múltipla, que relaciona a adsorção com as variáveis explicativas é dado por: \[
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_3 + \varepsilon,
\]
em que, \(\varepsilon \sim N(0, \sigma^2)\), \(Y\) é a variável resposta (adsorção) e \(X_1\), \(X_2\) e \(X_3\) são as variáveis explicativas (concentração, temperatura e pH, respectivamente).
O modelo de regreão linear múltipla é estimado pela função lm() do R, que é uma função genérica para ajuste de modelos lineares. O modelo é ajustado pela função lm() usando a fórmula adsorcao ~ conc + temp + ph, que indica que a variável resposta é adsorcao e as variáveis explicativas são conc, temp e ph.
A análise de variância do modelo é realizada pela função anova(), que é uma função genérica para análise de variância de modelos ajustados. O modelo é passado como argumento para a função anova(), que retorna a tabela de análise de variância do modelo, incluindo as somas de quadrados, graus de liberdade, quadrados médios, estatística \(F\) e valor \(p\) para o teste de significância global do modelo.
A função que calcula os intervalos de confiança para os coeficientes é a função confint(), que é uma função genérica para calcular intervalos de confiança para os parâmetros de um modelo ajustado. O modelo é passado como argumento para a função confint(), que retorna os intervalos de confiança para os coeficientes do modelo. O padrão do nível de confiança é 95%, mas pode ser alterado usando o argumento level.
Uma função que apresenta os coeficientes estimados, erros-padrões, estatísticas \(t\) e valores \(p\) é a função summary(), que é uma função genérica para sumarizar os resultados de um modelo ajustado. O modelo é sumarizado pela função summary(modelo3), que apresenta as informações mencionadas.
summary(modelo3)
Call:
lm(formula = adsorcao ~ conc + temp + ph, data = dados)
Residuals:
Min 1Q Median 3Q Max
-119.487 -6.477 -2.215 26.141 50.085
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 53.759 229.408 0.234 0.82252
conc 21.548 4.508 4.780 0.00306 **
temp 3.657 2.307 1.585 0.16405
ph -90.272 43.726 -2.064 0.08453 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 58.73 on 6 degrees of freedom
Multiple R-squared: 0.8707, Adjusted R-squared: 0.8061
F-statistic: 13.47 on 3 and 6 DF, p-value: 0.004493
IC para resposta média
Será apresentado a seguir como calcular os intervalos de confiança para a resposta média, ou seja, para a predição da adsorção de corante para cada combinação de concentração, temperatura e pH presentes no banco de dados. Para isso, é utilizada a função predict(), que é uma função genérica para fazer predições a partir de um modelo ajustado. O modelo é passado como argumento para a função predict(), juntamente com o argumento interval = "confidence", que indica que os intervalos de confiança devem ser calculados para os valores médios da resposta. A função retorna uma matriz com as predições da resposta média, os limites inferior e superior dos intervalos de confiança para cada combinação de variáveis explicativas presentes no banco de dados.
Quando queremos calcular os intervalos de predição para novas observações, ou seja, para combinações de concentração, temperatura e pH que não estão presentes no banco de dados, utilizamos a função predict() com o argumento interval = "prediction". A função retorna uma matriz com as predições da resposta para as novas observações, os limites inferior e superior dos intervalos de predição para cada combinação de variáveis explicativas presentes no banco de dados. Para isso, é necessário criar um novo banco de dados com as combinações de concentração, temperatura e pH para as quais se deseja calcular os intervalos de predição. A seguir, é apresentado um exemplo de como criar um novo banco de dados e calcular os intervalos de predição para essas novas observações.
A análise de resíduos é uma etapa importante na avaliação do ajuste do modelo de regressão. Os resíduos são as diferenças entre os valores observados e os valores ajustados pelo modelo. A análise de resíduos envolve a verificação de suposições do modelo, como normalidade, homocedasticidade e independência dos resíduos, além da identificação de possíveis outliers ou pontos influentes.
Há diversos tipos de resíduos, como resíduos brutos, resíduos padronizados, resíduos studentizados, resíduos PRESS e resíduos R-Student. Cada tipo de resíduo tem suas próprias características e é utilizado para diferentes propósitos na análise de resíduos.
O resíduo bruto é a diferença simples entre o valor observado e o valor ajustado pelo modelo. Ou seja, \(e_i = y_i - \hat{y}_i\), onde \(y_i\) é o valor observado e \(\hat{y}_i\) é o valor ajustado pelo modelo para a observação \(i\).
O resíduo padronizado é o resíduo bruto dividido pelo desvio padrão dos resíduos, o que permite comparar os resíduos em diferentes escalas. Isso é dado por \(d_i^* = \frac{e_i}{\hat{\sigma}}\), onde \(\hat{\sigma}\) é a estimativa do desvio padrão dos resíduos. Em geral, o valor de \(\sigma\) é estimado pelo modelo de regressão, e é dado por \(\hat{\sigma} = \sqrt{QMRes}\), onde \(QMRes\) é o quadrado médio dos resíduos.
Na definição do resíduo studentizado (internamente), considera-se variância do resíduo bruto e a matriz \(H\). O resíduo studentizado é definido por \(r_i = \frac{e_i}{\hat{\sigma} \sqrt{1 - h_{ii}}}\), onde \(h_{ii}\) é o elemento da matriz \(H\) correspondente à observação \(i\). O resíduo studentizado é uma medida de quão grande é o resíduo em relação à variabilidade dos resíduos, levando em consideração a influência da observação \(i\) no ajuste do modelo. A justificativa para esse resíduo é que \(Var(e) = Var(Y - \hat{Y}) = Var((I - H)Y) = (I - H)\sigma^2\), consequentemente, \(Var(e_i) = (1 - h_{ii})\sigma^2\), sendo \(h_{ii}\) o elemento da diagonal da matriz \(H\), que representa a influência da observação \(i\) no ajuste do modelo. Assim, o resíduo studentizado leva em consideração a variabilidade dos resíduos e a influência da observação \(i\) no ajuste do modelo, o que o torna uma medida mais robusta para identificar outliers e pontos influentes.
O resíduo PRESS é o resíduo studentizado calculado para cada observação, considerando a exclusão dessa observação do ajuste do modelo. Matematicamente, tem-se que \(e_(i) = y_i - \hat{y}_{(i)}\), onde \(\hat{y}_{(i)}\) é o valor ajustado pelo modelo de regressão quando as observações do indivíduo \(i\) são excluídas do ajuste. O resíduo PRESS é utilizado para avaliar a capacidade de predição do modelo, pois considera a influência de cada observação no ajuste do modelo e a variabilidade dos resíduos.
O resíduo R-Student é o resíduo studentizado calculado para cada observação, considerando a exclusão dessa observação do ajuste do modelo e a variabilidade dos resíduos. Ou seja, \(t_i = \frac{e_i}{\hat{\sigma}_{(i)} \sqrt{1 - h_{ii}}}\), onde \(\hat{\sigma}_{(i)}\) é a estimativa do desvio padrão dos resíduos quando as observações do indivíduo \(i\) são excluídas do ajuste do modelo. O resíduo R-Student é utilizado para identificar outliers e pontos influentes, pois leva em consideração a influência das observações do indivíduo \(i\) no ajuste do modelo e a variabilidade dos resíduos, mesmo quando essa observação é excluída do ajuste.
Example 3.1 The Delivery Time Data (Montgomery, Peck e Vining, 2021, p. 76)
A soft drink bottler is analyzing the vending machine service routes in his distribution system. He is interested in predicting the amount of time required by the route driver to service the vending machines in an outlet. This service activity includes stocking the machine with beverage products and minor maintenance or housekeeping. The industrial engineer responsible for the study has suggested that the two most important variables affecting the delivery time (y) are the number of cases of product stocked (x1) and the distance walked by the route driver (x2). The engineer has collected 25 observations on delivery time:
ID y x1 x2
Min. : 1 Min. : 8.00 Min. : 2.00 Min. : 36.0
1st Qu.: 7 1st Qu.:13.75 1st Qu.: 4.00 1st Qu.: 150.0
Median :13 Median :18.11 Median : 7.00 Median : 330.0
Mean :13 Mean :22.38 Mean : 8.76 Mean : 409.3
3rd Qu.:19 3rd Qu.:21.50 3rd Qu.:10.00 3rd Qu.: 605.0
Max. :25 Max. :79.24 Max. :30.00 Max. :1460.0
# Ajuste do modelo linear múltiplamod <-lm(y ~ x1 + x2, data = dados)# estimativas dos parâmetros/coeficientessummary(mod)
Call:
lm(formula = y ~ x1 + x2, data = dados)
Residuals:
Min 1Q Median 3Q Max
-5.7880 -0.6629 0.4364 1.1566 7.4197
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.341231 1.096730 2.135 0.044170 *
x1 1.615907 0.170735 9.464 3.25e-09 ***
x2 0.014385 0.003613 3.981 0.000631 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.259 on 22 degrees of freedom
Multiple R-squared: 0.9596, Adjusted R-squared: 0.9559
F-statistic: 261.2 on 2 and 22 DF, p-value: 4.687e-16
# IC para y_hat(x) (x1 = 8 e x2 = 275)predict(mod, newdata =data.frame(x1 =8, x2 =275), interval ="confidence")
fit lwr upr
1 19.22432 17.6539 20.79474
# IP para y_hat(x) (x1 = 8 e x2 = 275)predict(mod, newdata =data.frame(x1 =8, x2 =275), interval ="prediction")
fit lwr upr
1 19.22432 12.28456 26.16407
# IP para diversos valores de x1 e x2:x_novo <-data.frame(x1 =c(8, 10, 12), x2 =c(275, 300, 325))predict(mod, newdata = x_novo, interval ="prediction", level =0.95)
# modelo de regressão polinomial (grau 2) com x1# $Y_i = \beta_0 + \beta_1 X_{i1} + \beta_2 X_{i1}^2 + \epsilon_i$mod2 <-lm(y ~ x1 +I(x1^2), data = dados)summary(mod2)
Call:
lm(formula = y ~ x1 + I(x1^2), data = dados)
Residuals:
Min 1Q Median 3Q Max
-8.7819 -2.4305 -0.0255 1.5719 6.7452
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.21264 2.30994 3.555 0.00177 **
x1 1.13562 0.42985 2.642 0.01489 *
I(x1^2) 0.03456 0.01379 2.507 0.02005 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.771 on 22 degrees of freedom
Multiple R-squared: 0.9459, Adjusted R-squared: 0.941
F-statistic: 192.4 on 2 and 22 DF, p-value: 1.155e-14
# modelo de regressão polinomial (grau 2) com x2# $Y_i = \beta_0 + \beta_1 X_{i2} + \beta_2 X_{i2}^2 + \epsilon_i$mod3 <-lm(y ~ x2 +I(x2^2), data = dados)summary(mod3)
Call:
lm(formula = y ~ x2 + I(x2^2), data = dados)
Residuals:
Min 1Q Median 3Q Max
-8.218 -3.340 -1.617 3.096 16.096
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.161e+01 2.721e+00 4.268 0.000314 ***
x2 8.800e-03 1.045e-02 0.842 0.408772
I(x2^2) 2.665e-05 7.708e-06 3.457 0.002245 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 5.909 on 22 degrees of freedom
Multiple R-squared: 0.8672, Adjusted R-squared: 0.8551
F-statistic: 71.83 on 2 and 22 DF, p-value: 2.265e-10
# modelo linear múltipla com interação entre x1 e x2# $Y_i = \beta_0 + \beta_1 X_{i1} + \beta_2 X_{i2} + \beta_3 X_{i1}X_{i2} + \epsilon_i$mod4 <-lm(y ~ x1 + x2 + x1:x2, data = dados)# ou# mod4 <- lm(y ~ x1 * x2, data = dados)summary(mod4)
Call:
lm(formula = y ~ x1 + x2 + x1:x2, data = dados)
Residuals:
Min 1Q Median 3Q Max
-3.7316 -1.5387 0.0606 1.4375 4.7841
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.1390846 1.3997413 5.100 4.73e-05 ***
x1 1.0144063 0.1912517 5.304 2.93e-05 ***
x2 0.0058273 0.0033825 1.723 0.099622 .
x1:x2 0.0007419 0.0001750 4.240 0.000366 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.449 on 21 degrees of freedom
Multiple R-squared: 0.9782, Adjusted R-squared: 0.9751
F-statistic: 314.6 on 3 and 21 DF, p-value: < 2.2e-16
# Comparando dois modelos encaixados:# Definição: O Modelo 1 (M1) é encaixado no Modelo 2 (M2) se todos os parâmetros de M1 estão contidos em M2, e M2 possui parâmetros adicionais.# mod é encaixado em mod4, pois mod4 tem os mesmos parâmetros de mod mais um parâmetro adicional (interação x1:x2).anova(mod, mod4)
Analysis of Variance Table
Model 1: y ~ x1 + x2
Model 2: y ~ x1 + x2 + x1:x2
Res.Df RSS Df Sum of Sq F Pr(>F)
1 22 233.73
2 21 125.92 1 107.81 17.979 0.0003659 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod5 <-lm(y ~ x1 + x1:x2, data = dados)anova(mod5, mod4)
Analysis of Variance Table
Model 1: y ~ x1 + x1:x2
Model 2: y ~ x1 + x2 + x1:x2
Res.Df RSS Df Sum of Sq F Pr(>F)
1 22 143.72
2 21 125.92 1 17.797 2.968 0.09962 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod_nulo <-lm(y ~1, data = dados)anova(mod_nulo, mod)
Analysis of Variance Table
Model 1: y ~ 1
Model 2: y ~ x1 + x2
Res.Df RSS Df Sum of Sq F Pr(>F)
1 24 5784.5
2 22 233.7 2 5550.8 261.24 4.687e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Nas análises de resíduos é indicado usar o resíduo studentizado ou o resíduo R-Student. É esperado que os valores dos resíduos sejam uma amostra da distribuição \(t\) com \(n-p-1\) graus de liberdade. Para tamanho amostral suficientemente grande, pode-se comparar com a distribuição normal padrão.
Gráficos de resíduos
# Gráfico qqnormqqnorm(res_3)qqline(res_3, col ="blue", lwd =2)
# Gráfico de dispersão y_est x resíduosy_est <-fitted(mod)plot(y_est, res_3, xlim =c(0,80), ylim =c(-2,5),main ="Gráfico de dispersão y_est x resíduos",xlab ="y estimado",ylab ="Resíduos studentizados")
# Gráfico dos resíduos seguindo a ordem de coleta# ou execução dos dados# atenção: supondo que a coleta tenha sido na ordem da variável ID, o que nem sempre é verdade!plot(res_3 ~ dados$ID)
Testes para os resíduos
Normalidade dos resíduos
Alguns testes são: Qui-quadrado, Kolmogorov-Smirnov, Jarque-Bera, Shapiro-Wilk, Anderson-Darling, Cramér-von Mises, D’Agostino-Pearson, Lilliefors, e Shapiro-Francia.
# Teste de Shapiro-Wilkshapiro.test(res_3)
Shapiro-Wilk normality test
data: res_3
W = 0.92285, p-value = 0.05952
# Teste de Kolmogorov-Smirnovks.test(res_3, "pnorm", mean =0, sd =1)
Exact one-sample Kolmogorov-Smirnov test
data: res_3
D = 0.17188, p-value = 0.4052
alternative hypothesis: two-sided
Independência dos Resíduos
Alguns testes são: Durbin-Watson, Breusch-Godfrey e Ljung-Box.
Para testar a independência dos resíduos é necessário conhecer a ordem de coleta (ou execução) dos dados.
Supondo que a coleta dos dados tenha sido conforme a variável \(ID\) (no exemplo delivery time), então, o teste DW é:
library(lmtest)dwtest(res_3 ~ dados$ID, alternative ="two.sided")
Durbin-Watson test
data: res_3 ~ dados$ID
DW = 1.3994, p-value = 0.07306
alternative hypothesis: true autocorrelation is not 0
Homocedasticidade dos Resíduos
Alguns testes são: Bartlett, Breusch-Pagan, Levene, Samiuddin, O’Neill e Mathews, Layard, Park, White, Cochran, Hartley e Goldfeld-Quandt.
# Teste de Breusch-Pagan# library(lmtest)bptest(mod)
studentized Breusch-Pagan test
data: mod
BP = 11.988, df = 2, p-value = 0.002493
# é necessário verificar se a observação 9 é um outlier.# gráfico dos resíduosplot(res_3, main ="Resíduos studentizados",ylab ="Resíduos studentizados",xlab ="Observações")abline(h =2, col ="red", lty =2)abline(h =-2, col ="red", lty =2)
# Se for, de fato, um outlier, o que fazer?# Estimar novamente o modelo sem a observação 9.mod_2 <-lm(y ~ x1 + x2, data = dados[-9,])summary(mod_2)
Call:
lm(formula = y ~ x1 + x2, data = dados[-9, ])
Residuals:
Min 1Q Median 3Q Max
-4.0325 -1.2331 0.0199 1.4730 4.8167
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.447238 0.952469 4.669 0.000131 ***
x1 1.497691 0.130207 11.502 1.58e-10 ***
x2 0.010324 0.002854 3.618 0.001614 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.43 on 21 degrees of freedom
Multiple R-squared: 0.9487, Adjusted R-squared: 0.9438
F-statistic: 194.2 on 2 and 21 DF, p-value: 2.859e-14
# comparar os resultados dos dois modelos:summary(mod)
Call:
lm(formula = y ~ x1 + x2, data = dados)
Residuals:
Min 1Q Median 3Q Max
-5.7880 -0.6629 0.4364 1.1566 7.4197
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.341231 1.096730 2.135 0.044170 *
x1 1.615907 0.170735 9.464 3.25e-09 ***
x2 0.014385 0.003613 3.981 0.000631 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.259 on 22 degrees of freedom
Multiple R-squared: 0.9596, Adjusted R-squared: 0.9559
F-statistic: 261.2 on 2 and 22 DF, p-value: 4.687e-16
summary(mod_2)
Call:
lm(formula = y ~ x1 + x2, data = dados[-9, ])
Residuals:
Min 1Q Median 3Q Max
-4.0325 -1.2331 0.0199 1.4730 4.8167
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.447238 0.952469 4.669 0.000131 ***
x1 1.497691 0.130207 11.502 1.58e-10 ***
x2 0.010324 0.002854 3.618 0.001614 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.43 on 21 degrees of freedom
Multiple R-squared: 0.9487, Adjusted R-squared: 0.9438
F-statistic: 194.2 on 2 and 21 DF, p-value: 2.859e-14
res_4_mod_2 <-rstandard(mod_2, type ="pred")PRESS_mod_2 <-sum(res_4_mod_2^2)PRESS_mod_2
[1] 165.2484
# Comparar as estatísticas PRESSPRESS_mod
[1] 459.0393
PRESS_mod_2
[1] 165.2484
Pontos de alavancagem (leverage points)
Ponto de alavancagem é uma observação que tem valores incomuns nas variáveis preditoras \(x_i\), \(i=1,\cdots,k\), ou seja, é um ponto que está “longe” do centro de massa das demais observações no espaço das preditoras. Já um ponto influente é uma observação que, se removida do conjunto de dados, provoca uma mudança substancial nos resultados da análise (coeficientes estimados, valores preditos, erros padrão ou estatísticas de ajuste como \(R^2\)).
O valor de alavancagem \(\hat{h}_{ii}\) é o \(i\)-ésimo elemento da diagonal da matriz chapéu (hat matrix) \(H = X(X^TX)^{-1}X^T\). O valor de alavancagem é uma medida de quão longe a observação \(x_i\) está do centro das preditoras. O valor de alavancagem varia entre 0 e 1, e a média dos valores de alavancagem é dada por \(\bar{h} = \frac{p+1}{n}\), onde \(p\) é o número de preditores e \(n\) é o número de observações. Valores de alavancagem maiores que \(\frac{2p}{n}\) são merecem atenção.
# valores matriz Hp <-3# qde de parâmetros (b0, b1 e b2)#oup <-length(coef(mod))n <-25# qde de observaçoes# oun <-length(dados$y)2*p/n # limite para valores da matriz hat
[1] 0.24
h <-hatvalues(mod)cbind(dados, h, 2*p/n, h >2*p/n)
# observações 9 e 22 são possíveis pontos de alavancagem.
Distância de Cook
A distância de Cook é uma medida que combina a alavancagem e o resíduo para avaliar a influência de cada observação no ajuste do modelo. Ela é calculada como: \[D_i = \frac{(\hat{\boldsymbol{\beta}} - \hat{\boldsymbol{\beta}}_{(-i)})^T (X^TX) (\hat{\boldsymbol{\beta}} - \hat{\boldsymbol{\beta}}_{(-i)})}{(p+1)\hat{\sigma}^2}.\]
# Distância de CookD <-cooks.distance(mod)# comparar com o valor 1# Se D > 1, a observação é considerada um ponto influente.cbind(dados, D, 1, D >1)
A medida DFBETAS (do inglês Difference in Betas) avalia a influência de cada observação em cada coeficiente estimado. Ela é calculada como: \[\text{DFBETAS}_{ij} = \frac{\hat{\beta}_j - \hat{\beta}_{j(-i)}}{\hat{\sigma}_{(-i)} \sqrt{(X^TX)^{-1}_{jj}}},\] em que \(\hat{\beta}_j\) é o coeficiente estimado para o preditor \(j\) usando todos os dados, \(\hat{\beta}_{j(-i)}\) é o coeficiente estimado para o preditor \(j\) quando a observação \(i\) é removida, e \(\hat{\sigma}_{(-i)}\) é a estimativa do desvio padrão dos resíduos quando a observação \(i\) é removida. Valores absolutos de DFBETAS maiores que \(2/\sqrt{n}\) indicam que a observação tem uma influência significativa no coeficiente estimado.
# DFBETAS# a influência de cada observação em cada coeficiente# comparar com o valor 2/sqrt(n)dfbetas(mod)
A medida DFFITS (do inglês Difference in Fits) avalia a influência de cada observação em cada predição. Ela é calculada como: \[\text{DFFITS}_i = \frac{\hat{Y}_i - \hat{Y}_{i(-i)}}{\hat{\sigma}_{(-i)} \sqrt{\hat{h}_{ii}}},\] em que \(\hat{Y}_i\) é o valor predito para a observação \(i\) usando todos os dados, \(\hat{Y}_{i(-i)}\) é o valor predito para a observação \(i\) quando a observação \(i\) é removida, \(\hat{\sigma}_{(-i)}\) é a estimativa do desvio padrão dos resíduos quando a observação \(i\) é removida, e \(\hat{h}_{ii}\) é o valor de alavancagem para a observação \(i\). Valores absolutos de DFFITS maiores que \(2\sqrt{p/n}\) indicam que a observação tem uma influência significativa na predição.
# DFFITS# a influência de cada observação em cada predição# comparar com o valor 2*sqrt(p/n)dffits(mod)