rm(list=ls(all=T))
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 561883 30.1 1283252 68.6 644254 34.5
Vcells 997387 7.7 8388608 64.0 1635074 12.5
Aluno
: Paulo Manoel da Silva Junior
Matrícula
: 20190041314
\[f(y;\lambda) = \frac{\lambda^{y}}{(e^\lambda - 1)y!},\]
em que \(y = 0,1,2,3,...., \quad \lambda >0\) pertence à família exponencial \((f(y) = \exp[\phi\left \{ y\theta - b(\theta) \right \} + c(y;\theta)])\).
Aplicando a família exponencial e as propriedades do log, temos:
\[= \exp \left \{ y \log \lambda - \log(\exp^\lambda-1) + \log y!\right \}\]
\[= \ \exp \left\{ 1 \times ( y \log \lambda - \log (\exp^\lambda - 1) + \log y! \right \}\]
Logo, vemos que: \(\phi = 1\), \(\theta = \log \lambda\), \(b(\theta) = \log (\exp^\lambda - 1)\) e \(c(y, \phi) = \log y!\).
Sendo assim, conclui-se que a Poisson Truncada pertence à família exponencial e pode ser utilizado no MLG.
número
de bactérias sobreviventes em amostras de um produto alimentício segundo o tempo
(em minutos) de exposição do produto a uma temperatura de 300 ◦FNúmero | 175 | 108 | 95 | 82 | 71 | 50 | 49 | 31 | 28 | 17 | 16 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Tempo | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
rm(list=ls(all=T))
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 561883 30.1 1283252 68.6 644254 34.5
Vcells 997387 7.7 8388608 64.0 1635074 12.5
<- c(175,108,95,82,71,50,49,31,28,17,16,11)
numero <- c(1:12)
tempo <- data.frame(numero, tempo) data
::skim(data) skimr
Name | data |
Number of rows | 12 |
Number of columns | 2 |
_______________________ | |
Column type frequency: | |
numeric | 2 |
________________________ | |
Group variables | None |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
numero | 0 | 1 | 61.08 | 48.26 | 11 | 25.25 | 49.5 | 85.25 | 175 | ▇▅▅▁▂ |
tempo | 0 | 1 | 6.50 | 3.61 | 1 | 3.75 | 6.5 | 9.25 | 12 | ▇▅▅▅▇ |
::Desc(data, plotit = F, digits = 3) DescTools
------------------------------------------------------------------------------
Describe data (data.frame):
data frame: 12 obs. of 2 variables
12 complete cases (100.0%)
Nr ColName Class NAs Levels
1 numero numeric .
2 tempo integer .
------------------------------------------------------------------------------
1 - numero (numeric)
length n NAs unique 0s mean meanCI'
12 12 0 = n 0 61.083 30.422
100.0% 0.0% 0.0% 91.745
.05 .10 .25 median .75 .90 .95
13.750 16.100 25.250 49.500 85.250 106.700 138.150
range sd vcoef mad IQR skew kurt
164.000 48.258 0.790 48.184 60.000 0.935 -0.065
value freq perc cumfreq cumperc
1 11 1 8.3% 1 8.3%
2 16 1 8.3% 2 16.7%
3 17 1 8.3% 3 25.0%
4 28 1 8.3% 4 33.3%
5 31 1 8.3% 5 41.7%
6 49 1 8.3% 6 50.0%
7 50 1 8.3% 7 58.3%
8 71 1 8.3% 8 66.7%
9 82 1 8.3% 9 75.0%
10 95 1 8.3% 10 83.3%
11 108 1 8.3% 11 91.7%
12 175 1 8.3% 12 100.0%
' 95%-CI (classic)
------------------------------------------------------------------------------
2 - tempo (integer)
length n NAs unique 0s mean meanCI'
12 12 0 = n 0 6.500 4.209
100.0% 0.0% 0.0% 8.791
.05 .10 .25 median .75 .90 .95
1.550 2.100 3.750 6.500 9.250 10.900 11.450
range sd vcoef mad IQR skew kurt
11.000 3.606 0.555 4.448 5.500 0.000 -1.502
value freq perc cumfreq cumperc
1 1 1 8.3% 1 8.3%
2 2 1 8.3% 2 16.7%
3 3 1 8.3% 3 25.0%
4 4 1 8.3% 4 33.3%
5 5 1 8.3% 5 41.7%
6 6 1 8.3% 6 50.0%
7 7 1 8.3% 7 58.3%
8 8 1 8.3% 8 66.7%
9 9 1 8.3% 9 75.0%
10 10 1 8.3% 10 83.3%
11 11 1 8.3% 11 91.7%
12 12 1 8.3% 12 100.0%
' 95%-CI (classic)
É observardo que a variável resposta é o número de bactérias sobreviventes.
::ggplot(data, ggplot2::aes(x = numero))+
ggplot2::geom_histogram(fill='white',
ggplot2color = "blue",
breaks = hist(data$numero, plot = F)$breaks) + ggplot2::xlab("Número") + ggplot2::ylab("Frequência") + ggplot2::ggtitle("Histograma do Número de Bactérias")
hist(data$numero, xlab = "Número", ylab = "Frequência", main = "Histograma do número de bactérias")
<-glm(numero ~ tempo, family = poisson(link=log), data = data)
fit1<-glm(numero ~ tempo, family = poisson(link=sqrt), data = data)
fit2<-glm(numero ~ tempo, family = poisson(link=identity), data = data) fit3
Vamos verificar a adequação dos modelos. Se \(\frac{D (y;\mu)}{\phi} \leq \chi^2_{n-p;1-\alpha}\) , o modelo em investigação é aceito.
Fixando o \(\alpha = 0.05\)
<-summary(fit1)$dispersion
phi1<-summary(fit1)$deviance/phi1 # log
desvio1<-qchisq(0.95,summary(fit1)$df.residual)
q.quadr1
<-summary(fit2)$dispersion
phi2<-summary(fit2)$deviance/phi2 # sqrt
desvio2<-qchisq(0.95,summary(fit2)$df.residual)
q.quadr2
<-summary(fit3)$dispersion
phi3<-summary(fit3)$deviance/phi3 # identidade
desvio3<-qchisq(0.95,summary(fit3)$df.residual) q.quadr3
Verificando se todos os modelos foram aceitos:
Modelo 1 | Modelo 2 | Modelo 3 | |
---|---|---|---|
Desvio/\(\phi\) | 8.4215055 | 15.6463184 | 45.9830251 |
\(\chi^2\) | 18.3070381 | 18.3070381 | 18.3070381 |
É observardo que o modelo com a função de ligação identidade não é aceito, pois o resultado do \(D (y;\mu)/ \phi\) foi maior que o quantil, ou seja: 45.983 > 18.307. Logo, prosseguiremos analisando apenas a log e sqrt.
Vamos então fazer a escolha da função de ligação utilizando o gráfico dos valores observados \((y_i)\) versus valores estimados \((\hat\mu_i)\).
<-fitted(fit1)
va1<-fitted(fit2)
va2<-numero y
<- ggplot2::ggplot(data, ggplot2::aes(x=va1,y=y))+
g1 ::geom_point(size=4, color = "#e7ad52")+
ggplot2::ylim(0,180) + ggplot2::xlim(0,180) + ggplot2::ggtitle("Log")
ggplot2<- g1+ ggplot2::geom_abline(intercept = 0, slope = 1, color = "#001132")+
G1 ::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(data, ggplot2::aes(x=va2,y=y))+
g2 ::geom_point(size=4, color = "#e7ad52")+
ggplot2::ylim(0,180) + ggplot2::xlim(0,180) +
ggplot2::ggtitle("Sqrt")
ggplot2<- g2+ ggplot2::geom_abline(intercept = 0, slope = 1, color = "#001132")+
G2 ::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
::grid.arrange(G1,G2, nrow = 1, ncol = 2) gridExtra
De acordo com a análise gráfica é observado que a função de ligação Log visualmente parece estar melhor adequada do que com a função sqrt.
<- boot::glm.diag(fit1)$rd
rd1 <- boot::glm.diag(fit2)$rd rd2
<- ggplot2::ggplot(data, ggplot2::aes(sample = rd1))+
q1 ::stat_qq(size=4, color = "#e7ad52")+
ggplot2::ylim(-4,4) + ggplot2::xlim(-4,4) +
ggplot2::stat_qq_line(colour = "#001132") +
ggplot2::ggtitle("Log")+
ggplot2::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(data, ggplot2::aes(sample = rd2))+
q2 ::stat_qq(size=4, color = "#e7ad52")+
ggplot2::ylim(-4,4) + ggplot2::xlim(-4,4) +
ggplot2::stat_qq_line(colour = "#001132") +
ggplot2::ggtitle("Sqrt")+
ggplot2::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
::grid.arrange(q1, q2, nrow = 1, ncol = 2) gridExtra
Conforme observado na análise gráfica a função de variância Log leva vantagem no exemplo considerado a função de variância sqrt, onde boa parte dos pontos estão mais próximos da reta do que com a função sqrt.
<- glm(numero~tempo, family = poisson(log), data = data)
fit summary(fit)
Call:
glm(formula = numero ~ tempo, family = poisson(log), data = data)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.7703 -0.5715 -0.1019 0.5496 1.2794
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.30557 0.06348 83.58 <2e-16 ***
tempo -0.22890 0.01270 -18.02 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 393.6292 on 11 degrees of freedom
Residual deviance: 8.4215 on 10 degrees of freedom
AIC: 80.182
Number of Fisher Scoring iterations: 4
\[log_{\mu_i} = 5.3056 -0.2289\times tempo_i\]
Conforme temos o acréscimo de uma unidade na quantidade de tempo, vamos ter uma diminuição de \(0.22890\) valor do log da quantidade média de bactérias.
<-summary(fit)
ajuste::kable(ajuste$coefficients) knitr
Estimate | Std. Error | z value | Pr(>|z|) | |
---|---|---|---|---|
(Intercept) | 5.3055715 | 0.0634827 | 83.57504 | 0 |
tempo | -0.2288956 | 0.0126999 | -18.02336 | 0 |
=as.vector(1:length(numero))
indice<- boot::glm.diag(fit)$rd
rd <- ggplot2::ggplot(data, ggplot2::aes(x=indice, y=rd)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = -2, slope = 0, color='#001132')+ ggplot2::geom_abline(intercept = 2, slope = 0, color='#001132') + ggplot2::ylim(-4,4) + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
rd1 rd1
Visualmente, é observado que um ponto parece estar fora dos limites estabelecidos, sendo assim um possível ponto aberrante, no qual é a observação de número 2.
which(rd>2 | rd < -2),] data[
numero tempo
2 108 2
<- boot::glm.diag(fit)$h
h<- ggplot2::ggplot(data, ggplot2::aes(x=indice, y=h)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = 2*(length(coef(fit))/length(numero)), slope = 0, color='#001132') + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
h3 h3
Foi encontrado um ponto de alavanca, que é a observação de número 1. Sendo as observações deste ponto de alavanca
which(h>2*(length(coef(fit))/length(numero))),] data[
numero tempo
1 175 1
<-boot::glm.diag(fit)$cook
DC<- ggplot2::ggplot(data, ggplot2::aes(x=indice, y=DC)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = qchisq(0.05,length(coef(fit)))/2, slope = 0, color='#001132') + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
dc dc
Como o nível de significância foi fixado bem mais acima sendo 5%, encontramos 4 pontos de influência, que são as observações de número 1, 2, 7 e 10. E os valores associados estão descritos a seguir.
which(DC>qchisq(0.05,length(coef(fit)))/2),] data[
numero tempo
1 175 1
2 108 2
7 49 7
10 17 10
De acordo com a natureza do problema, pode ser averiguado para se tomar a melhor decisão para com estes pontos.
defects.txt
indica a temperatura do processo de produção, a densidade do produto, taxa de produção e a média do número de defeitos nos produtos (variável resposta).rm(list=ls(all=T))
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 2279570 121.8 4367068 233.3 4367068 233.3
Vcells 3916767 29.9 8388608 64.0 6614368 50.5
setwd("C:/Users/Pessoal/Desktop/ESTATÍSTICA/UFPB/8º PERÍODO/REGRESSÃO 2/PROVA 1")
<- read.table("defects.txt", sep = ",", col.names = c("temperatura", "densidade", "taxa", "defeitos"), header = F) dados
::skim(dados) skimr
Name | dados |
Number of rows | 30 |
Number of columns | 4 |
_______________________ | |
Column type frequency: | |
numeric | 4 |
________________________ | |
Group variables | None |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
temperatura | 0 | 1 | 2.20 | 0.58 | 0.97 | 1.76 | 2.26 | 2.72 | 3.02 | ▂▅▃▆▇ |
densidade | 0 | 1 | 25.29 | 3.36 | 19.45 | 22.82 | 24.62 | 27.48 | 32.19 | ▃▇▅▃▃ |
taxa | 0 | 1 | 236.52 | 26.05 | 177.70 | 221.28 | 238.50 | 253.88 | 281.90 | ▂▃▇▇▃ |
defeitos | 0 | 1 | 27.14 | 19.41 | 0.10 | 10.62 | 26.15 | 43.85 | 60.80 | ▇▅▃▆▅ |
::Desc(dados, plotit = F, digits = 3) DescTools
------------------------------------------------------------------------------
Describe dados (data.frame):
data frame: 30 obs. of 4 variables
30 complete cases (100.0%)
Nr ColName Class NAs Levels
1 temperatura numeric .
2 densidade numeric .
3 taxa numeric .
4 defeitos numeric .
------------------------------------------------------------------------------
1 - temperatura (numeric)
length n NAs unique 0s mean meanCI'
30 30 0 29 0 2.203 1.985
100.0% 0.0% 0.0% 2.421
.05 .10 .25 median .75 .90 .95
1.252 1.459 1.765 2.260 2.720 2.857 2.936
range sd vcoef mad IQR skew kurt
2.050 0.583 0.265 0.719 0.955 -0.416 -1.012
lowest : 0.970, 1.090, 1.450, 1.460, 1.500
highest: 2.840, 2.850, 2.920, 2.950, 3.020
' 95%-CI (classic)
------------------------------------------------------------------------------
2 - densidade (numeric)
length n NAs unique 0s mean meanCI'
30 30 0 = n 0 25.289 24.034
100.0% 0.0% 0.0% 26.543
.05 .10 .25 median .75 .90 .95
20.870 21.536 22.817 24.615 27.475 30.079 31.459
range sd vcoef mad IQR skew kurt
12.740 3.359 0.133 3.113 4.658 0.448 -0.737
lowest : 19.450, 20.650, 21.140, 21.580, 22.300
highest: 29.420, 30.010, 30.700, 32.080, 32.190
' 95%-CI (classic)
------------------------------------------------------------------------------
3 - taxa (numeric)
length n NAs unique 0s mean meanCI'
30 30 0 29 0 236.517 226.789
100.0% 0.0% 0.0% 246.244
.05 .10 .25 median .75 .90 .95
186.530 206.390 221.275 238.500 253.875 266.390 273.040
range sd vcoef mad IQR skew kurt
104.200 26.051 0.110 24.018 32.600 -0.488 -0.402
lowest : 177.700, 181.400, 192.800, 207.900, 210.800
highest: 260.000, 265.700, 272.600, 273.400, 281.900
' 95%-CI (classic)
------------------------------------------------------------------------------
4 - defeitos (numeric)
length n NAs unique 0s mean meanCI'
30 30 0 = n 0 27.143 19.896
100.0% 0.0% 0.0% 34.391
.05 .10 .25 median .75 .90 .95
0.785 2.130 10.625 26.150 43.850 51.350 57.215
range sd vcoef mad IQR skew kurt
60.700 19.408 0.715 25.427 33.225 0.110 -1.403
lowest : 0.100, 0.200, 1.500, 2.200, 2.800
highest: 49.700, 50.900, 55.400, 58.700, 60.800
' 95%-CI (classic)
::ggplot(dados, ggplot2::aes(x = defeitos))+
ggplot2::geom_histogram(fill='white',
ggplot2color = "blue",
breaks = hist(dados$defeitos, plot = F)$breaks) + ggplot2::xlab("Número médio de defeitos") + ggplot2::ylab("Frequência") + ggplot2::ggtitle("Histograma do Número médio de defeitos")
hist(dados$defeitos, xlab = "Número médio de defeitos", ylab = "Frequência", main = "Histograma do número médio de defeitos")
attach(dados)
<-glm(defeitos ~ temperatura + densidade + taxa, family = gaussian(link=identity), data = dados)
fit1<-glm(defeitos ~ temperatura + densidade + taxa, family = gaussian(link=log), data = dados)
fit2<-glm(defeitos ~ temperatura + densidade + taxa, family = gaussian(link=inverse), data = dados) fit3
Vamos verificar a adequação dos modelos. Se \(\frac{D(y;\mu)}{\phi} \leq \chi^2_{n-p;1-\alpha}\) , o modelo em investigação é aceito.
Fixando o \(\alpha = 0.05\)
<-summary(fit1)$dispersion
phi1<-summary(fit1)$deviance/phi1 # identidade
desvio1<-qchisq(0.95,summary(fit1)$df.residual)
q.quadr1
<-summary(fit2)$dispersion
phi2<-summary(fit2)$deviance/phi2 # log
desvio2<-qchisq(0.95,summary(fit2)$df.residual)
q.quadr2
<-summary(fit3)$dispersion
phi3<-summary(fit3)$deviance/phi3 # inversa
desvio3<-qchisq(0.95,summary(fit3)$df.residual) q.quadr3
Verificando se todos os modelos foram aceitos:
Modelo 1 | Modelo 2 | Modelo 3 | |
---|---|---|---|
Desvio/\(\phi\) | 26 | 26.0006548 | 26.0013959 |
\(\chi^2\) | 38.8851387 | 38.8851387 | 38.8851387 |
É verificado que todos os modelos foram aceitos
Vamos então fazer a escolha da função de ligação utilizando o gráfico dos valores observados \((y_i)\) versus valores estimados \((\hat\mu_i)\).
<-fitted(fit1)
va1<-fitted(fit2)
va2<-fitted(fit3)
va3<-defeitos y
<- ggplot2::ggplot(dados, ggplot2::aes(x=va1,y=y))+
g1 ::geom_point(size=4, color = "#e7ad52")+
ggplot2::ylim(0,100) + ggplot2::xlim(-20,80) + ggplot2::ggtitle("Identidade")
ggplot2<- g1+ ggplot2::geom_abline(intercept = 0, slope = 1, color = "#001132")+
G1 ::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(dados, ggplot2::aes(x=va2,y=y))+
g2 ::geom_point(size=4, color = "#e7ad52")+
ggplot2::ylim(0,100) + ggplot2::xlim(0,80) +
ggplot2::ggtitle("Log")
ggplot2<- g2+ ggplot2::geom_abline(intercept = 0, slope = 1, color = "#001132")+
G2 ::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(dados, ggplot2::aes(x=va3,y=y))+
g3 ::geom_point(size=4, color = "#e7ad52")+
ggplot2::ylim(0,100) + ggplot2::xlim(0,80)+
ggplot2::ggtitle("Inversa")
ggplot2<- g3+ ggplot2::geom_abline(intercept = 0, slope = 1, color = "#001132")+
G3 ::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
::grid.arrange(G1,G2,G3, nrow = 1, ncol = 3) gridExtra
De acordo com a análise gráfica é observado que a função de identidade visualmente parece estar melhor adequada as outras duas funções de ligação
<- boot::glm.diag(fit1)$rd
rd1 <- boot::glm.diag(fit2)$rd
rd2 <- boot::glm.diag(fit3)$rd rd3
<- ggplot2::ggplot(dados, ggplot2::aes(sample = rd1))+
q1 ::stat_qq(size=4, color = "#e7ad52")+
ggplot2::ylim(-4,4) + ggplot2::xlim(-4,4) +
ggplot2::stat_qq_line(colour = "#001132") +
ggplot2::ggtitle("Identidade")+
ggplot2::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(dados, ggplot2::aes(sample = rd2))+
q2 ::stat_qq(size=4, color = "#e7ad52")+
ggplot2::ylim(-4,4) + ggplot2::xlim(-4,4) +
ggplot2::stat_qq_line(colour = "#001132") +
ggplot2::ggtitle("Log")+
ggplot2::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
<- ggplot2::ggplot(dados, ggplot2::aes(sample = rd3))+
q3 ::stat_qq(size=4, color = "#e7ad52")+
ggplot2::ylim(-4,4) + ggplot2::xlim(-4,4) +
ggplot2::stat_qq_line(colour = "#001132") +
ggplot2::ggtitle("Inversa")+
ggplot2::theme(axis.title.x = ggplot2::element_text(colour = "#001132"),
ggplot2axis.text.x = ggplot2::element_text(colour = "#001132"),
axis.title.y = ggplot2::element_text(colour = "#001132"),
axis.text.y = ggplot2::element_text(colour = "#001132"))
::grid.arrange(q1, q2, q3, nrow = 1, ncol = 3) gridExtra
Vamos utilizar a função de ligação identidade no modelo ajustado, pois, conforme a análise gráfica pareceu estar melhor ajustada principalmente levando em consideração o gráfico da função de ligação.
Vamos considerar a utilização da regressão StepWise para encontrar o melhor modelo de acordo com o menor AIC.
<- glm(defeitos ~ 1, family = gaussian(link = identity), data = dados)
menor <- glm(defeitos ~ temperatura + densidade + taxa ,data = dados, family = gaussian(link = identity))
maior step(menor, scope = list(upper = maior), direction = "both")
Start: AIC=266.06
defeitos ~ 1
Df Deviance AIC
+ temperatura 1 1496.9 208.43
+ densidade 1 1612.5 210.67
+ taxa 1 2364.3 222.15
<none> 10923.9 266.06
Step: AIC=208.43
defeitos ~ temperatura
Df Deviance AIC
+ densidade 1 1354.8 207.44
+ taxa 1 1389.7 208.21
<none> 1496.9 208.43
- temperatura 1 10923.9 266.06
Step: AIC=207.44
defeitos ~ temperatura + densidade
Df Deviance AIC
<none> 1354.8 207.44
- densidade 1 1496.8 208.43
+ taxa 1 1314.4 208.53
- temperatura 1 1612.5 210.67
Call: glm(formula = defeitos ~ temperatura + densidade, family = gaussian(link = identity),
data = dados)
Coefficients:
(Intercept) temperatura densidade
46.238 18.050 -2.327
Degrees of Freedom: 29 Total (i.e. Null); 27 Residual
Null Deviance: 10920
Residual Deviance: 1355 AIC: 207.4
Conforme o resultado do método stepwise, levando em consideração o critério do AIC, ficamos com apenas temperatura
e densidade
como variáveis independentes no ajuste a ser feito.
<- glm(defeitos ~ temperatura + densidade, family = gaussian(link=identity), data = dados)
fit summary(fit)
Call:
glm(formula = defeitos ~ temperatura + densidade, family = gaussian(link = identity),
data = dados)
Deviance Residuals:
Min 1Q Median 3Q Max
-14.2233 -4.2245 -0.5605 3.8984 15.5638
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.238 52.066 0.888 0.3823
temperatura 18.050 7.965 2.266 0.0317 *
densidade -2.327 1.383 -1.683 0.1040
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 50.1779)
Null deviance: 10923.9 on 29 degrees of freedom
Residual deviance: 1354.8 on 27 degrees of freedom
AIC: 207.44
Number of Fisher Scoring iterations: 2
O modelo ajustado, tem como equação:
\[defeitos_i = 46.24 + 18.05\times temperatura_i -2.33 \times densidade_i \]
Ao aumentarmos a temperatura do processo de produção, o número médio de defeitos nos produtos aumenta 18.05.
Se aumentarmos a quantidade da densidade do produto, diminuirá o número médio nos produtos em 2.327.
<-summary(fit)
ajuste::kable(ajuste$coefficients) knitr
Estimate | Std. Error | t value | Pr(>|t|) | |
---|---|---|---|---|
(Intercept) | 46.237985 | 52.065528 | 0.8880729 | 0.3823449 |
temperatura | 18.049940 | 7.965269 | 2.2660803 | 0.0316738 |
densidade | -2.327472 | 1.383311 | -1.6825371 | 0.1039958 |
<- boot::glm.diag(fit)$rd
rd <-nortest::lillie.test(rd)
teste1<-shapiro.test(rd) teste2
Teste 1 | Teste 2 | |
---|---|---|
p-valor | 0.4610346 | 0.5846342 |
Podemos observar pela tabela acima que os resíduos são normais. Também podemos verificar a normalidade através do gráfico qq-plot.
<- ggplot2::ggplot(dados, ggplot2::aes(sample=rd))+
q1 ::stat_qq(size=4, color="#e7ad52") + ggplot2::ylim(-4, 4) + ggplot2::xlim(-4, 4) +
ggplot2::stat_qq_line(colour = '#001132')+ ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
ggplot2 q1
É comprovado através dos testes e da análise gráfica que os resíduos são distribuidos normalmente.
=as.vector(1:length(defeitos))
indice<- ggplot2::ggplot(dados, ggplot2::aes(x=indice, y=rd)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = -2, slope = 0, color='#001132')+ ggplot2::geom_abline(intercept = 2, slope = 0, color='#001132') + ggplot2::ylim(-4,4) + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
rd1 rd1
Visualmente, é observado que duas observações parecem estar fora dos limites estabelecidos, sendo assim dois possíveis pontos aberrante, no qual é a observação de número 4 e 28.
which(rd>2 | rd < -2),] dados[
temperatura densidade taxa defeitos
4 2.36 26.3 222.1 13.4
28 2.82 22.3 253.2 60.8
<- boot::glm.diag(fit)$h
h<- ggplot2::ggplot(dados, ggplot2::aes(x=indice, y=h)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = 2*(length(coef(fit))/length(defeitos)), slope = 0, color='#001132') + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
h3 h3
Foi encontrado um ponto de alavanca, que é a observação de número 14. Sendo as observações deste ponto de alavanca:
which(h>2*(length(coef(fit))/length(defeitos))),] dados[
temperatura densidade taxa defeitos
14 2.73 24.85 251.9 37.6
<-boot::glm.diag(fit)$cook
DC<- ggplot2::ggplot(dados, ggplot2::aes(x=indice, y=DC)) + ggplot2::geom_point(size=4, color='#e7ad52') + ggplot2::geom_abline(intercept = qchisq(0.05,length(coef(fit)))/2, slope = 0, color='#001132') +
dc ::ylim(0,0.5) + ggplot2::theme(axis.title.x = ggplot2::element_text(colour = '#001132'), axis.text.x = ggplot2::element_text(colour = '#001132'), axis.title.y = ggplot2::element_text(colour = '#001132'), axis.text.y = ggplot2::element_text(colour = '#001132'))
ggplot2 dc
Conforme observamos acima, há dois pontos de influência, que são as observações de número 1 e 4. Sendo os valores das observações:
which(DC>qchisq(0.05,length(coef(fit)))/2),] dados[
temperatura densidade taxa defeitos
1 0.97 32.08 177.7 0.2
4 2.36 26.30 222.1 13.4