Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
mpaer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Harbor Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Walmes Marques Zeviani
mpaer
Commits
a170ccb6
Commit
a170ccb6
authored
5 years ago
by
Walmes Marques Zeviani
Browse files
Options
Downloads
Patches
Plain Diff
Improves last section of chapter.
parent
154b35f2
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
04-dql.Rmd
+81
-63
81 additions, 63 deletions
04-dql.Rmd
with
81 additions
and
63 deletions
04-dql.Rmd
+
81
−
63
View file @
a170ccb6
...
@@ -746,14 +746,28 @@ experimentos planejados.
...
@@ -746,14 +746,28 @@ experimentos planejados.
O conjunto de dados que será análise registrou a proporção de hastes
O conjunto de dados que será análise registrou a proporção de hastes
sobreviventes ao ataque de pragas em um experimento quadrado latino $11
sobreviventes ao ataque de pragas em um experimento quadrado latino $11
\times 11$ que avaliou o efeito de inseticidas para controle da
\times 11$ que avaliou o efeito de inseticidas para controle da praga. A
praga. Os dados já são a proporção amostral de hastes sobreviventes,
resposta é a proporção amostral de hastes sobreviventes, em algum
portanto, não se conhece o numerador e denominador que produziram tal
momento calculada pelo quociente do número de hastes sobreviventes ($y$,
razão. Em experimentos como esse é importante ter o registro do par de
numerador) pelo total de hastes avaliadas ($n$, denominador). O ideal é
variáveis: total de hastes sobreviventes ($y$) e total de hastes sobre
que se registre o par $y$ e $n$, mesmo que ele seja constante para todas
exposição ($n$). Com esse par pode-se declarar uma variável com
as unidades experimentais pois o $n$ determina a previsão das
distribuição que geralmente é considerado apropriado se assumidas certas
estimativas de proporção. Com esse par pode-se declarar uma variável com
suposições.
distribuição Binomial que geralmente é considerada apropriada se
assumidas certas suposições.
O experimento tinha 4 unidades amostrais por cela experimental, o que
perfaz um vetor de valores observados de tamanho $11 \times 11 \times 4
= 484$. Para a análise, no entanto, será feita a agregação por unidade
experimental usando a média das 4 unidades amostrais. Poderia-se fazer a
análise sem agregração, mas isso demandaria um modelo de efeitos
aleatórios para dissociar o erro entre unidades experimentais do erro
entre unidades amostrais.
O gráfico abaixo indica haver alguma efeito do inseticida sobre a
proporção de hastes sobreviventes. A variabilidade é bem pronunciada, de
forma que talvez seja detectável diferença apenas entre os tratamentos
extremos.
```{r}
```{r}
# help(ZimmermannTb5.11, package = "labestData", help_type = "html")
# help(ZimmermannTb5.11, package = "labestData", help_type = "html")
...
@@ -762,12 +776,14 @@ suposições.
...
@@ -762,12 +776,14 @@ suposições.
da <- labestData::ZimmermannTb5.11
da <- labestData::ZimmermannTb5.11
str(da)
str(da)
db <- da %>%
group_by(linha, coluna, inset) %>%
summarise(prop = mean(prop))
# Análise exploratória.
# Análise exploratória.
ggplot(data = d
a
,
ggplot(data = d
b
,
mapping = aes(x = reorder(inset, prop),
mapping = aes(x = reorder(inset, prop),
y = prop,
y = prop)) +
color = linha,
size = coluna)) +
geom_jitter(width = 0.15, show.legend = FALSE) +
geom_jitter(width = 0.15, show.legend = FALSE) +
stat_summary(mapping = aes(group = 1),
stat_summary(mapping = aes(group = 1),
geom = "line",
geom = "line",
...
@@ -775,6 +791,10 @@ ggplot(data = da,
...
@@ -775,6 +791,10 @@ ggplot(data = da,
show.legend = FALSE)
show.legend = FALSE)
```
```
A análise que será feita assumirá a especificação Quasi-Binomial. Para
isso, embora o $n$ seja desconhecido, será assumido que é igual para
todas as observações.
O modelo estatístico para esse experimento é
O modelo estatístico para esse experimento é
$$
$$
\begin{aligned}
\begin{aligned}
...
@@ -790,72 +810,72 @@ em que:
...
@@ -790,72 +810,72 @@ em que:
* $\theta_{ijk} \in (0, 1)$ é a proporção de sobrevivência na condição
* $\theta_{ijk} \in (0, 1)$ é a proporção de sobrevivência na condição
$ijk$,
$ijk$,
* $n_{ijk}$ é o número total de hastes expostas na condição $ijk$ e
* $n_{ijk}$ é o número total de hastes expostas na condição $ijk$ e
* $\phi > 0$ é o parâmetro de dispersão que acomoda a variação das
* $\phi > 0$ é o parâmetro de dispersão que acomoda a variação não
observações ao redor desse valor médio. Com base na especificação
explicada nas observações ao redor do valor central $\theta_{ijk}$.
Quasi-Binomial, $\text{Var}(Y) \propto \phi \theta (1 - \theta)$.
* Com base na especificação Quasi-Binomial, tem-se que os dois
* $g(.)$ é a função de ligação. A função de ligação canônica para a
primeiros momentos são $\text{E}(Y_{ijk}) = n_{ijk} \theta_{ijk}$ e
Quasi-Binomial é a logit.
$\text{Var}(Y_{ijk}) = \phi n_{ijk} \theta_{ijk} (1 -
\theta_{ijk})$.
* $g(.)$ é a função de ligação. A função de ligação canônica é a
logit.
* $\alpha_i$ é o efeito da linha $i$ (fator qualitativo),
* $\alpha_i$ é o efeito da linha $i$ (fator qualitativo),
* $\beta_j$ é o efeito da coluna $j$ (fator qualitativo) e
* $\beta_j$ é o efeito da coluna $j$ (fator qualitativo) e
* $\tau_j$ o efeito da variedade $j$ (fator qualitativo) sobre a
* $\tau_j$ o efeito da variedade $j$ (fator qualitativo) sobre a
variável resposta $Y$ para a qual deseja-se testar a hipótese nula
variável resposta $Y$ para a qual deseja-se testar a hipótese nula
$H_0: \tau_j = 0$ para todo $j$.
$H_0: \tau_j = 0$ para todo $j$.
```{r}
Antes de declarar o modelo Quasi-Binomial, será averiguado como o modelo
Gaussiano tem os pressupostos não atendidos. Uma das características
desse material é mostrar formas alternativas de análise sempre que
possível para ampliar o conhecimento do leitor.
```{r, results = "hide", fig.show = "hide"}
# Ajusta o modelo aos dados. Resposta: proporção de sobreviventes.
# Ajusta o modelo aos dados. Resposta: proporção de sobreviventes.
m
0
<- lm(prop ~ linha + coluna + inset,
m
1
<- lm(prop ~ linha + coluna + inset,
data = db)
data = db)
# Diganóstico dos resíduos.
par(mfrow = c(1, 2))
plot(m0, which = 2:3)
layout(1)
# ATTENTION: Box-Cox não resolve problemas de relação média-variância
# decrescente.
# Modelo o complementar. Resposta: proporção de não sobreviventes.
# Modelo o complementar. Resposta: proporção de não sobreviventes.
m
0
<- lm(c(1 - prop) ~ linha + coluna + inset,
m
2
<- lm(c(1 - prop) ~ linha + coluna + inset,
data = db)
data = db)
# Diganóstico dos resíduos.
par(mfrow = c(1, 2))
plot(m0, which = 2:3)
layout(1)
# Indica lambda para aplicar transformação Box-Cox.
# Indica lambda para aplicar transformação Box-Cox.
MASS::boxcox(m0)
MASS::boxcox(m0)
abline(v = 1/3, col = "red")
abline(v = 1/3, col = "red")
# Aplicando a transformação Box-Cox.
m3 <- lm(c(1 - prop)^(1/3) ~ linha + coluna + inset,
data = db)
# Transformação arco seno da raíz quadrada da proporção amostral. É a
# Transformação arco seno da raíz quadrada da proporção amostral. É a
# transformação estabilizadora da variância quando a variável resposta
# transformação estabilizadora da variância quando a variável resposta
# tem distribuição binomial.
# tem distribuição binomial.
db$asinsqrt <- asin(sqrt(db$prop))
db$asinsqrt <- asin(sqrt(db$prop))
m
0
<- lm(asinsqrt ~ linha + coluna + inset,
m
4
<- lm(asinsqrt ~ linha + coluna + inset,
data = db)
data = db)
```
```{r, fig.height = 12}
# Diganóstico dos resíduos.
# Diganóstico dos resíduos.
par(mfrow = c(1, 2))
par(mfrow = c(4, 2))
plot(m0, which = 2:3)
plot(m1, which = 2:3)
plot(m2, which = 2:3)
plot(m3, which = 2:3)
plot(m4, which = 2:3)
layout(1)
layout(1)
# DISCUSSION: Pressupostos melhor atendidos.
# ATTENTION FIXME: não sabemos o denominador dessa binomial! E pode ser
# que esse `n` seja variável em função da abundância de hastes em cada
# unidade experimental.
```
```
TODO: Acima foram declarados 4 diferentes especificações.
TODO: comentar os resultados.
TODO: comentar os resultados.
```{r}
```{r
, eval = FALSE
}
# Análise com modelo linear generalizado.
# Análise com modelo linear generalizado.
size <- 1
size <- 1
m0 <- glm(cbind(size * prop, size - size * prop) ~
m0 <- glm(cbind(size * prop, size - size * prop) ~
linha + coluna + inset,
linha + coluna + inset,
data = db,
data = db,
family = quasibinomial)
family = quasibinomial)
deviance(
m0
)
m0
# TIP: as inferências são invariantes ao valor do `size` para
# TIP: as inferências são invariantes ao valor do `size` para
# quasibinomial. O parâmetro de dispersão absorve o `size`.
# quasibinomial. O parâmetro de dispersão absorve o `size`.
...
@@ -863,22 +883,27 @@ size <- 100
...
@@ -863,22 +883,27 @@ size <- 100
m0 <- glm(cbind(size * prop, size - size * prop) ~ linha + coluna + inset,
m0 <- glm(cbind(size * prop, size - size * prop) ~ linha + coluna + inset,
data = db,
data = db,
family = quasibinomial)
family = quasibinomial)
deviance(
m0
)
m0
# Var(Y) \propto \phi * p * (1 - p).
# Var(Y) \propto \phi * p * (1 - p).
m0 <- glm(prop ~ linha + coluna + inset,
m0 <- glm(prop ~ linha + coluna + inset,
data = db,
data = db,
family = quasi(link = "logit",
family = quasi(link = "logit",
variance = "mu(1 - mu)"))
variance = "mu(1 - mu)"))
deviance(m0)
m0
```
Para facilitar a análise, será usada função de ligação identidade. Como
todos os fatores são qualitativos e não será feito extrapolação
IMPROVE. Mas atenção, isso não impede intervalos de confiança fora do
espaço paramétrico.
```{r}
# Var(Y) \propto \phi * p * (1 - p).
# Var(Y) \propto \phi * p * (1 - p).
m0 <- glm(prop ~ linha + coluna + inset,
m0 <- glm(prop ~ linha + coluna + inset,
data = db,
data = db,
family = quasi(link = "identity",
family = quasi(link = "identity",
variance = "mu(1 - mu)"))
variance = "mu(1 - mu)"))
deviance(m0)
# Diganóstico dos resíduos.
# Diganóstico dos resíduos.
par(mfrow = c(1, 2))
par(mfrow = c(1, 2))
...
@@ -891,28 +916,16 @@ layout(1)
...
@@ -891,28 +916,16 @@ layout(1)
Anova(m0, test.statistic = "F")
Anova(m0, test.statistic = "F")
# Estimativas dos efeitos e medidas de ajuste.
# Estimativas dos efeitos e medidas de ajuste.
summary(
m0
)
m0
```
```
```{r}
```{r}
# Comparações múltiplas.
# Médias marginais ajustadas.
# Médias marginais ajustadas.
# emmeans(m0, specs = ~inset, transform = "response")
# emmeans(m0, specs = ~inset, transform = "unlink") # Igual.
# emmeans(m0, specs = ~inset, transform = "mu") # Igual.
emm <- emmeans(m0, specs = ~inset)
emm <- emmeans(m0, specs = ~inset)
emm
emm
emm %>%
as.data.frame() %>%
mutate_at(c("emmean", "asymp.LCL", "asymp.UCL"),
m0$family$linkinv)
# Retorna as médias ajustadas com teste de comparação múltipla aplicado.
# Retorna as médias ajustadas com teste de comparação múltipla aplicado.
results <- cld(emm)
results <- cld(emm) %>%
results <- results %>%
as.data.frame() %>%
as.data.frame() %>%
mutate_at(c(2, 5, 6), m0$family$linkinv) %>%
mutate_at(c(2, 5, 6), m0$family$linkinv) %>%
mutate(.group = as_letters(.group))
mutate(.group = as_letters(.group))
...
@@ -924,13 +937,18 @@ ggplot(data = results,
...
@@ -924,13 +937,18 @@ ggplot(data = results,
geom_point() +
geom_point() +
geom_errorbar(mapping = aes(ymin = asymp.LCL, ymax = asymp.UCL),
geom_errorbar(mapping = aes(ymin = asymp.LCL, ymax = asymp.UCL),
width = 0) +
width = 0) +
geom_label(mapping = aes(label = sprintf("%0.
2
f %s", emmean, .group)),
geom_label(mapping = aes(label = sprintf("%0.
3
f %s", emmean, .group)),
angle = 90,
angle = 90,
vjust = -0.4) +
vjust = -0.4) +
# expand_limits(y = c(NA, 1)) +
labs(x = "Tratamento",
labs(x = "Tratamento",
y = "Proporção de hastes sobreviventes")
y = "Proporção de hastes sobreviventes")
```
```
TODO: são tantas espeficicações possiveis. Qual é a mais adequada?
Talvez nem haja diferença apreciável nos resultados. Vai do analista
decidir.
<!------------------------------------------- -->
<!------------------------------------------- -->
```{r, eval = FALSE, include = FALSE}
```{r, eval = FALSE, include = FALSE}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment