-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path10-analdata.Rmd
1829 lines (1255 loc) · 139 KB
/
10-analdata.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# (PART) Análise de dados {.unnumbered}
# Análise de dados experimentais {#analdata}
> "Muito melhor uma resposta aproximada à pergunta certa, que muitas vezes é vaga, do que uma resposta exata à pergunta errada, que sempre pode ser feita com precisão." --- John Tukey
Nesta seção será abordado aspectos relacionados a análise de experimentos agrícolas, com ênfase na utilização de testes paramétricos. Esta seção será dividida em três partes principais:
- [Parte 1: estatistica básica](#ebasic): Medidas de tendência central e de variabilidade. Intervalos de confiança para média. Testes de hipóteses para verificar a igualdade entre médias de uma ou duas amostras.
- [Parte 2: delineamentos básicos](#dbasic): delineamentos experimentais inteiramente casualisado (DIC) e blocos ao acaso (DBC). Pressupostos \indt{pressupostos} dos modelos estatisticos. Testes complementares (média e regressão).
- [Parte 3: análise de covariância](#ancova): Análise de covariância como uma ferramenta estatística para redução do erro experimental.
- [Parte 4: modelos lineares generalizados](#general): Modelos Lineares Generalizados aplicados a análise de dados não gaussianos.
- [Parte 5: experimentos fatoriais](#efat): experimentos fatorias e experimentos com parcelas subdivididas.
## Estatistica básica {#ebasic}
### Medidas de tendência central
Nesta seção mostraremos como calular medidas de tendência central e medidas de variabilidade. As medidas de tendencia central são valores que representam um conjunto de dados. Entre as mais comuns podemos citar a média, mediana e moda.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
set.seed(1)
Amostra1 <- rnorm(100, 12, 3) # Gera uma amostra com distribuição normal
Amostra2 <- rpois(100, 12) # Gera uma amostra com distribuição Poisson
mean(Amostra1) # média
median(Amostra1) # mediana
```
O *R* calcula a média \indt{média} e mediana \indt{mediana} através das funções `mean()` \indf{mean} e `median()` \indf{median}, porém não calcula a moda. No blog [Ridículas](https://ridiculas.wordpress.com/2011/11/18/moda-de-uma-amostra-metodo-do-histograma-vs-metodo-kernel/), mantido pelo [LEG](http://www.leg.ufpr.br/doku.php/start) da UFPR, dois métodos são dicutidos. Incentivamos a leitura do material.
### Medidas de variabilidade
As seguintes medidas de variabilidade podem ser computadas, com suas respectivas funções:
- Desvio padrão `sd()`
- Variância `var()`
- Amplitude total `range()`
- Amplitude interquartílica `IQR()`
O desvio padrão e a variância podem ser obtidas com as funções `sd()` \indf{sd} e `var()`, respectivamente. \indf{var}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
sd(Amostra1)
var(Amostra1)
range(Amostra1)
IQR(Amostra1)
```
Não existe no R base uma função para computar o coeficiente de variação, então vamos criá-la utilizando a abordagem `function()`: \indf{function} \indt{CV}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
CV <- function(dados){
if(!class(dados) == "numeric"){
stop("Os dados precisam ser numéricos")
} #Indica que os dados devem ser numéricos
media <- mean(dados)
sd <- sd(dados)
CV <- (sd/media) * 100
return(CV) # Valor que será retornado pela função
}
CV(Amostra1)
```
A distribuição dos dados pode ser determinada utilizando histograma de frequências, QQ-Plos e Box-Plot (conforme visto anteriormente). Estatísticas como a amplitude, erro padrão da média, intervalo de confiança, entre outros, podem ser obtidas com a função `desc_stat()` \indf{desc\_stat} do pacote [metan](https://tiagoolivoto.github.io/metan/)[^analdata-1]. Esta função permite computar as estatisticas para uma ou mais variáveis de um data frame ou um vetor de dados numéricos. Para um exemplo numérico, consulte a [seção 7.3.1](#dstat).
[^analdata-1]: <https://tiagoolivoto.github.io/metan/>
### Resumindo dados com o pacote `dplyr`
Diversos verbos do pacote `dplyr` podem ser utilizados para resumir conjuntos de dados. Iniciaremos com a função `count()`\indf{count} para contar valores que se repetem em uma determinada variável. Por exemplo, é possível identificar qual é o valor de `APLA` que mais se repete utilizando
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
count(maize, APLA, sort = TRUE)
```
Para identificar quais os valores distintos de `APLA` foram observados a função `distinct()`\indf{distinct} é usada.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
distinct(maize, APLA)
```
Utilizando a função `summarise()`\indf{summarise} é possível criar uma ou mais variáveis escalares resumindo as variáveis de um tibble existente. Como resultado, uma linha é retornada. O seguinte código calcula a média global da MGRA e retorna o *n* utilizado na estimativa.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
maize %>%
summarise(MGRA_mean = mean(MGRA),
n = n())
```
Muitas vezes é necessário computar uma determinada função (como a média) para cada nível de uma variável categórica. Felizmente, o pacote **dplyr** possibilita que isto seja realizado facilmente. Continuamos no mesmo exemplo anterior. Neste caso, no entanto, o objetivo é calcular a média da MGRA para cada híbrido. Utilizando a função `group_by()` \indf{group\_by} antes da função `summarise()` \indf{summarise} uma linha de resultado para cada nível do fator híbrido é retornado.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
maize %>%
group_by(HIB) %>%
summarise(MGRA_mean = mean(MGRA),
n = n())
```
Até aqui vimos como a média (global ou para cada híbrido) da MGRA pode ser calculada. Quase sempre, no entanto, quando calculamos a média (ou qualquer outra medida) em um conjunto de dados, queremos fazê-la para todas (ou algumas) variáveis numéricas dos dados. Implementar isto com **dplyr** é relativamente fácil. Para isto, é utilizada a função `across()` que aplica uma função (ou um conjunto de funções) a um conjunto de colunas.
Veremos como `across()` pode ser utilizada para calcular a média para as variáveis numéricas do conjunto `maize`. No exemplo abaixo, `where()` aplica uma função (neste caso `is.numeric()`) a todas as variáveis e seleciona aquelas para as quais a função retorna `TRUE`. Assim, a média somente é calculada para as variáveis numéricas.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
maize %>%
summarise(across(where(is.numeric), mean))
```
Funções próprias podem ser aplicadas dentro da função `summarise()` para computar uma estatística personalizada. Como exemplo, vamos criar uma função chamada `mse` que retornará o valor da média e o erro padrão da média e aplicá-la a todas as variáveis que iniciam `"M"`, para cada nível do fator AMB.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
mse <- function(x){
me = round(mean(x), 3)
se = round(sd(x)/sqrt(n()), 3)
return(paste0(me, "+-", se))
}
maize %>%
group_by(AMB) %>%
summarise(across(starts_with("M"), mse))
```
Se desejamos computar mais de uma função para variáveis específicas, então o próximo código nos ajudará. Note que para aplicar mais de uma função é necessário criar uma lista ou vetor com o nome das funções. Neste caso, os sufixos `_m` e `_sd` representam a média e o desvio padrão, respectivamente.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
maize %>%
group_by(AMB) %>%
summarise(across(starts_with("M"), list(m = mean, sd = sd)))
```
Variáveis categóricas podem ser criadas utilizando a função `case_when()` \indf{case\_when}. `case_when()` é particularmente útil dentro da função `mutate()`\indf{mutate} quando você quer criar uma nova variável que depende de uma combinação complexa de variáveis existentes. No exemplo abaixo, uma nova variável será criada, dependendo dos valores de APLA, AIES ou CESP
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
maize %>%
mutate(
CASE = case_when(
MGRA > 280 | APLA < 1.3 | NGRA > 820 ~ "Selecionar",
APLA > 2.3 ~ "Alto",
MGRA < 130 ~ "Pouco produtivo",
TRUE ~ "Outro"
)
) %>%
select_non_numeric_cols()
```
### Estatística descritiva com pacote metan {#dstat}
O pacote `metan` fornece uma estrutura simples e intuitiva para o cálculo de estatísticas descritivas. Um [conjunto de funções](https://tiagoolivoto.github.io/metan/reference/utils_stats.html) pode ser usado para calcular rapidamente as estatísticas descritivas mais usadas.
Para calcular os valores médios para cada nível de um fator, por exemplo para cada nível do fator `HIB` do conjunto de dados `maize`, usamos a função`means_by()`.\indf{means\_by}
```{r}
means_by(maize, HIB)
```
As seguintes funções `_by()` estão disponíveis para calcular as principais estatísticas descritivas por níveis de um fator.
- `cv_by ()` Para cálculo do coeficiente de variação.\indf{cv\_by}
- `max_by ()` Para calcular valores máximos.\indf{max\_by}
- `means_by ()` Para calcular meios aritméticos.\indf{means\_by}
- `min_by ()` Para compilar valores mínimos.\indf{min\_by}
- `n_by ()` Para obter o comprimento.\indf{n\_by}
- `sd_by ()` Para calcular o desvio padrão amostral.\indf{sd\_by}
- `sem_by ()` Para calcular o erro padrão da média.\indf{sem\_by}
#### Funções úteis
Outras funções úteis também são implementadas. Todos eles funcionam naturalmente com `%>%`, lidam com dados agrupados com `group_by()` e várias variáveis (todas as variáveis numéricas de `.data` por padrão).\indf{group\_by}
- `av_dev ()` calcula o desvio médio absoluto.\indf{av\_dev}
- `ci_mean ()` calcula o intervalo de confiança para a média.\indf{ci\_mean}
- `cv ()` calcula o coeficiente de variação.\indf{cv}
- `freq_table ()` Calcula a fábula de frequência.\indf{freq\_table}
- `hm_mean ()`, `gm_mean ()` calcula as médias harmônica e geométrica, respectivamente. A média harmônica é o recíproco da média aritmética dos recíprocos. A média geométrica é a enésima raiz de n produtos.\indf{hm\_mean}\indf{gm\_mean}
- `kurt ()` calcula a curtose como usada no SAS e no SPSS.\indf{kurt}
- `range_data ()` Calcula o intervalo dos valores.\indf{range\_data}
- `sd_amo ()`, `sd_pop ()` Calcula amostra e desvio padrão populacional, respectivamente.\indf{sd\_amo}\indf{sd\_pop}
- `sem ()` calcula o erro padrão da média.\indf{sem}
- `skew ()` calcula a assimetria usada no SAS e no SPSS.\indf{skew}
- `sum_dev ()` calcula a soma dos desvios absolutos.\indf{sum\_dev}
- `sum_sq_dev ()` calcula a soma dos desvios ao quadrado.\indf{sum\_sq\_dev}
- `var_amo ()`, `var_pop ()` calcula amostra e variação populacional.\indf{var\_amo}\indf{var\_pop}
- `valid_n ()` Retorna o comprimento válido (não NA) de um dado.\indf{valid\_n}
#### A função `desc_stat()`
Para calcular todas as estatísticas de uma só vez, podemos usar `desc_stat()`\indf{desc\_stat}. Esta função pode ser usada para calcular medidas de tendência central, posição e dispersão. Por padrão (`stats = "main"`), sete estatísticas (coeficiente de variação, máximo, média, mediana, mínimo, desvio padrão da amostra, erro padrão e intervalo de confiança da média) são calculadas. Outros valores permitidos são `"all"` para mostrar todas as estatísticas, `"robust"` para mostrar estatísticas robustas, `"quantile"` para mostrar estatísticas quantílicas ou escolher uma (ou mais) estatísticas usando um vetor separado por vírgula com os nomes das estatísticas, por exemplo, `stats = c("mean, cv")`. Também podemos usar `hist = TRUE` para criar um histograma para cada variável. Aqui, auxiliares selecionados também podem ser usados no argumento `...`.
- **Todas as estatísticas para todas as variáveis numéricas**
```{r, message = FALSE, fig.height = 5, fig.width = 10, fig.align =" center "}
desc_stat(maize, stats = "all")
```
- **Estatísticas robustas usando select helpers**
```{r, message = FALSE, fig.height = 5, fig.width = 10, fig.align =" center "}
maize %>%
desc_stat(contains("N"),
stats = "robust")
```
- **Funções quantílicas escolhendo nomes de variáveis**
```{r, message = FALSE, fig.height = 5, fig.width = 10, fig.align =" center "}
maize %>%
desc_stat(APLA, AIES, CESP,
stats = "quantile")
```
- **Crie um histograma para cada variável**
```{r, message = FALSE, fig.height = 3.33, fig.width = 10, fig.align =" center "}
maize %>%
desc_stat(APLA, AIES, CESP,
hist = TRUE)
```
#### Estatísticas por níveis de fatores
Para calcular as estatísticas para cada nível de um fator, use o argumento `by`. Além disso, é possível selecionar as estatísticas a serem computadas usando o argumento `stats`, que é um único nome estatístico, por exemplo,`"mean"`ou um vetor de nomes separados por vírgula com `"` no início e apenas o final do vetor. Tenha em atenção que os nomes das estatísticas **NÃO** diferenciam maiúsculas de minúsculas, por exemplo, são reconhecidos `"mean"`, `"Mean"` ou `"MEAN"`. Vírgula ou espaços podem ser usados para separar os nomes das estatísticas.
- Todas as opções abaixo funcionarão:
- `stats = c ("mean, se, cv, max, min")`
- `stats = c ("mean se cv max min")`
- `stats = c ("MEAN, Se, CV max MIN")`
```{r, message = FALSE, fig.height = 5, fig.width = 5.5, fig.align =" center "}
desc_stat (maize,
contains("C"),
stats = ("mean, se, cv, max, min"),
by = AMB)
```
\indf{desc\_stat}
Para calcular as estatísticas descritivas por mais de uma variável de agrupamento, precisamos passar dados agrupados para o argumento `.data` com a função`group_by()`. Vamos calcular a média, o erro padrão da média e o tamanho da amostra para as variáveis `EP` e`EL` para todas as combinações dos fatores `AMB` e`HIB`.
```{r warning = FALSE}
stats <-
maize %>%
group_by(AMB, HIB) %>%
desc_stat(APLA, AIES, CESP,
stats = c("mean, se, n"))
stats
```
Quando as estatísticas são calculadas para níveis de um fator, a função `desc_wider()` pode ser utilizada para converter uma estatística calculada em um conjunto de dados em formato *wide*, ou seja, variáveis nas colunas, fatores nas linhas com o valor da estatística escolhida preenchendo a tabela.
```{r}
desc_wider(stats, se)
```
### Testes de aderência
Testes de aderência a distribuições teóricas também são de grande utilizada para as ciências agrárias. O teste de Shapiro-Wilk, realizado pela função `shapiro.test()` \indt{shapiro.test}, é amplamente utilizada para realizar o teste de normalidade dos dados. Para testar a aderência a outras distribuições teóricas, o teste de Kolmolgorov-Smirnov (função `ks.test()`) \indt{ks.test()} é uma alternativa.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
# Teste de Shapiro-Wilk
shapiro.test(Amostra1)
shapiro.test(Amostra2)
# Kolmogorov–Smirnov
# Amostra1 e Amostra2 provém da mesma distribuição?
ks.test(Amostra1, Amostra2)
# Amostra1 ~ N(12, 3)?
ks.test(Amostra1, "pnorm", 12, 3)
```
### Intervalos de confiança
A estimação por intervalo não fornece idéia da margem de erro cometida ao estimar um determinado parâmetro [@Ferreira2009]. Por isso, para verificar se uma dada hipótese $H_0$ (de igualdade) é ou não verdadeira, deve-se utilizar intervalos de confiança ou testes de hipóteses. A construção destes intervalos, e as particularidades dos testes de hipóteses, serão discutidos a seguir. Recomendamos como literatura o livro [Estatística Básica](http://www.editoraufv.com.br/produto/1595058/estatistica-basica)[^analdata-2] escrito pelo Prof. Daniel Furtado Ferreira da UFV. Para verificar a normalidade dos dados, as funções `shapiro.test()` e `ks.test()` e os gráficos QQ-Plot são de grande utilidade. \indf{shapiro.test} \indf{ks.test}
[^analdata-2]: <http://www.editoraufv.com.br/produto/1595058/estatistica-basica>
Será demostrado como testar hióteses para uma e duas médias pelo teste *t* de Student, o que exiege que os dados tenham distribuição normal univariada (já discutido anteriormente) ou bivariada (dados emparelhados). Para testar a normalidade bivariada, basta testar a normalidade da diferença entre as variáveis: \indt{distribuição normal}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
Amostra3 <- Amostra1 - Amostra2
shapiro.test(Amostra3)
```
A partir de um intervalo \indt{intervalo de confiança} que tenha alta probabilidade de conter o valor paramétrico, é possível diferenciar duas estimativas [@Ferreira2009]. O intervalo de confiança de uma média amostral de 95% é dado por:
$$
P\left[ {\bar X - {t_{\alpha /2}}\frac{S}{{\sqrt n }} \le \mu \le \bar X + {t_{\alpha /2}}\frac{S}{{\sqrt n }}} \right] = 1 - \alpha
$$
Na expressão acima, $\bar X$ é a média, $S$ é o desvio padrão e $-t_{\alpha /2}$ e $+t_{\alpha /2}$ são os quantis inferior e superior, respectivamente, da distribuição *t* de Student. O intervalo acima indica que o valor do parâmetro ($\mu$) tem 95% de chance de estar contido no intervalo. Ressalta-se que a expressão acima está relacionada com a precisão e não com a acurácia da estimativa. Para calcular esse intervalo, podemos utilizar a função `t.teste()` \indf{t.test}.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
result <- t.test(Amostra1)
result$conf.int # Intervalo de confiança
result$estimate # média
```
O intervalo de confiança é, por *default*, de 95%. Poém, pode-se modificar através do argumento `conf.level`. \indf{conf.level}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
result <- t.test(Amostra1, conf.level = 0.99)
result1 <- t.test(Amostra1, conf.level = 0.90)
result$conf.int # Intervalo de confiança
result1$conf.int # Intervalo de confiança
```
Para gerar os gráficos de intervalo de confiança será utilizada a função `ggplot()` do pacote **ggplot2**. \indf{ggplot}
```{r echo = TRUE, eval = TRUE, tidy=TRUE, message = FALSE, warning = FALSE,fig.height = 4, fig.width = 10, fig.cap = "Gráficos de intervalo de confiança (mais de uma variável)"}
set.seed(100) #Ajusta a semente para reprodução dos números
Amostra1 <- rnorm(100,10,10)
Amostra2 <- rnorm(100,10,24)
Amostra3 <- rnorm(100,25,15)
Amostra4 <- rnorm(100,20,30)
dados_IC <- tibble(
Factor = c("Amostra 1","Amostra 2", "Amostra 3", "Amostra 4"),
LL = c(t.test(Amostra1)$conf.int[1],
t.test(Amostra2)$conf.int[1],
t.test(Amostra3)$conf.int[1],
t.test(Amostra4)$conf.int[1]),
Mean = c(t.test(Amostra1)$estimate,
t.test(Amostra2)$estimate,
t.test(Amostra3)$estimate,
t.test(Amostra4)$estimate),
UL = c(t.test(Amostra1)$conf.int[2],
t.test(Amostra2)$conf.int[2],
t.test(Amostra3)$conf.int[2],
t.test(Amostra4)$conf.int[2]))
# Gráfico com barras de erros
cbPalette = c("red", "blue", "green", "pink") # armazenando as cores
err1 = ggplot(data = dados_IC, aes(y = Mean, x = Factor, colour = Factor)) +
geom_point(size = 2.5)+ # adiciona um ponto ao gráfico
geom_errorbar(aes(ymax = UL, ymin = LL), width = 0.1)+
scale_color_manual(values = cbPalette)+
coord_flip()+ # "inverte" o "x" e o "y"
expand_limits(y = c(0.4,0.6))+
theme(legend.position = "none")
# Gráfico de barras com barras de erros
err2 = ggplot(data = dados_IC, aes(y = Mean, x = Factor)) +
geom_bar(aes(fill = Factor), stat = "identity", position = "dodge")+
geom_errorbar(aes( ymax = UL, ymin = LL), width = 0.2)+
expand_limits(y = c(0,30)) +
scale_fill_manual(values = cbPalette)+
theme(legend.position = "none")
plot_grid(err1, err2)
```
### Teste de hipóteses para amostras independentes
Os testes de hipóteses \indt{testes de hipótese} aqui demonstrados tem como objetivo **(i)** verificar se determianda amostra difrere ou não de zero (${H_0}:\mu = 0$) e **(ii)** se duas amostras são ou não iguais (${H_0}:{\mu _1} = {\mu _2}$). Para testar as hipóteses pode-se utilizar a função `t.teste()`. Utilizaremos como amostras os dados da variável MGRA do conjunto **maize**. A primeira amostra corresponde contém os valores de **A1** e a segunda os valores de **A2**
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
Amostra1 <- maize %>% filter(AMB == "A1") %>% select(MGRA) %>% pull()
Amostra2 <- maize %>% filter(AMB == "A2") %>% select(MGRA) %>% pull()
t.test(Amostra1) # testa se a amostra difere de zero
t.test(Amostra1, Amostra2) # testa se as amostras difrem entre si
```
Alternativamente, o pacote [ggstatplot](https://indrajeetpatil.github.io/ggstatsplot/index.html)[^analdata-3] pode ser utilizado para confecionar gráficos que incluem teste de hipóteses.
[^analdata-3]: <https://indrajeetpatil.github.io/ggstatsplot/index.html>
O teste *t* pode ser utilizado para testar tanto hipóteses do tipo ${H_A}:\mu > 0$ ou ${H_A}:\mu < 0$. Porém, para isso, devemos utilizar o argumento `alternative` para indicar que o teste utilizado é unilateral.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
t.test(Amostra1, alternative = "greater") # unilateral a direita
t.test(Amostra1, alternative = "less") # unilateral a esquerda
```
\indf{t.test}
Outro pressuposto para realizar o teste *t* é a homogeneidade das variâncias. Quando as variâncias são heterogêneas, o grau de liberdade utilizado é calculado pela aproximação de Welch-Satterthwaite: \indt{Welch-Satterthwaite}
$$
\nu \cong \frac{{{{\left( {\frac{{S_1^2}}{{{n_1}}} + \frac{{S_2^2}}{{{n_2}}}} \right)}^2}}}{{\frac{{{{\left( {\frac{{S_1^2}}{{{n_1}}}} \right)}^2}}}{{{n_1} - 1}} + \frac{{{{\left( {\frac{{S_2^2}}{{{n_2}}}} \right)}^2}}}{{{n_2} - 1}}}}
$$
\indf{var.test}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
var.test(Amostra1, Amostra2) # Teste F para variâncias
t.test(Amostra1, Amostra2, var.equal = FALSE) # Por default, usa Welch-Satterthwaite
Amostra3 <- rnorm(30, 10, 5)
Amostra4 <- rnorm(30, 18, 5)
var.test(Amostra3, Amostra4)
t.test(Amostra1, Amostra2, var.equal = TRUE) # Quando variâncias são iguais
```
### Teste de hipóteses para amostras dependentes
As formas de comparação discutidas acima consideram as amostras como sendo independentes entre si. Para dados emparelhados, deve-se utiliza o argumento `paired = TRUE`.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
Amostra1 <- rnorm(30,10,5)
Amostra2 <- rnorm(30,15,5)
var.test(Amostra1, Amostra2) # Teste F para variâncias
t.test(Amostra1, Amostra2, var.equal = TRUE) # Independentes
t.test(Amostra1, Amostra2, var.equal = TRUE, paired = TRUE) # Emparelhadas
```
\indf{rnorm}
Observa-se que existe uma diferença no valor da estatistica teste, nos graus de liberdade, no valor tabelado e, consequentemente, no *p*-valor. Para duas amostras independentes, o teste para a diferença é dado por
$$
{t_c} = \frac{{{{\bar X}_1} - {{\bar X}_2}}}{{S\sqrt {\frac{1}{{{n_1}}} + \frac{1}{{{n_2}}}} }} \sim {t_{\left( {\alpha ,\nu } \right)}}
$$
Onde $\alpha$ é a probabilidade de erro, $\nu$ é o grau de liberdade (nº total de obervações-2), $S$ é a média ponderada do desvio padrão, ${\bar X}_1$ e ${\bar X}_2$ são a média das amostras 1 e 2, respectivamente, e $n_1$ e $n_1$ e $n_2$ são os tamanhos de amostra da amostra 1 e 2, respectivamente. No resultado acima, obervamos que $\nu = 58$.
No caso de amostras pareadas (dependentes), a estatística teste é dada por \indt{amostras pareadas}
$$
{t_c} = \frac{{\bar d - {\mu _0}}}{{\frac{{{S_d}}}{{\sqrt n }}}} \sim {t_{\left( {\alpha ,\nu } \right)}}
$$
Onde $\alpha$ é a probabilidade de erro, $\nu$ é o grau de liberdade (nº de diferenças-1), $\bar d$ é a média das diferenças, $S_d$ é o desvio padrão das diferenças e $n$ é o número de diferenças. No resultado acima,obervamos que $\nu = 29$.
## Delineamentos básicos {#dbasic}
As análises realizadas até agora tinham como objetivo verificar a existência de diferenças entre as médias de duas amostras. Porém, quando deseja-se estudar o efeito de "grupos de fatores" sobre determinado fenômeno, a análise da variância (ANOVA) é indicada. A ANOVA atribui a diversos fatores partes da variabilidade dos dados [@Casella2008]. \indt{ANOVA}
Os delineamentos experimentais também são parte importante da ANOVA. Será dado mais destaque aos mais comuns: o delineamento inteiramente casualisado (DIC) \indt{DIC} e o blocos ao acaso (DBC) \indt{DBC}. O bloqueamento tem como objetivo remover parte da variabilidade. Como não se deseja encotrar diferença entre os blocos, análises complementares não são realizadas para este fator.
Nessa seção será demostrado como analisar dados experimentais utilizando estes dois delineamentos. Em um primeiro momento, serão demonstrados experimentos unifatorias e, posteriormente, experimentos bifatoriais com e sem parcelas subdivididas. Formas de como verificar se os pressupostos \indt{pressupostos} do modelo estatistico estão sendo cumpridos, e formas de contornar este problema caso estejam sendo violados, também serão demonstrados. Por fim, após a análise da variância, serão mostrados os testes complementares utilizados para tratamentos quali e quantitativos.
### Princípios básicos
Os principios básicos da experimentação são a *casualisação* e a *repetição*. A repetição possibilita que o erro seja estimado, e a casualisação que eles sejam independentes.
### Pressupostos
Independente do delineamento, os pressupostos \indt{pressupostos} do modelo estatístico são que os erros são independentes, homocedásticos e normais:
$$
{\boldsymbol{\varepsilon }} \sim {\textrm N}\left( {0,{\boldsymbol{I}}{\sigma ^2}} \right)
$$
As formas de realizar esse diagnóstico é através de testes estatísticos e gráficos de diagnósticos. Uma ferramente para contornar o problema de violação dos pressupostos é a transformação dos dados. Existem várias formas de transformar os dados (cada uma adequada a um caso específico), mas será dado enfase à transformação Box-Cox.
### Estimação
A estimativa dos parâmetros \indt{parâmetros}é realizado pelo método dos minimos quadrados. Devido a matriz delineamento ser de posto incompleto (modelo superparametrizado), uma restrição deve ser imposta ao fator tratamentos para que a estimativa do efeito dos fatores seja única ($\sum {{t_i}} = 0$). Reparametrizações ou combinações lineares também podem ser utilizados para garantir a unicidade dos parâmetros [@Rencher2008].
### Reparametrização, condições marginais ou combinações lineares?
As funções `lm()` \indf{lm} e `aov()` \indf{aov} são usualmente utilizadas para realizar a análise da variância. Ambas utilizam a reparametrização o modelo para estimar os parâmetros. Vamos ver isso no exemplo abaixo utilizando o conjunto de dados `QUALI`
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
url <- "https://github.com/TiagoOlivoto/e-bookr/raw/master/data/data_R.xlsx"
dados <- import(url, sheet = "QUALI")
## Usando a função aov()
mod1 <- aov(RG ~ HIBRIDO, data = dados)
coef(mod1)
mod2 <- lm(RG ~ HIBRIDO, data = dados)
coef(mod2)
## Abordagem matricial
y <- as.matrix(dados$RG)
x <- model.matrix(~HIBRIDO, data = dados)
beta <- solve(t(x) %*% x) %*% t(x) %*% y
beta
```
Abaixo é apresentado o calculo da ANOVA de `mod1` através de uma aboragem matricial. Portanto verifica-se que a reparametrização é o método utilizado pelas funções `aov()` e `lm()`.\indf{lm} \indf{aov}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
# Anova com uma abrodagem matricial
SQtrat <- t(beta) %*% t(x) %*% y - ((sum(y))^2)/40
SQtotal <- t(y) %*% y - ((sum(y))^2)/40
SQres <- SQtotal - SQtrat
Fc <- (SQtrat / 9) / (SQres / 30)
p_val <- pf(Fc, 9, 30, lower.tail = FALSE)
cat("\nSQtrat = ", SQtrat)
cat("\nSQtotal = ", SQtotal)
cat("\nSQres = ", SQres)
cat("\nFc = ", Fc)
cat("\np_val = ", p_val, "\n")
anova(mod1)
```
Demonstrar como o procedimento de estimação e cálculo da ANOVA serviu apenas para verificar de maneira didática como as funções no *R* contornam o problema da singularidade da matriz delineamento. Conforme já relatado acima, as funções `aov()` e `lm()` podem ser utilizadas para realizar a ANOVA. Porém, nesta seção será dado enfase as funções do pacote **ExpDes.pt**, \indt{ExpDes} cujas funções possibilitam analisar dados uni e bifatoriais; este último com e sem parcelas subdivididas.
### Delineamento inteiramente casualizado (DIC)
#### Modelo estatístico
O delineamento inteiramente casualizado (DIC) é um delineamento adequado para áreas uniformes (parcelas são uniformes), onde não há necessidade de controle local (bloqueamento). Neste delineamento, os tratamentos devem ser distribuidos aleatoriamente nas parcelas.
O modelo do DIC é dado por \indt{DIC}
$$
{Y_{ij}} = m + {t_i} + {\varepsilon _{ij}}
$$
Onde $m$ é a média geral do experimento, $t_i$ é o efeito de tratamentos, sendo estimado por $\hat t_i = \bar Y_{i.} - \bar Y_{..}$ com a seguinte restrição: $\sum_i \hat t_i = 0 ~~~~\forall_i$ (leia-se, o somatório dos efeitos de tratamento é zero para todo tratamento *i*). $\epsilon_{ij}$ é o erro experimental estimado por ($\hat e_{ij} = Y_{ij} - m - \hat t_i$) onde ${e_{ij}}\sim NID(0,{\sigma ^2})$.
Experimentos em DIC serão analisados utilizando da função `dic()` \indt{dic()} do pacote *ExpDes.pt*. Os argumentos desta função são:
| Argumento | Descrição |
|-----------|-----------------------------------------------------------------|
| `trat` | Objeto contendo os tratamentos |
| `resp` | Objeto contendo a variável resposta |
| `quali` | Se TRUE, o tratamento é qualitativo (*default*) |
| `mcomp` | Indicar o teste complementar (Tukey é *default*) |
| `nl` | Indica se uma regressão deve ser ajustada (FALSE é o *default*) |
| `hvar` | Teste de homogeneidade da variância (Bartlett é o *default*) |
| `sigT` | Significância da comparação múltipla |
| `sigF` | Significância do teste F |
Para maiores detalhes, ver o [pdf do pacote](https://cran.r-project.org/web/packages/ExpDes.pt/ExpDes.pt.pdf)[^analdata-4] ou ir em ajuda (digitar `?ExpDes.pt` no console).
[^analdata-4]: <https://cran.r-project.org/web/packages/ExpDes.pt/ExpDes.pt.pdf>
#### DIC com fatores qualitativos
\indt{fatores qualitativos}
Os dados utilizados neste exemplo estão na planilha `QUALI` do conjunto de dados `data_R.xlsx`. Os próximos códigos carregam o conjunto de dados e criam um gráfico do tipo boxplot para explorar o padrão dos dados.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE, fig.width=10, fig.height=5}
url <- "https://github.com/TiagoOlivoto/e-bookr/raw/master/data/data_R.xlsx"
qualitativo <- import(url, sheet = "QUALI")
p1 <- ggplot(qualitativo, aes(HIBRIDO, RG))+
geom_hline(yintercept = mean(qualitativo$RG), linetype = "dashed")+
geom_boxplot()+
stat_summary(geom = "point", fun = mean, shape = 23)+
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
p2 <- ggplot(qualitativo, aes(factor(BLOCO), RG))+
geom_hline(yintercept = mean(qualitativo$RG), linetype = "dashed")+
geom_boxplot()+
stat_summary(geom = "point", fun = mean, shape = 23)
plot_grid(p1, p2)
```
\indf{dic} \indf{geom\_boxplot}
Analizando o boxplot acima é razoável dizer que as médias dos tratamentos são diferentes, principalmente comparando o NUPEC\_10 com NUPEC\_1. Esta suspeita de diferença, no entanto, deve ser suportada com a realização da análise de variância. No pacote **ExpDes.pt**, quando os fatores são qualitativos, a análise complementar aplicada é a comparção de médias. A função `dic()` do pacote retorna a tabela da ANOVA, a análise de pressupostos \indt{pressupostos} (normalidade e homogeneidade) e o teste de comparação de médias.
\indt{Dicas}
```{block2, type = "dica", eval = FALSE}
As funções do pacote **ExpDes.pt** utilizam os dados "anexados" ao ambiente de trabalho, ou seja, um argumento `data = .` não existe para suas funções. Note que no exemplo abaixo foi utilizado a função `with(qualitativo, dic(...))`. Isto permite acessar variáveis presentes no data frame. Uma outra maneira de realizar esta mesma análise é utilizando a função `attach(qualitativo)`, qual carregará o data frame no ambiente R, assim é possível utilizar a função `dic(...)`. Após realizada a análise, é recomendado executar o comando `detach(qualitativo)` para "limpar" os dados do ambiente de trabalho.
```
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE}
mod3 <- with(qualitativo, dic(HIBRIDO, RG))
```
\indf{crd}
A interpretação da significância, ou seja, se as médias de produtividade dos híbridos foram significativamente diferentes a uma determinada probabilidade de erro é feita verificando-se o valor de "Pr\>fc" na ANOVA. A figura abaixo mostra a distribuição *F* considerando os graus de liberdade de tratamento e erro $F_{9, 30}$ e nos ajuda a compreender um pouco melhor isto. O valor de *F* calculado em nosso exemplo foi de 2.0616, o que resulta em uma probabilidade de erro acumulada de 0.066545 (6,654%). Na figura abaixo, esta probabilidade de erro acumulada está representada pela cor vermelha. Para que uma diferença significativa a 5% de probabilidade de erro tivesse sido observada, o valor de *F* calculado deveria ter sido 2.2107 [`qf(0.05, 9, 30, lower.tail = FALSE)`], representado neste caso pela cor verde no gráfico.
```{r, echo=FALSE, fig.height=3, fig.width=6}
df1 <- 9
df2 <- 30
Alpha.des <- 0.05
Alpha.obs = 0.066545
df <- data.frame(X = seq(from = 0, to = 6, length = 1000))
ggplot(data=df, mapping=aes(x = X, y = df(x = X, df1 = df1, df2 = df2, ncp=0)))+
scale_x_continuous(breaks=seq(0, 10, 1))+
scale_y_continuous(expand = expand_scale(mult = c(0, .1))) +
geom_area(data = subset(df, X > qf(p = 1-Alpha.obs, df1 = df1, df2 = df2, ncp=0)),
aes(x=X, y=df(x = X, df1 = df1, df2 = df2, ncp=2)), fill = "red")+
geom_area(data = subset(df, X > qf(p = 1-Alpha.des, df1 = df1, df2 = df2, ncp=0)),
aes(x=X, y=df(x = X, df1 = df1, df2 = df2, ncp=2)), fill = "green")+
geom_area(aes(x=X, y=df(x = X, df1 = df1, df2 = df2, ncp=2)), color="black", fill="blue", alpha = 0.1)+
labs(x = "Valor do teste F", y = "Probabilidade acumulada")
```
Em sequência a ANOVA, a função retorna o resultado da análise complementar solicitada. Neste exemplo, o teste de Tukey (5% de erro) é utilizado. Este teste realiza todas as combinações possíveis entre as médias (por isso o nome comparação múltipla de medias), comparando se a diferença entre duas médias é maior ou menor que uma diferença mínima significativa (DMS). Esta DMS é calculada pela seguinte fórmula $DMS = q \times \sqrt{QME/r}$, onde *q* é um valor tabelado, considerando o número de tratamentos e o GL do erro; *QME* é o quadrado médio do erro; e *r* é o número de repetições (ou blocos). O valor de *q* pode ser encontrado no apêndice 1. Para este caso, considerando 10 e 30 como o número de tratamentos e o GL do erro, respectivamente, o valor de q é 5,76, que aplicado na fórmula resulta em $DMS = 5,76 \times \sqrt{3.5389/4}=5.417$. Logo, a diferença mínima entre duas médias para que estas sejam significativamente diferentes (5% de erro), deve ser de 5,417 toneladas. Como a diferença entre a maior média (NUPEC\_01) e a menor média (NUPEC\_10), foi de 3,994 toneladas, a média de todos os tratamentos foram consideradas iguais.
Considerando nosso exemplo, parece razoável dizer que 10,27 t é uma produção maior que 6,28 t. Então, é justo perguntar: O que pode ter acontecido para que as médias não tenham sido consideradas diferentes considerando a probabilidade de erro, mesmo tendo fortes indícios de que elas seriam? A primeira opção que nos vem a mente --e que na maioria das vezes é encontrada em artigos científicos-- é que as alterações no rendimento de grão observadas fora resultado do acaso; ou seja, neste caso, há a probabilidade de 6,65% de que uma diferença pelo menos tão grande quanto a observada no estudo possa ser gerada a partir de amostras aleatórias se os tratamentos não aferatem a variável resposta. Logo, a **recomendação estatística** neste caso, seria por optar por qualquer um dos tratamentos. Do ponto de vista prático, sabemos que esta recomendação está totalmente equivocada. Neste ponto surge uma importante (e polêmica) questão: a interpretação do *p*-valor. Um *p*-valor de 0,05 não significa que há uma chance de 95% de que determinada hipótese esteja correta. Em vez disso, significa que se a hipótese nula for verdadeira e todas as outras suposições feitas forem válidas, haverá 5% de chance que diferenças ao menos tão grandes quanto as observadas podem ser obtidas de amostras aleatórias. É preciso ter em mente que o *p*-valor relatado pelos testes é um significado probabilístico, não biológico. Assim, em experimentos biológicos a interpretação desta estatística deve ser cautelosa, pois um *p*-valor não pode indicar a importância de uma descoberta. Por exemplo, um medicamento pode ter um efeito estatisticamente significativo nos níveis de glicose no sangue dos pacientes sem ter um efeito terapêutico. Sugerimos a leitura de cinco interessantes artigos relacionados a este assunto [@Altman2017; @Baker2016; @Chawla2017; @Krzywinski2013; @Nuzzo2014].
\indt{Curiosidade}
```{block2, type = "vcsabia"}
A fórmula da DMS descrita acima é utilizada apenas se (e somente se) o número de repetições de todos os tratamentos é igual. Caso algum tratamento apresente um número inferir de repetições, fato comumente observado em experimentos de campo devido a presença de parcelas perdidas, a DMS deste par de médias em específico deve ser corrigida. Geralmente, as análises complementares são realizadas quando a ANOVA indica significância para um determinado fator de variação, no entanto, o teste Tukey pode revelar diferença entre as médias, mesmo quando o teste F não indicar essa diferença. Isto pode ser observado, principalmente quando a probabilidade de erro for muito próxima de 5%, por exemplo, Pr>Fc = 0.0502. A recíproca também é verdadeira. O teste Tukey pode indicar que as médias não diferem, se Pr>Fc = 0.0492, por exemplo.
```
Em adição à justificativa anterior (as alterações no rendimento de grão observadas fora resultado do acaso), existem pelo menos mais três razões potenciais para a não regeição da hipótese $H_0$ em nosso exemplo: (i) um experimento mal projetado com poder insuficiente para detectar uma diferença (à 5% de erro) entre as médias; (ii) os tratamentos foram mal escolhidos e não refletiram adequadamente a hipótese inicial do estudo; ou (iii) o experimento foi indevidamente instalado e conduzido sem supervisão adequada, com baixo controle de qualidade sobre os protocolos de tratamento, coleta e análise de dados. Esta última opção parece ser a mais razoável aqui. É possivel observar no boxplot para o fator bloco que o bloco 4 parece ter uma média superior aos outros blocos. Sabe-ser que no DIC, toda diferença entre as repetições de um mesmo tratamento comporão o erro experimental. Logo, neste exemplo, a área experimental não era homogênea como se pressupunha na instalação do experimento. Isto ficará claro, posteriormente, ao analisarmos o mesmo conjunto de dados, no entanto considerando um \hypertarget{DICQUALI}{\hyperlink{DBCQUALI}{delineamento de blocos casualizados}}.
É possível extrair os erros através de `mod3$residuos`. Também é possível fazer diagnóstico dos pressupostos do modelo estatístico através de gráficos utilizando a função `plotres()`: \indf{plotres}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,fig.height = 6, fig.cap = "Gráfico de resíduos gerado pela função plotres()"}
plotres(mod3)
```
O *p*-valor do teste de Shapiro-Wilk indicou que os resíduos \indt{resíduos} não seguem uma seguem uma distribuição normal, o que pode ser confirmado pelo QQ-Plot. O argumento `hvar = "levene"` na função é utilizado para testar a homogeneidade dos resíduos. De acordo com o resultado do teste, os resíduos podem ser considerados homogêneos.
```{=tex}
\indf{crd}
\indt{Exercícios}
```
```{block2, type = "tarefa"}
**Exercício 7**
- Utilize os pacotes **dplyr** e **ggplot2** para confeccionar um gráfico de barras onde o eixo y é representado pelos híbridos e o eixo x pelo rendimento de grãos.
- Adicione uma linha vertical tracejada mostrando a média global do experimento.
- Adicione a letra "a" em todas as barras para identificar a não diferença entre as médias.
```
[Resposta](#exerc7)
#### DIC com fatores quantitativos
\indt{fatores quantitativos}
Vimos anteriormente que os fatores qualitativos são comparados através de comparações de médias. No caso de fatores quantitativos, o comum é utilizar regressões como análise complementar. Neste tipo de análise a $SQ_{Trat}$ é decomposta, e cada polinômio explicará parte desta soma de quadrados. O maior grau significativo do polinômio determinará qual a regressão escolhida. Para implementar essa análise, utilizando a função `dic()`, basta indicar como `FALSE` no argumentos `quali`. O arquivo de dados "QUALITATIVO.xlsx" contém três exemplos, com comportamento linear, quadrático e cúbico. Utilizando o que aprendemos no `ggplot2` até agora, vamos criar um gráfico para visualisar estes dados. \indf{ggplot} \indf{geom\_point} \indf{geom\_smooth}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE, fig.height = 3, fig.width = 5, fig.cap = "Exemplo de regressão com comportamento linear, quadrático e cúbico", fig.align = "center"}
url <- "https://github.com/TiagoOlivoto/e-bookr/raw/master/data/data_R.xlsx"
quantitativo_todos <- import(url, sheet = "QUANTI")
ggplot(quantitativo_todos, aes(DOSEN, RG, col = TIPO)) +
geom_point() +
geom_smooth()
```
Como exemplo didático, vamos analisar os dados que parecem ter comportamento quadrático para ver se, estatisticamente, isto é confirmado. Para isto, utilizamos a função `subset()` \indf{subset} para criar um novo conjunto de dados que contenha somente o nível "QUADRÁTICA" dos nosso dados originais. Para evitar uma longa saída, os resultados desta seção em específico não foram mostrados.
```{r echo = TRUE, results="hide", eval = TRUE, message = FALSE, warning = FALSE, fig.height = 3, fig.width = 5, fig.cap = "Exemplo de regressão com comportamento linear, quadrático e cúbico", fig.align = "center"}
quantitativo <- filter(quantitativo_todos, TIPO == "QUADRÁTICA")
crd_Reg <- with(quantitativo, dic(DOSEN, RG, quali = FALSE, hvar = "levene"))
```
Abaixo vamos reproduzir o exemplo para os usuários das funções `aov()` ou `lm()`. \indf{aov} \indf{lm}
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,fig.height = 7}
Reg <- quantitativo
Total <- aov(RG ~ 1, data = Reg)
Saturado <- aov(RG ~ factor(DOSEN), data = Reg)
Linear <- lm(RG ~ DOSEN, data = Reg)
Quadratica <- lm(RG ~ poly(DOSEN, 2, raw = TRUE), data = Reg)
Cubica <- lm(RG ~ poly(DOSEN, 3, raw = TRUE), data = Reg)
anova(Total, Linear, Quadratica, Cubica, Saturado)
```
O polinômio \indt{polinômio} de segundo grau deve ser o escolhido, pois ele foi o maior grau significativo (*p*-valor menor que 0,05). Os desvios da regressão nada mais são do que a *FALTA DE AJUSTE* \indt{falta de ajuste} dos modelos. Porém, como é comum em ciências agrárias, ajusta-se apenas polinômios até a terceira ordem, devido a dificuldade de interpretção de polinômios com ordens superiores. É importante ressaltar que aqui estamos falando de **regressões polinomiais**. Como será visto posteriormente, a falta de ajuste é inaceitável para modelos de regressão múltipla. O valor de $R^2$ é dado pela razão entre a $SQ_{Regressão}$ e a $SQ_{Tratamento}$. No exemplo acima, o $R^2$ da regressão quadrática (selecionada) é:
$$
{R^2} = \frac{{S{Q_{{\rm{Regressão}}}}}}{{S{Q_{{\rm{Tratamento}}}}}} = \frac{{2,4900 + 1,5465}}{{4,0505}} = 0.9965
$$
Percebe-se claramente pelos resultados acima que a significância do grau do polinômio está diretamente relacionado com quanto ele "contribui" para explicar a $SQ_{Trat}$. A forma mais prática de analisar uma regressão é através de gráficos. A função `dic()` fornece essa alternativa, através da função `graphics()`.\indt{graphics()} Nesta função existe dois argumentos obrigatórios: `a`, onde indicamos o objeto que contém a saída da análise do experimento e `grau`, onde indicamos o grau do polinômio.
**Gráfico de resultados: uma proposta**
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,fig.height = 3, fig.width = 3.5, fig.cap = "Gráfico de linhas gerado pela função ggplot()"}
ggplot(quantitativo, aes(x = DOSEN, y = RG))+ # Indicar dados e variáveis
geom_point(color = "blue", size = 2) + # Adiociona e edita os pontos
geom_smooth(method = "lm",
formula = y ~ poly(x, 2, raw = TRUE),
color = "red",
fill = "grey")
```
\indf{ggplot} \indf{geom\_point} \indf{geom\_smooth} Este é um exemplo simples de uso da função `ggplot()`. Porém, como visto até aqui, esta função (mesmo em aplicações simples) tem suas complexidades. Pensando nisso, o pacote [metan](https://tiagoolivoto.github.io/metan/)[^analdata-5] foi desenvolvido e contém funções úteis que facilitam a confeção de gráficos. A partir dos experimentos fatoriais, apenas as funções deste pacote serão utilizados para a confecção dos gráficos.
[^analdata-5]: <https://tiagoolivoto.github.io/metan/>
\indt{Exercícios}
```{block2, type = "tarefa"}
**Exercício 8**
- Utilize a função `plot_lines()` do pacote `metan`** para confeccionar um gráfico semelhante ao anterior. Para maiores detalhes veja `?metan::plot_lines`.
```
[Resposta](#exerc8)
\indf{plot\_lines}
### Delineamento blocos ao acaso (DBC)
\indt{DBC}
No delineamento de blocos ao acaso uma restrição \indt{restrição} na casualisação é imposta visando agrupar unidades experimentais uniformes dentro de um bloco, de maneira que a heterogeneidade da área experimental fique entre os blocos. O bloquemento tem como objetivo reduzir o erro experimental, *"transferindo"* parte do erro experimental para efeito de bloco. O modelo do DBC é dado por
$$
{Y_{ij}} = m + {b_j} + {t_i} + {\varepsilon _{ij}}
$$
Onde $m$ é a média geral do experimento, $b_j$ é o efeito de bloco, $t_i$ é o efeito de tratamentos e $\epsilon_{ij}$ é o erro experimental. No pacote *ExpDes.pt*, este delineamento é executado pela função `dbc()`. Os argumentos desta função são:
| Argumento | Descrição |
|-----------|----------------------------------------------------------------------|
| `trat` | Objeto contendo os tratamentos |
| `bloco` | Objeto contendo os blocos |
| `resp` | Objeto contendo a variável resposta |
| `quali` | Se TRUE, o tratamento é qualitativo (*default*) |
| `mcomp` | Indicar o teste complementar (Tukey é *default*) |
| `nl` | Indica se uma regressão deve ser ajustada (FALSE é o *default*) |
| `hvar` | Teste de homogeneidade da variância (ONeill e Mathews é o *default*) |
| `sigT` | Significância da comparação múltipla (*default* 0,05) |
| `sigF` | Significância do teste F (*default* 0,05) |
Percebe-se que apenas um argumento foi adicionado a função: `bloco`.
#### DBC com fatores qualitativos
Neste exemplo, vamos realizar a ANOVA com os mesmos dados do exemplo \hypertarget{DBCQUALI}{\hyperlink{DICQUALI}{DIC com fatores qualitativos}}, agrupando as médias pelo teste Scott-Knott utilizando o argumento `mcomp = "sk"`:
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,fig.height = 7, fig.align = "center"}
mod4 <- with(qualitativo, dbc(HIBRIDO, BLOCO, RG, mcomp = "sk"))
```
\indf{dbc}
Considerando o bloco como um fator de variação no experimento, pode-se afirmar que a média de produtividade difere entre os híbridos testados. Como o efeito de bloco foi significativo Pr\>Fc \< 0.05, conclui-se que a escolha pelo delineamento em blocos casualizados foi correta, e, principalmente, que a disposição dos blocos na área experimental possibilitou lograr a heterogeneidade entre os blocos, deixando a homogeneidade dentro de cada bloco. O Fc para o fator de tratamento "HÍBRIDOS" foi de 18.716, qual acumula uma probabilidade de erro de somente 0.0000002029.
Incluindo o bloco como fonte de variação nota-se que 3 graus de liberdade (GL) que antes compunham o erro "saíram" e passaram a compor o GL do bloco. Assim, neste exemplo, o GL do erro foi de 27. No entanto, uma grande parte da soma de quadrados do erro (aproximadamente 90%) observada no delineamento DIC era oriunda do efeito de bloco. Com isto, a soma de quadrado do erro considerando o delineamento DBC foi de apenas 10.525 e, mesmo com a "perda" de 3 GL para compor o bloco, o quadrado médio do erro foi de somente 0.390 (89% menor quando comparado com o delineamento DIC). Consequentemente o valor do F calculado para o fator HÍBRIDO foi significativo. Cabe ressaltar que a soma de quadrados para o fator de variação HÍBRIDO não muda se o delineamento for DIC ou DBC.
Uma sugestão para apresentação dos dados é a confecção de um gráfico de barras. Para isto, utilizaremos a função `plot_bars()` do pacote `metan`. Utilizando o argumento `lab.bars` é possível adicionar as letras do teste SK. Por padrão, barras de erro mostrando o erro padrão da média são adicionadas. Para suprimir estas barras use `errorbar = FALSE`. É possível também adicionar os valores às barras usando `values = TRUE`, ordenar em ordem crescente ou decrescente, bem como modificar a cor e preenchimento das barras facilmente
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE, fig.width=10, fig.height=5}
p1 <- plot_bars(qualitativo, x = HIBRIDO, y = RG)
p2 <- plot_bars(qualitativo,
x = HIBRIDO,
y = RG,
lab.bar = c("a", "c", "b", "a", "a", "b", "c", "c", "c", "c"),
order = "desc",
errorbar = FALSE,
values = TRUE,
n.dodge = 2)
plot_grid(p1, p2, labels = c("p1", "p2"))
```
#### DBC com fatores quantitativos
Para realizar a análise de regressão considerando um delineamento DBC basta utilizar a função `dbc()` \indf{rbd} incluindo o seguinte argumento `quali = FALSE`.
\indt{Exercícios}
```{block2, type = "tarefa"}
**Exercício 9**
- Rode a programação para os dados quantitativos considerando o delineamento DBC e compare os resultados com aquela obtida pela função `dic()` para os mesmos dados.
- As estimativas dos parâmetros da regressão são as mesmas?
- O *p*-valor para o testes de hipótese para efeito de tratamento é o mesmo?
```
[Resposta](#exerc9)
#### Análise de experimentos utilizando modelos mistos
A função `gamem()` do pacote `metan` pode ser utilizada para analizar dados de experimentos unifatoriais utilizando um modelo misto de acordo com a seguinte equação:
$$
y_{ij}= \mu + \alpha_i + \tau_j + \varepsilon_{ij}
$$
onde $y_ {ij}$ é o valor observado para o *i*-ésimo genótipo na *j*-ésima repetição (*i* = 1, 2, ... *g*; *j* = 1, 2,. ., *r*); sendo *g* e *r* o número de genótipos e repetições, respectivamente; $\alpha_i$ é o efeito aleatório do *i*-ésimo genótipo; $\tau_j$ é o efeito fixo da *j*-ésima repetição; e $\varepsilon_ {ij}$ é o erro aleatório associado a $y_{ij}$. Neste exemplo, usaremos os dados de exemplo `data_g` do pacote metan.
```{r}
gen_mod <- gamem(data_g, GEN, REP,
resp = c(ED, CL, CD, KW, TKW, NKR))
```
A maneira mais fácil de obter os resultados do modelo acima é usando a função `get_model_data()`. Vamos fazer isso.
- Teste de razão de máxima verossimilhança
```{r}
get_model_data(gen_mod, "lrt")
```
- Componentes de variância
```{r}
get_model_data(gen_mod, "genpar")
```
- Médias preditas
```{r}
get_model_data(gen_mod, "blupg")
```
No exemplo acima, o design experimental foi o de blocos completos casualizados. Também é possível analisar um experimento conduzido em alfa-lattice com a função `gamem()`, baseado na seguinte equação:
\\begin{gather} y\_{ijk}= \\mu + \\alpha\_i + \\gamma\_j + (\\gamma \\tau)\_{jk} + \\varepsilon\_{ijk} \\end{gather}
onde $y_ {ijk}$ é o valor observado do *i*-ésimo genótipo no *k*-ésimo bloco da *j*- ésima repetição (*i* = 1, 2, ... *g*; *j* = 1, 2, .., *r*; *k* = 1, 2, .., *b*); respectivamente; $\alpha_i$ é o efeito aleatório do *i*-ésimo genótipo; $\gamma_j$ é o efeito fixo da *j*-ésima repetição; $(\gamma \tau)_{jk}$ é o efeito aleatório do *k*-ésimo bloco incompleto aninhado na repetição *j*; e $\varepsilon_{ijk}$ é o erro aleatório associado a $y_{ijk}$. Neste exemplo, usaremos os dados de exemplo `data_alpha` do pacote metan.
```{r}
gen_alpha <- gamem(data_alpha, GEN, REP, YIELD, block = BLOCK)
get_model_data(gen_alpha, "lrt")
get_model_data(gen_alpha, "details")
get_model_data(gen_alpha, "genpar")
```
## Transformação de dados
\indt{transformação de dados}
Em todos os exemplos apresentados até aqui, os resíduos \indt{resíduos} devem cumprir os seguintes pressupsotos: normalidade, homocedasticidade e independência:
$$
{\boldsymbol{\varepsilon }} \sim {\rm N}\left( {0,{\boldsymbol{I}}{\sigma ^2}} \right)
$$
Esses pressupostos \indt{pressupostos} são necessários para que o teste F seja utilizado na análise de variância. Sob normalidade \indt{normalidade} dos resíduos e hipótese nula $H_0$, a razão entre as somas de quadrado de tratamento e resíduo tem distribuição F [@Rencher2008]. Já em condições de não normalidade dos resíduos, o poder do teste \indt{poder do teste} (probabilidade de rejeitar $H_0$) é reduzido. Apesar disso, não há grandes mudanças no erro tipo I quando a pressuposição de normalidade é violada [@Senoglu2001], e por isso ele é considerado robusto.
Apesar do teste F de ser robusto a desvios da normalidade, é comum que ela seja cumprida para que o teste seja aplicado. Quando as pressuposições \indt{pressuposições} não são cumpridas, um dos procedimentos mais comum é transformar os dados. A transformação Box-Cox [@Box1964] \indt{Box-Cox} é uma das mais comuns. Ela consiste em transformar os valores de $Y_i$ por $Y_i(\lambda)$, sendo o valor de $\lambda$ estimado por máxima verossimilhança. Após a transformação de $Y_i$ por $Y_i(\lambda)$ os dados seguem distribuição normal com variância constante.
A função `boxcox()` \indf{boxcox}, do pacote *MASS*, pode ser utilizada para estimar o valor de $\lambda$. Uma sequência de valores de $\lambda$ são estimados, e o escolhido é aquele que maximiza a função de log-verossimilhança. No modelo considerando o delineamento inteiramente casualizado (qualitativo), o pressuposto \indt{pressupostos} de normalidade foi violado. O próximo passo é encontrar o valor de $\lambda$ para transformar a variáveis, utilizando para isso a função `boxcox()`.
```{r echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,fig.height = 4, fig.width = 4, fig.align = "center", fig.cap = "Gráfico gerado pela função boxcox() para identificar o valor de lambda"}
MASS::boxcox(RG ~ HIBRIDO, data = qualitativo,
lambda = seq(-2, 2, length = 20)) # Indica os valores de lambda
```
\indf{boxcox}
Percebe-se que o intervalo de $\lambda$ cruza pelo valor zero, indicando que a transformação *log* é a mais adequada. Uma forma mais prática de encontrar o valor de $\lambda$ que maximiza a função de log-verossimilhança \indt{log-verossimilhança} é utilizar a função `locator()` \indf{locator}. Após executar a função abaixo, basta clicar com o cursor sobre o ponto que maximiza a função para que as coordenadas sejam mostradas no console.
```{r echo = TRUE, eval = FALSE, message = FALSE, warning = FALSE,fig.height = 7}
locator(n = 1)
```
```{r echo = TRUE, eval = TRUE, results="hide", message = FALSE, warning = FALSE,fig.height = 7}
mod5.1 = with(qualitativo, dic(HIBRIDO, log(RG)))
plotres(mod5.1)
```
Utilizando a transformação `log()`, os resíduos ainda continuaram sendo não normais, apesar de se aproximaram mais da distribuição normal neste caso. Quando a transformação não for eficiente, recomenda-se a utilização de testes não paramétricos, por exemplo, no caso de um delineamento inteiramente casualizado, o teste de Kruskal-Wallis ou de um delineamento de blocos completos casualisados, o teste de Friedman.
## Análise de covariância (ANCOVA) {#ancova}
### Introdução
Neta seção, veremos alguns conceitos estatísticos e uma aplicação numérica de uma técnica interessante que pode ser útil, se corretamente utilizada, para reduzir o erro experimental em experimentos agronômicos: a análise de covariância (ANCOVA). A ANCOVA\indt{ANCOVA} é um modelo linear geral que combina princípios de ANOVA\indt{ANOVA} e regressão para avaliar se as médias de uma variável dependente são iguais entre níveis de uma variável independente categórica (tratamento), controlando estatisticamente os efeitos de outras variáveis contínuas que não são de interesse primário. Tais variáveis contínuas são medidas em cada unidade experimental e são chamadas *covariáveis*. Idealmente, estas variáveis devem ser determinadas antes que os tratamentos tenham sido atribuídos às unidades experimentais ou, no mínimo, que os valores das covariáveis não sejam afetados pelos tratamentos aplicados [@Snedecor1967]. A ANCOVA\indt{ANCOVA} tem várias aplicações. No contexto da experimentação agronômica, ela é frequentemente utilizada reduzir a variabilidade no experimento pela contabilização da variabilidade nas unidades experimentais que não puderam ser controladas pelo design experimental.
Considere um experimento conduzido em uma área em que as unidades experimentais exibem considerável variabilidade que não pode ser controlada utilizando estratégias de bloqueio. O pesquisador acredita, digamos, baseado em experiências passadas, que uma ou mais características das unidades experimentais podem ajudar a descrever parte da variabilidade entre as unidades experimentais. Nesta condição, o pesquisador pode utilizar resultados de experimentos passados observados nas mesmas unidades experimentais --excluido o efeito de tratamento-- como uma covariável. Outra estratégia --embora um pouco distante em tempos de recursos financeiros limitados-- poderia ser a realização de uma análise de solo em cada unidade experimental e utilizar os resultados obtidos como covariáveis. Neste sentido, ao utilizar informações relacionadas as características fisico-químicas do solo como uma covariável, o pesquisador tenta explicar a variabilidade nas unidades experimentais que não podem ser convenientemente controladas por outra técnica experimental.
### Modelo estatístico
Em uma estrura de tratamentos fixos, unifatorial, conduzidos em delineamento inteiramente casualizado, o modelo da ANOVA\indt{ANOVA} tradicional visto anteriormente pode ser escrito da seguinte forma quando uma covariável numérica ($X$) também foi mensurada em cada unidade experimental.
$$
Y_{ij} = \mu + \tau_i + \beta(X_{ij} - \bar X_{..}) + \varepsilon_{ij}
$$
onde $Y_{ij}$ é a o valor observado do *i*-ésimo tratamento na *j*-ésima repetição; $\mu$ é a média geral; $\tau_i$ é o efeito do *i*-ésimo tratamento; $\beta$ é o coeficiente de regressão de *Y* em *X* e $\varepsilon_{ij}$ é o erro aleatório.
As pressuposições do modelo da ANCOVA\indt{ANCOVA} são as mesmas que a ANOVA, ou seja, aditividade dos efeitos de bloco e tratamento (em DBC), normalidade, homogeneidade e independêcia dos resíduos, em adição à duas importantes considerações adicionais: (i) independência entre a covariável e o efeito do tratamento; e (ii) homogeneidade dos coeficientes angulares da regressão, que serão tratados à partir daqui como *slopes*. Considerando que os pressupostos da ANOVA\indt{ANOVA} já são conhecidos, veremos com mais detalhes estes dois últimos à seguir.
### Independência entre a covariável e os efeitos de tratamento
Vimos anteriormente que covariável deve ser independente do efeito do tratamento. A figura 6 mostra três diferentes cenários. No primeiro (a) a represetação esquemática de um delineamento unifatorial conduzido em DIC é mostrada. Neste exemplo, a variância da variável resposta (RG) pode ser dividida em duas partes. Uma correspondente aos efeitos dos tratamentos e a outra devido ao erro experimental, ou variância não explicada pelos tratamentos. Aqui, vimos novamente que toda variância não explicada pelos termos do modelo irá compor o erro experimental. No segundo exemplo (b) um cenário ideal para ANCOVA\indt{ANCOVA} é representado. Nesta condição, a covariável compartilha sua variância apenas com o pouco da variância do RG que é atualmente inexplicado pelos efeitos dos tratamentos . Em outras palavras, é completamente independente dos tratamentos. Este cenário é o único em que a ANCOVA\indt{ANCOVA} tradicional é apropriada.
![Regra para análise de covariância](figures/covariavel.png)
O terceiro exemplo, (c) representa uma situação em que as pessoas costumam usar a ANCOVA\indt{ANCOVA} quando não deveriam. Nesta situação, o efeito da covariável se sobrepõe ao efeito do tratamento. Em outras palavras, o efeito do tratamento é confundido com o efeito da covariável. Em situções como esta, a covariável reduzirá (estatisticamente falando) o efeito do tratamento, pois explica uma parte da variação que seria atribuída ao efeito de tratamento. Assim, efeitos espúrios de tratamento podem surgir, comprometendo a interpretação da ANCOVA\indt{ANCOVA} [@Stevens2009].
A ANCOVA\indt{ANCOVA} nem sempre é uma solução magica. O problema do compartilhamento da variância da covariável com a variância de tratamento é comum e muitas vezes é ignorado ou incompreendido pelos pesquisadores [@Miller2001]. Em uma ampla revisão, Miller e Chapman citam muitas situações em que as pessoas aplicam a ANCOVA\indt{ANCOVA} de maneira incorreta. Recomendamos a leitura deste artigo. Felizmente, modelos generalizados de ANCOVA\indt{ANCOVA} que permitem tratar esta interação tratamento-covariável têm sido desenvolvidos [@Mayer2014], mas isto está além do objetivo deste material.
### Homogeneidade dos *slopes* da regressão
Baseado no modelo estatístico apresentado, percebe-se que quando uma ANCOVA\indt{ANCOVA} é realizada, buscamos uma relação geral entre a variável dependente e a covariável; ou seja, uma regressão global é ajustada aos dados, ignorando à que nível do tratamento uma determinada obsevação pertence. Ao ajustar esse modelo geral, supomos, portanto, que essa relação geral seja verdadeira para todos os níveis do fator tratamento. Por exemplo, se houver uma relação positiva (*slope* positivo) entre a covariável e a variável dependente no primeiro nível ($T_1$), presumimos que há uma relação positiva (*slope* positivo) em todos os outros níveis também. Vamos tentar tornar esse conceito um pouco mais concreto. A figura 7 mostra um gráfico de dispersão que exibe uma relação hipotética entre a covariável e a variável dependente em duas condições: heterogeneidade de *slope* (esquerda) e homogeneidade de *slope* (direita). Na primeira condição, a relação entre a variável dependente e covariável é positiva para os tratamentos $T_1$ e $T_2$, mas para o $T_3$, esta relação parece ser negativa. Esta é uma condição em que a utilização da ANCOVA\indt{ANCOVA} não é indicada. Na segunda condição, a relação entre a variável dependente e a covariável é muito semelhante entre os tratamentos.
```{r warning = FALSE, message = FALSE, echo=FALSE, fig.height=3.5, fig.align="center", fig.cap="Gráfico de dispersão e linhas de regressão entre a variável dependente e a covariável. As diferentes cores represetam três tratamentos hipotéticos."}
url <- "https://github.com/TiagoOlivoto/e-bookr/raw/master/data/data_R.xlsx"
cov2 <- import(url, sheet = "SCENARIO")
ggplot(cov2, aes(X, Y, col = TRAT))+
geom_point()+
geom_smooth(method = "lm", se = F)+
facet_wrap(~ Caso) +
theme(legend.position = "bottom",
panel.spacing = unit(0.5, "cm"))+
labs(x ="covariável", y = "variável dependente")
```
\indf{ggplot} \indf{geom\_point} \indf{geom\_smooth} \indf{facet\_wrap}
### Um exemplo numérico
Até aqui, passamos por uma breve introdução abordando o modelo mais simples de ANCOVA. Esta técnica, no entanto, pode ser utilizada em qualquer delineamento experimental. Para maiores informações, recomendamos a leitura de três bons materiais: [@Rutherford2001], um livro específico para ANCOVA; [@Field2012], pp. 462, com aplicação em R; e [@Scheiner2001], pp. 77, com aplicação em SAS.
Vamos agora, utilizando um exemplo numérico, demonstrar como esta análise pode ser realizada no software R e identificar como ela pode ser útil na análise de experimentos agronônicos. Os dados são apresentados em [@Snedecor1967], pp. 428 e são resultantes de um experimento com 6 tratamentos (cultivares), conduzido em DBC com 4 blocos. A variável resposta mensurada em cada unidade experimental foi gramas de espigas (GE) em adição a uma covariável, número de plantas por unidade experimental (NPLA). Para realizar uma ANCOVA, recomendamos que as seguintes etapas sejam seguidas:
\indt{Dicas}
```{block2, type = "dica"}
1. Assumindo que o R será utilizado, insira os dados e instale os pacotes necessários.
2. Explore os seus dados: Faça uso de gráficos para explorar o padrão encontrado nos dados. A sugestão aqui é utilizar gráficos do tipo boxplot, visto a riqueza de informações proporcionada por este tipo de gráficos.
3. Verifique se a covariável e os tratamentos são independentes: Execute uma ANOVA\indt{ANOVA} com a covariável como o variável dependente para verificar se a covariável não difere significativamente entre os níveis da variável independente (tratamento). Se um resultado significativo for observado, interrompa a análise aqui.
4. A ANCOVA: assumindo que tudo estava bem nas etapas 2 e 3, execute a análise principal de covariância.
5. Verifique a homogeneidade dos *slopes* da regressão: execute novamente a ANCOVA, incluindo, agora, a interação entre a variável independente e a covariável. Se esta interação é significativa, então você não pode assumir a homogeneidade dos *slopes* da regressão.
6. Compute as análises complementares: encontrada diferença significativa para tratamento na etapa 4 e assumindo que a etapa 5 indicou homogeneidade dos *slopes* da regressão, as análises complementares --como comparações múltiplas de médias-- podem então ser realizadas.
```
Vamos agora ver cada uma destas etapas detalhadamente.
**1. Download dos dados e pacotes necessários**
O seguinte código é utilizado para instalar/carregar os pacotes necessários bem como para fazer o upload dos dados e armazenar no dataframe `covar` \indf{p\_load}
```{r warning = FALSE, message = FALSE, echo=TRUE}
url <- "https://github.com/TiagoOlivoto/e-bookr/raw/master/data/data_R.xlsx"
# dados
covar <- import(url, sheet = "COVAR")
# duas primeiras colunas como fator
covar <- as_factor(covar, 1:2)
covar_ggplot <-
covar %>%
pivot_longer(names_to = "variable", values_to = "val", cols = c(NPUE, GE))
# Estrutura dos dados
covar_ggplot
```
\indf{mutate\_at} \indf{gather} \indf{gather} **2. Explorando os dados**
A construção de gráficos do tipo boxplot para a variável resposta e a covariável são importantes, pois permitem identificar a presença de possíveis *outliers* nos dados além de facilitar a visualização de padrões de associação entre as variáveis.
```{r warning = FALSE, message = FALSE, echo=TRUE, fig.width=6.5, fig.height=3, fig.align="center", fig.cap="Gráfico boxplot da variável independente (GE) e da covariável (NPUE) em cada nível do tratamento (T)."}
mean_var <-
covar_ggplot %>%
group_by(variable) %>%
summarise(mean = mean(val))
ggplot(covar_ggplot, aes(x = TRAT, y = val)) +
geom_boxplot(fill = "gray75", width = 0.6) +
facet_wrap(~ variable, scales = "free_y") +
geom_hline(data = mean_var, aes(yintercept = mean), linetype = "dashed") +
stat_summary(fun = mean,
geom = "point",
shape = 23,
fill = "red")+
labs(x = "Tratamentos", y = "valores observados")
```
\indf{summarise} \indf{geom\_hline} \indf{geom\_boxplot} \indf{stat\_summary} A linha tracejada horizontal representa a média geral de cada variável. Seis estatísticas são mostradas neste boxplot. A mediana (linha horizontal); a média (losango vermelho); as caixas inferior e superior correspondem ao primeiro e terceiro quartis (percentis 25 e 75, respectivamente); as linha vertical superior se estende da caixa até o maior valor, não maior que $1,5 \times {IQR}$ (onde IQR é a amplitude interquartílica). A linha vertical inferior se estende da caixa até o menor valor, de no máximo, $1,5 \times {IQR}$. Dados além destas linhas podem ser considerados *outliers*.
**3. Identificando a independência entre a covariável e os tratamentos**
A independência entre a covariavel e os efeitos de tratamento, demostrada graficamente na figura 6 é um importante pressuposto da ANCOVA. Esta independência é checada realizando uma ANOVA\indt{ANOVA} considerando a covariável como variável dependente. A função `aov()` é utilizada para o ajuste do modelo. O primeiro argumento, `NPUE`, é a variável resposta (neste caso a covariável) que queremos analisar. O operador `~` informa que os seguintes argumentos irão ser considerados como as fontes de variação no modelo. Neste caso, `TRAT` e `BLOCO` são incluídos.
```{r warning = FALSE, message = FALSE, echo=TRUE, fig.height=6, fig.width=6, fig.align="center"}
# modelo ANOVA convencional para a covariável
convencional <- aov(NPUE ~ TRAT + BLOCO, data = covar)
# Análise de variância
anova(convencional)
```
\indf{aov}
O resultado da ANOVA\indt{ANOVA} acima indica que a covariável é independente dos efeitos de tratamento. Neste caso, prosseguimos para o próximo passo. Se um resultado significativo for encontrado nesta etapa, a realização da ANCOVA\indt{ANCOVA} não é recomendada.