Documente Academic
Documente Profesional
Documente Cultură
Campus-Viçosa
Grupo de estudos em Fertilizantes
UFV
Ministrante
Odirley Rodrigues Campos
Viçosa-MG
Setembro/2016
1
Sumário
Introdução ......................................................................................................................................................................... 4
ANOVA no Excel e preparo dos dados ............................................................................................................................... 5
Teclas de atalho no Excel .............................................................................................................................................. 5
Exemplo 1: fatorial duplo em DBC ................................................................................................................................ 5
Instalando o Programa R .................................................................................................................................................. 9
Configurando a janela do Rstudio. ................................................................................................................................ 9
Teclas de atalho no R .................................................................................................................................................. 10
Busca por ajuda........................................................................................................................................................... 10
Operadores no R.......................................................................................................................................................... 11
Tipos de objetos .......................................................................................................................................................... 11
Introdução ao R ........................................................................................................................................................... 11
Fatorial duplo sem desdobramento ............................................................................................................................ 17
Usando o pacote ExpDes ......................................................................................................................................... 17
2
Fatorial triplo com um tratamento adicional.............................................................................................................. 74
Passo a passo .......................................................................................................................................................... 74
Bibliografia .................................................................................................................................................................. 80
3
Introdução
A utilização de planilhas eletrônicas é uma ótima alternativa para se trabalhar com grandes bancos de dados. O
Excel é uma ferramenta acessível a todos, porém na maioria das vezes subutilizada, dada a ampla variedade de
recursos que apresenta. O R é um software livre, disponível na internet para download. Apesar de não ser um
programa específico de estatística, esse tem sido muito utilizado com essa finalidade. Uma busca rápida no Google
lhe mostrará a riqueza de materiais disponibilizados na NET sobre o uso do R nas mais diversas áreas. Além de o
programa ser de acesso livre, muitos pacotes específicos do R estão sendo desenvolvidos para facilitar a vida do
usuário, grande parte desses pacotes seguem a mesma filosofia do programa, sendo acessíveis a todos. Tutoriais e
rotinas também podem ser encontradas na internet, uma vez copiados os comandos de uma rotina, esses podem ser
reeditados e adaptados as necessidades do usuário.
No R os mesmos resultados podem ser obtidos com rotinas muito diferentes. A tendência é que os comandos
fiquem cada vez menores e mais “automatizados” a medida que o usuário ganha experiência com o software. Os
procedimentos utilizados neste material certamente não são o meio mais rápido para se obter os quadros de ANOVA.
No entanto, optamos por mostrá-los passo a passo com o objetivo de facilitar a compreensão e a familiarização com
a linguagem do programa. Recomendamos que, ao ler as linhas de comandos maiores, o usuário faça a identificação
dos “núcleos dos comandos” e, a partir deles, ao editá-los no workspace, incremente-os do “centro para as laterais”.
Comumente a análise de variância é o procedimento utilizado para a decomposição dos efeitos em:
1- Desejáveis e controlados: efeitos de tratamentos
2- Indesejáveis, mas controlados: blocos
3- Indesejáveis e não controlados: que compõem o erro ou resíduo
Para esta decomposição faremos os cálculos para obtenção das somas de quadrados as quais serão colocadas no
quadro da ANOVA. Todos os cálculos serão feitos segundo a fórmula abaixo:
Eq. 1
Em que:
O primeiro termo “yi“ é valor total da variável resposta para o fator em estudo (seja ele: tratamento, bloco, fator 1,
fator 2) no nível “i”.
Vale ressaltar que, quando se trabalha com fatoriais, os tratamentos são obtidos pela combinação dos níveis dos
fatores de interesse. Em um primeiro exemplo consideraremos o experimento fatorial, em DBC, retirado de Pimentel
Gomes (2008), listado abaixo. O arquivo é mantido em formato .txt, pois é o formato de entrada do R program. Mas
inicialmente demonstraremos algumas ferramentas para manipulação dos dados e obtenção do quadro de ANOVA no
Excel.
Tabela 1:
bloc adu tor resp
1 0 0 18.0
2 0 0 8.6
3 0 0 9.4
4 0 0 11.4
1 1 0 20.6
2 1 0 21.0
3 1 0 18.6
4 1 0 20.6
1 0 1 19.6
2 0 1 15.0
3 0 1 14.6
4
4 0 1 15.8
1 1 1 19.2
2 1 1 19.6
3 1 1 18.4
4 1 1 20.2
Observe que temos os fatores bloco(fb), adubação (f1) e aplicação de torta de filtro (f2). Da combinação dos
fatores f1 com f2 teremos 2 2= 4 tratamentos. Mas para obtenção da SQ do resíduo (SQr) bastaria ter os
tratamentos.
Tabela 2:
FV N GL SQ QM F p-valor
Blocos 4
Trat 4
Resíduo
Total 16
Copie os dados da tab1 e cole no Excel. Se já não colar no formato de colunas, utilize o recurso na barra superior do
Excel (Fig. 1)
No Excel as casas decimais serão definidas por pontos “.”. Do contrário, ir em: arquivos>opções>avançado>usar
separador de sistema e definir “.” para decimal e “,“ para milhar (não recomendo usar espaço ao invés de vírgula,
pois poderá causar confusão ao manipular o arquivo de .txt para o Excel novamente).
Se tiver algum valor muito discrepante verifique seu banco de dados no Excel
e identifique-o. Poderá ser apenas um erro de digitação ao passar os dados
do caderno de anotações do experimento para a planilha de dados.
6
Monte a seguinte tabela no Excel.
Ʃyi)2
Utilize:
Depois calcule:
SQ conforme a Eq. 1
GL=N-1
QM= SQ/GL
F= QM/QMr (para fixar a célula com QMr use o “$”)
Se F<1, usar
p-valor= 1 - DISTF(F; GL fator em estudo; GL resíduo)
Se F<1, usar
p-valor= 1 – DIST.F.CD(F; GL fator em estudo; GL resíduo)
OBS: antes de mudar o fator de entrada na tab dinâmica certifique-se de copiar e colar como valores a linha de
cálculos feitos anteriormente. Do contrário os valores de SQ já calculados serão alterados.
7
Portanto, depois de
achar os efeitos simples,
devemos procurar pelo
efeito bruto f1f2,
conforme ilustrado ao
lado:
Para o desdobramento de f1 dentro dos níveis de f2 (f1 d/ f2=...) usaremos os filtros da tabela dinâmica, conforme
abaixo.
Adubo (f1) na
ausência de Torta (f2)
8
Instalando o Programa R
http://cran.r-project.org
Clique em download, depois escolha o espelho da UFPR
http://cran-r.c3sl.ufpr.br/
Se seu sistema operacional é o Windows escolha : Download R for Windows
OBS: Após instalação verifique se há um atalho na barra de tarefas do seu PC, caso não o encontre, procure pelo
ícone do Rstudio (símbolo circular com R dentro) e clique com o botão direito do mouse nele. Aparecerá uma opção:
inserir atalho na barra de tarefas.
9
Verifique as mudanças nas configurações da janela do Rstudio
No console serão
mostrados os resultados Mudando diretório
das operações e
Janela de edição comandos Session > set working
directory > choose
diretory
Teclas de atalho no R
“CTRL + enter” = run, roda o comando da linha onde está o cursor do mouse no workspace
“CTRL + 2” = cursor vai para a tela da direita
“CTRL + 1” = cursor vai para a tela da esquerda
“CTRL + L” = limpa a janela do console quando o cursor está nela
“End” = cursor vai para o final da linha de comandos
“Home” = cursor vai para o início da linha de comandos
“CTRL + C” = copia
“CTRL + V” = cola
“ESC”= finalizar o último comando incompleto, quando no console
“↑” = retorna o último comando usado ou acessa o histórico de comandos, quando o cursor está na janela do
console
? nome do comando
??nome do comando
help.search(“comando”)
args(comando)
10
Operadores no R
Operadores são utilizados de diversas formas.
#alguns operadores
=================================================================
OPERADOR DESCRIÇÃO PRIORIDADE
=================================================================
$ seleção de componentes Alta
[ [[ indexação |
^ potência |
- menos unitário |
: operador de seqüência |
%nome% operadores especiais |
* / multiplicação, divisão |
< > menor, maior |
<= >= menor ou igual,maior ou igual |
== != exatamente, diferente |
! não |
& && e |
| || ou |
~ fórmula estatística |
<<- <- -> = atribuição Baixa
%% modulo
%/% integer division
!= diferent
x && y id
x & y logical AND
x|y logical OR
x||y id.
xor(x, y) exclusive OR
=================================================================
Tipos de objetos
O R trabalha com objetos os quais armazenam ou recebem dados e operações.
vetores (numérico ou de caracteres)
matrizes (armazenam apenas números ou apenas caracteres, não aceita “células vazias”)
array (armazena apenas números, porém aceita “células vazias”)
data frames (armazena números e ou caracteres, não aceita “células vazias”)
listas (armazena conjuntos objetos diversos, incluindo textos)
Introdução ao R
No R studio é possível trabalhar com arquivos do tipo Rscript (.R) ou do tipo R Markdown(.Rmd). No file (canto
esquerdo superior) escolha o tipo de arquivo que você quer trabalhar. Indico o formato .R para quem tem mais
experiência e não pretende fazer muitos comentários durante a rotina ou não tem interesse em salvar os resultados no
próprio arquivo. Indico o formato .Rmd para aqueles que querem descrever mais detalhes sobre a rotina ou querem
salvá-la como um tutorial nos formatos do word, pdf ou HTML (clique em Knit Word). Além disso, esta última opção
permite mostrar os resultados das operações no arquivo de saída. Após salvar no formato Word, pdf ou HTML, veja
que o ## indica resultado das operações.
Observações:
Trabalhando com o .R, use #...----- para colocar títulos em blocos de operações:
11
# título qualquer ---------
...
Se abaixo do título existem muitas linhas de comando, clique na seta para baixo, entre o número da linha e o título.
Veja que os comandos ficam ocultos dentro do título permitidto uma visão mais geral da rotina
Trabalhando com o .Rmd, use ```{r}...``` para delimitar um bloco de operações. Neste caso podemos descrever
maiores detalhes fora do bloco de operações, ou seja, antes ou depois de ```{r}...```.
```{r}
# título qualquer
...
```
Vetores
c(1,2,3)
## [1] 1 2 3
v<-c(1,2,3) # cria um vetor concatenando os 3 elementos dentro dos parênteses
12
## [1] 6
mean(v) # media
## [1] 2
length(v) # quantos elementos temos em v? comprimento de v
## [1] 3
Matriz
matrix(1:12, ncol = 3) # gera uma matriz com 3 colunas
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
m1<- matrix(1:12, ncol = 3) # cria a matriz e armazena no objeto m1
m1
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
m1[, 2] # acessa qualquer linha da coluna 2 da m1
## [1] 5 6 7 8
Lista
list("fulano", m2<- matrix(1:6, ncol=3), "beltrano")
## [[1]]
## [1] "fulano"
##
## [[2]]
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
##
## [[3]]
## [1] "beltrano"
a0<- list("fulano", m2<- matrix(1:6, ncol=3), "beltrano")#cria uma lista e armazena no
obj a0
a0[[3]]
## [1] "beltrano"
a0[[2]] #no 2º obj de a0
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
a0[[2]][,2]#no 2º obj de a0 retornar a 2ª coluna
## [1] 3 4
13
Data frame
rbind(c("f1","f2","resp"),m1) # é uma matriz de caracteres
## [,1] [,2] [,3]
## [1,] "f1" "f2" "resp"
## [2,] "1" "5" "9"
## [3,] "2" "6" "10"
## [4,] "3" "7" "11"
## [5,] "4" "8" "12"
as.data.frame(rbind(c("f1","f2","resp"),m1))
## V1 V2 V3
## 1 f1 f2 resp
## 2 1 5 9
## 3 2 6 10
## 4 3 7 11
## 5 4 8 12
tes<-as.data.frame(rbind(c("f1","f2","resp"),m1))
tes
## V1 V2 V3
## 1 f1 f2 resp
## 2 1 5 9
## 3 2 6 10
## 4 3 7 11
## 5 4 8 12
Identifique no comando abaixo: 1ª operação? ( )soma; ( )tabela de médias; ( ) comprimento do vetor 2ª operação? (
)soma; ( )divisão; ( ) armazena resultado no obj test 3ª operação? ( )soma; ( )divisão; ( ) potência 4ª operação? (
)soma; ( ) tabela de médias; ( ) potência 5ª operação? ( )soma; ( )tabela de médias; ( ) comprimento do vetor 6ª
operação? ( )soma; ( )tabela de médias; ( ) divisão 7ª operação? ( )armazena resultado no obj test; ( )tabela de
médias;() divisão
teste<-((sum(tapply(a$resp,a$f1,mean)
)
15
)^2
)/length(tapply(a$resp,a$f1,mean))
Dica: observe o alinhamento dos parênteses, indentifique onde eles iniciam e fecham
teste<-((sum(tapply(a$resp,a$f1,mean)
)
)^2
)/(length(tapply(a$resp,a$f1,mean)
)
)
Utilizaremos um conjundo de dados retirados de Pimentel Gomes(2008), sendo um fatorial duplo com dois níves
dentro de cada fator.
a<-read.table("fat2.txt",h=T)# importando os dados
head(a) # conferindo do cabeçalho
## trat bloc f1 f2 resp
## 1 1 1 sa 0 18.0
## 2 1 2 sa 0 8.6
## 3 1 3 sa 0 9.4
## 4 1 4 sa 0 11.4
17
## 5 2 1 sa 1 19.6
## 6 2 2 sa 1 15.0
str(a)
## 'data.frame': 16 obs. of 5 variables:
## $ trat: int 1 1 1 1 2 2 2 2 3 3 ...
## $ bloc: int 1 2 3 4 1 2 3 4 1 2 ...
## $ f1 : Factor w/ 2 levels "ca","sa": 2 2 2 2 2 2 2 2 1 1 ...
## $ f2 : int 0 0 0 0 1 1 1 1 0 0 ...
## $ resp: num 18 8.6 9.4 11.4 19.6 15 14.6 15.8 20.6 21 ...
a
## trat bloc f1 f2 resp
## 1 1 1 sa 0 18.0
## 2 1 2 sa 0 8.6
## 3 1 3 sa 0 9.4
## 4 1 4 sa 0 11.4
## 5 2 1 sa 1 19.6
## 6 2 2 sa 1 15.0
## 7 2 3 sa 1 14.6
## 8 2 4 sa 1 15.8
## 9 3 1 ca 0 20.6
## 10 3 2 ca 0 21.0
## 11 3 3 ca 0 18.6
## 12 3 4 ca 0 20.6
## 13 4 1 ca 1 19.2
## 14 4 2 ca 1 19.6
## 15 4 3 ca 1 18.4
## 16 4 4 ca 1 20.2
Para rodar os dados transformaremos os vetores dos fatores em estudo em fator e a variável resposta em um vetor
numérico. Estes vetores erão armazenados nos objetos ft, fb, f1, f2. Ao nomear os objetos, prefira nomes pequenos,
pois evita erros e facilita a manipulação dos objetos no software. Além disso, outros objetos poderão ser criados a
partir dos primeiros, acrescentando-se apenas alguns caracteres a mais.
ft<-as.factor(a$trat)
fb<-as.factor(a$bloc)
f1<-as.factor(a$f1)# fator adubo
f2<-as.factor(a$f2) #fator torta de filtro
resp<-as.numeric(a$resp)
Existem pacotes que já executam algumas rotinas de análises. O pacote ExpDes pode ser encontrado no endereço
https://cran.r-project.org/web/packages/ExpDes.pt/index.html. Após instalar o pacote em seu PC é possível executar
as rotinas de análise de variância e testes de médi, apenas informando o nome dos vetores dos fatores e da variável
resposta em estudo. Além deste, existem opções para a escolha do teste de médias e dos valores de alpha a serem
18
utilizados. Uma vez instalado o pacote, atívi-o no seu R studio (require....) e use o comando ?fat...(em português) ou
?fat2.rbd (se em inglês) para procurar pela subrotina que mais se encaixa no seu conjunto de dados.
require(ExpDes)#ativando o pacote
## Loading required package: ExpDes
## Warning: package 'ExpDes' was built under R version 3.2.5
fat2.rbd(f1, f2, fb, resp,
quali = c(TRUE, TRUE), mcomp = "tukey",
fac.names = c("Adubo", "Torta"), sigT = 0.05, sigF = 0.05)
## ------------------------------------------------------------------------
## Legend:
## FACTOR 1: Adubo
## FACTOR 2: Torta
## ------------------------------------------------------------------------
##
##
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr>Fc
## Block 3 37.828 12.609 3.0099 0.087112
## Adubo 1 131.102 131.102 31.2956 0.000337
## Torta 1 12.603 12.602 3.0084 0.116864
## Adubo*Torta 1 27.563 27.562 6.5795 0.030434
## Residuals 9 37.702 4.189
## Total 15 246.797
## ------------------------------------------------------------------------
## CV = 12.1 %
##
## ------------------------------------------------------------------------
## Shapiro-Wilk normality test
## p-value: 0.5582699
## According to Shapiro-Wilk normality test at 5% of significance, residuals can be
considered normal.
## ------------------------------------------------------------------------
##
##
##
## Significant interaction: analyzing the interaction
## ------------------------------------------------------------------------
##
## Analyzing Adubo inside of each level of Torta
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr.Fc
## Block 3 37.8275 12.60917 3.0099 0.0871
## Torta 1 12.6025 12.60250 3.0084 0.1169
## Torta:Adubo 0 1 139.4450 139.44500 33.287 3e-04
## Torta:Adubo 1 1 19.2200 19.22000 4.588 0.0608
## Residuals 9 37.7025 4.18917
## Total 15 246.7975 16.45317
## ------------------------------------------------------------------------
##
##
19
##
## Adubo inside of the level 0 of Torta
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 1 20.2
## b 2 11.85
## ------------------------------------------------------------------------
##
##
## Adubo inside of the level 1 of Torta
##
## According to the F test, the means of this factor are statistical equal.
## Levels Means
## 1 1 19.35
## 2 2 16.25
## ------------------------------------------------------------------------
##
##
##
## Analyzing Torta inside of each level of Adubo
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr.Fc
## Block 3 37.8275 12.60917 3.0099 0.0871
## Adubo 1 131.1025 131.10250 31.2956 3e-04
## Adubo:Torta ca 1 1.4450 1.44500 0.3449 0.5714
## Adubo:Torta sa 1 38.7200 38.72000 9.2429 0.014
## Residuals 9 37.7025 4.18917
## Total 15 246.7975 16.45317
## ------------------------------------------------------------------------
##
##
##
## Torta inside of the level ca of Adubo
##
## According to the F test, the means of this factor are statistical equal.
## Levels Means
## 1 1 20.20
## 2 2 19.35
## ------------------------------------------------------------------------
##
##
## Torta inside of the level sa of Adubo
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 2 16.25
## b 1 11.85
## ------------------------------------------------------------------------
20
Fatorial duplo sem desdobramento
Passo a passo
Outra opção seria fazer a análise de variância montando-a passo a passo como demostrado abaixo. Apesar de não
ser um procedimento rápido, este é mais flexível, permitindo adaptá-lo para outros conjuntos de dados com diferentes
"desenhos do experimento". Usaremos os dados retirados de Pimentel Gomes (2008). Ao importar os dados não se
esqueça de colocar o nome do arquivo "fat2" e se é um arquivo de texto, coloque ".txt". O "h=T" indica head=TRUE,
ou seja, existe cabeçalho no arquivo de dados.
a1<-data.frame(ft,fb,f1,f2,resp)
Obteremos o quadrado médio do resíduo de forma rápida com o comando aov. Porém para obter a saída mais
comum utilizaremos o comando summary(...). Extrairemos o grau de liberdade e a soma de quadrados do resíduo
apenas para conferir com os resultados de nossa rotina passo a passo.
21
## [1] 9
sum(residuals(ane0)^2) # SQresiduo
## [1] 37.7025
Dividiremos a fórmula em duas partes, sendo (...)=term1 e, (...)=term2. Depois juntaremos as duas para obter a SQ.
term1<-sum((tapply(resp,fb,sum)^2)/tapply(resp,fb,length))
term2<-sum(tapply(resp,fb,sum))^2/sum(tapply(resp,fb,length))
SQ<-term1-term2
SQ
## [1] 37.8275
Observe que para calcular a SQ para tratamentos, apenas trocaríamos fb por ft na estrutura dos comandos acima. O
mesmo vale para f1 e f2. Para não utilizar os blocos de comandos acima para cada fator em estudo, utilizaremos a
função function(x){...return(...)} em que o objeto "curinga" x é o vetor do fator em estudo.
22
# calculando os gls --------
vgl<-c(glb<-length(levels(fb))-1,
glt<-length(levels(ft))-1,
gltotal<-length(levels(fb:f1:f2))-1,
glresiduo<-gltotal-glb-glt,
gl1<-length(levels(f1))-1,
gl2<-length(levels(f2))-1,
gl1i2<-gl1*gl2)
vgl
## [1] 3 3 15 9 1 1 1
Sabemos que o QM=SQ/GL. Os valores calculados serão armazenados em um vetor vqm, do qual sabemos que o 4º
valor na 1ª linha (vqm[4,1]) é o QM do resíduo. Sabemos que o F calculado é obtido por Fcal=QM do fator em
estudo/QMr. Armazenamos os valores de Fcal num vetor chamdo vfcal. Posteriormente fazemos o teste F usando o
comando pf(...). Os procedimentos acima listados são realizados um a um para verificação dos resultados. Em
seguida reunimos os diversos objetos com o uso da comando cbind(....). As aspas " " indicam que mesmo os números
estão sendo reconhecidos como caracteres pelo software. Isto é consequência do tipo de objeto, pois as matrizes são
compostas de apenas um tipo de objeto, ou númerico ou caracter.
# identificando as colunas
rbind(c("FV", "SQ", "GL", "QM", "Fcal", "P_valor"),
cbind(vsq,
vgl,
vqm<-vsq/vgl,
vfcal<-vqm/vqm[4,1],
p_valor<-pf(vfcal, vgl, gltotal-glb-glt,lower.tail = FALSE)))
## Warning in rbind(c("FV", "SQ", "GL", "QM", "Fcal", "P_valor"), cbind(vsq, :
## number of columns of result is not a multiple of vector length (arg 1)
## vgl
## "FV" "SQ" "GL" "QM"
## vb "37.8274999999994" "3" "12.6091666666665" "3.00994629003374"
## vt "171.2675" "3" "57.0891666666666" "13.6278098269344"
## vtotal "246.7975" "15" "16.4531666666666" "3.92755122339363"
## vresiduo "37.7025000000003" "9" "4.1891666666667" "1"
## vf1 "131.102499999999" "1" "131.102499999999" "31.2956037398046"
## vf2 "12.6025" "1" "12.6025" "3.00835488362837"
## vf1i2 "27.5625000000009" "1" "27.5625000000009" "6.57947085737036"
##
23
## "Fcal"
## vb "0.0871123524548996"
## vt "0.00107480616992565"
## vtotal "0.0219051668686572"
## vresiduo "0.5"
## vf1 "0.000336744197665661"
## vf2 "0.116863705339496"
## vf1i2 "0.0304340412024341"
Utilizaremos o comando round(...,dig=3), internamente, para arredondar os valores obtidos até 3 casas decimais.
Para retirar as " " transformaremos o objeto em um data frame, pois os data frames aceitam números e caracteres ao
mesmo tempo.
24
# anova dos desdobramentos -----
levels(f1) # lembranod os níveis de f1
## [1] "ca" "sa"
levels(f2)
## [1] "0" "1"
# fazendo recortes no banco de dados
f2_0<-subset(a1, f2=="0") #f1 qndo torta =0
f2_1<-subset(a1, f2=="1") #f1 qndo torta =1
Criaremos um nova function(..){...} para calcular as SQ, GL, QM, Fcal e Pvalores para o fator em estudo de acordo
com os recortes feitos. Observe na função que o fator f1é o fator em estudo dentro dos níveis de f2. Portanto nosso
"objeto curinga" será o própiro recorte (f2_0...) do banco de dados(a1).
fu2(f2_0)
## [1] 139.445 1.000 139.445 33.287 0.000
fu2(f2_1)
## [1] 19.220 1.000 19.220 4.588 0.061
Identificando colunas
25
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] "FV" "SQ" "GL" "QM" "Fcal" "P_valor"
## [2,] "f1 d/f2=0" "139.445" "1" "139.445" "33.287" "0"
## [3,] "f1 d/f2=1" "19.22" "1" "19.22" "4.588" "0.061"
Neste caso o teste F é conclusivo, pois temos apenas um contraste. Se você quer saber quais são as médias utilize o
comando tapply(....) para os recortes definidos anteriormente
Usando o ExpDes
Utilizaremos os dados simulados de um fatorial duplo, em dbc. Os fatores em estudo são 2 progênies de plantas (A,B)
e 4 tipos de adubo (1, 2, 3, 4). As variáveis resposta são a produção de matéria seca da parte aérea(msf) ou de
caule(msc) de mudas de eucalipto. O objetivo é saber qual tipo de adubo permite maior produção de folhas ou caule
dentro dos níveis de progênies.
Para importar os dados lembre-se que o diretório deve ser reconhecido pelo software. Para fazê-lo vá em:
Session>Set Working Directory> Choose Directory> escolha a pasta onde está o arquivo de dados
26
## $ adub: int 1 2 3 4 1 2 3 4 1 2 ...
## $ msf : num 12.98 5.47 12.64 6.33 25.13 ...
## $ msc : num 6.6 2.36 6.95 3.38 15.18 ...
Utilizaremos o pacote ExpDes. Se este já estiver instalado no seu PC, utilize o comando require(...) para ativá-lo.
# usando o ExpDes
require(ExpDes)
## Loading required package: ExpDes
## Warning: package 'ExpDes' was built under R version 3.2.5
Após ativar o ExpDes, digite na janela do console o comando ??fat... e veja qual opção melhor se encaixa aos seus
dados. Aqui pode haver alguma variação em fat2.rbd ou fat2.dbc, se você instalou a versão do pacote em inglês ou
português.
??fat2.rbd
## starting httpd help server ...
## done
Após identificar, na janela do help, qual subrotina se encaixa aos seus dados, copie-a e cole na janelo do seu editor.
Lembrando os nomes dados aos vetores no objeto a1, informe quais são os vetores dos fatores (f1, f2...), qual é a
variável resposta em estudo (resp). Informe ainda qual o tipo de teste (tukey), quais os nomes de saída dos fatores (em
fac.names("Fulano", "Beltrano") e quais são os níveis de significância para os testes F e t.
Dica 1: se o teste F não foi significativo, o ExpDes não faz o desdobramento. Para forçá-lo a fazer o desdobramento
coloque o nível de significância mais alto.
Dica 2: este pacote também faz ajuste de modelos até o 3º grau. Para fazê-lo indique no comando quali=c(...) qual
dos fatores é quantitativo. Basta colocar FALSE no lugar de TRUE
fat2.rbd(f1, f2, fb, resp,
quali = c(TRUE, TRUE), mcomp = "tukey",
fac.names = c("F1", "F2"), sigT = 0.05, sigF = 0.05)
## ------------------------------------------------------------------------
## Legend:
27
## FACTOR 1: F1
## FACTOR 2: F2
## ------------------------------------------------------------------------
##
##
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr>Fc
## Block 3 128.82 42.940 1.6543 0.20725
## F1 1 29.36 29.357 1.1310 0.29964
## F2 3 693.87 231.291 8.9106 0.00053
## F1*F2 3 32.07 10.688 0.4118 0.74624
## Residuals 21 545.09 25.957
## Total 31 1429.21
## ------------------------------------------------------------------------
## CV = 42.21 %
##
## ------------------------------------------------------------------------
## Shapiro-Wilk normality test
## p-value: 0.698664
## According to Shapiro-Wilk normality test at 5% of significance, residuals can be
considered normal.
## ------------------------------------------------------------------------
##
## Not significant interaction: analyzing the simple effect
## ------------------------------------------------------------------------
## F1
## According to the F test, the means of this factor are statistical equal.
## Levels Means
## 1 A 11.11187
## 2 B 13.02750
## ------------------------------------------------------------------------
## F2
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 1 17.99
## a 4 13.1075
## a 3 12.22375
## b 2 4.9575
## ------------------------------------------------------------------------
E para a variável resposta msc como seria? Volte no bloco de comandos "Transformando dados em fator" e mude a
variável resposta de a msf para msc. Execute novamente todos os comandos daquela linha para baixo.
Passo a passo
Utilizaremos os dados simulados de um fatorial duplo, em dbc. Os fatores em estudo são 2 progênies de plantas (A,B)
e 4 tipos de adubo (1, 2, 3, 4). As variáveis resposta são a produção de matéria seca da parte aérea(msf) ou de
caule(msc) de mudas de eucalipto. O objetivo é saber qual tipo de adubo permite maior produção de folhas ou caule
dentro dos níveis de progênies.
28
Neste exemplo, calcularemos o QMr atraves do comando aov(...). Mas criaremos rotinas que irão calcular novamente
as somas de quadrados de blocos, tratamentos e novamente do residuo, sendo estes reunidos em uma matriz mais
parecida com os quadros de anova que estamos acostumados. Faremos o mesmo para os demais fatores (f1 e f2),
para interação f12 e para os desdobramentos. Depois utilizaremos o pacote agricolae para fazer os testes de médias.
No entanto devemos lembrar que a decomposiçõa dos efeitos dos fatores na anova não altera nossos procedimentos
para o teste de média. Pois para o teste de média bastaria ter o valor do QMr.
Aplicando a fu1 para SQs principais e reunindo por linhanda com rbind(...)
vsq<-rbind(vb<-fu1(fb),
vt<-fu1(ft),
vtotal<-fu1(fb:f1:f2),
vresiduo<-fu1(fb:f1:f2)-fu1(ft)-fu1(fb),
vf1<-fu1(f1),
vf2<-fu1(f2),
vf1i2<-fu1(f1:f2)-fu1(f1)-fu1(f2))
Calculando os gls
vgl<-c(glb<-length(levels(fb))-1,
glt<-length(levels(ft))-1,
gltotal<-length(levels(fb:f1:f2))-1,
glresiduo<-gltotal-glb-glt,
gl1<-length(levels(f1))-1,
gl2<-length(levels(f2))-1,
gl1i2<-gl1*gl2)
Identificando as colunas
colnames(ane1) #veja que o vetor de GL tem nomes
## [1] "" "vgl" "" "" ""
colnames(ane1)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
ane1
## SQ GL QM Fcal P_valor
## bloc 128.81966 3 42.93989 1.6542848 0.2072465061
## trat 755.29512 7 107.89930 4.1568852 0.0051398843
## total 1429.20690 31 46.10345 1.7761629 0.0863900570
## res 545.09212 21 25.95677 1.0000000 0.5000000000
## f1 29.35695 1 29.35695 1.1309942 0.2996401348
## f2 693.87281 3 231.29094 8.9106218 0.0005274477
## f1i2 32.06536 3 10.68845 0.4117791 0.7462352098
Arredondando os valores
round(ane1,dig=3)
## SQ GL QM Fcal P_valor
## bloc 128.820 3 42.940 1.654 0.207
## trat 755.295 7 107.899 4.157 0.005
## total 1429.207 31 46.103 1.776 0.086
## res 545.092 21 25.957 1.000 0.500
## f1 29.357 1 29.357 1.131 0.300
## f2 693.873 3 231.291 8.911 0.001
## f1i2 32.065 3 10.688 0.412 0.746
31
## ft fb f1 f2 resp
## 1 1 1 A 1 12.98
## 2 2 1 A 2 5.47
## 3 3 1 A 3 12.64
## 4 4 1 A 4 6.33
## 9 1 2 A 1 10.80
## 10 2 2 A 2 7.06
## 11 3 2 A 3 14.50
## 12 4 2 A 4 23.66
## 17 1 3 A 1 22.27
## 18 2 3 A 2 2.51
## 19 3 3 A 3 13.62
## 20 4 3 A 4 10.87
## 25 1 4 A 1 19.39
## 26 2 4 A 2 5.01
## 27 3 4 A 3 8.07
## 28 4 4 A 4 2.61
tk<-HSD.test(f1_a$resp,f1_a$f2,glresiduo,vresiduo/glresiduo,
alpha=0.05,group=TRUE, main = NULL,console=FALSE)
tk[5]
## $groups
## trt means M
## 1 1 16.3600 a
## 2 3 12.2075 ab
## 3 4 10.8675 ab
## 4 2 5.0125 b
f2d/f1_b
tk<-HSD.test(f1_b$resp,f1_b$f2,glresiduo,vresiduo/glresiduo,
alpha=0.05,group=TRUE, main = NULL,console=FALSE)
tk[5]
## $groups
## trt means M
## 1 1 19.6200 a
## 2 4 15.3475 a
## 3 3 12.2400 ab
## 4 2 4.9025 b
Usaremos os dados simulados de um fatorial triplo com 12 tratamentos, sendo: 3 cultivares (A, B, C); 2 níveis de
calagem (0, 1); 2 níveis de aplicação de fósforo (0, 1); 3 variáveis resposta: produtividade (t/ha), teor de K no solo e
teor de N no solo
Tukey f1d/f2...d/f3...
Fazendo os recortes
f23_00<-subset(a1,f2=="0" & f3=="0")
f23_10<-subset(a1,f2=="1" & f3=="0")
f23_01<-subset(a1,f2=="0" & f3=="1")
f23_11<-subset(a1,f2=="1" & f3=="1")
Criando uma função para o teste de Tukey considerando os desdobramentos. Lembre-se que o "objeto curinga" será o
recorte
futkd1<-function(x){
tkd1<-HSD.test(x$resp, x$f1, GLr, QMr,
alpha = 0.05, group=TRUE,
main = NULL,console=FALSE)
tk<-tkd1[[5]]
return(tk)}
Aplicando a futkd1
35
futkd1(f23_00)
## trt means M
## 1 C 24.53333 a
## 2 B 19.90000 a
## 3 A 12.56667 b
futkd1(f23_10)
## trt means M
## 1 A 33.63333 a
## 2 B 32.50000 a
## 3 C 30.16667 a
futkd1(f23_01)
## trt means M
## 1 C 44.00000 a
## 2 B 36.20000 b
## 3 A 34.43333 b
futkd1(f23_11)
## trt means M
## 1 A 67.23333 a
## 2 B 50.86667 b
## 3 C 47.76667 b
Atividade 1: Veja que construimos 4 estruturas semelhantes com o comando HSD.test. Nelas só temos variação do
recorte com os dados de entrada. Seria possível "automatizar" ainda mais aquela rotina?
36
Atividade 4: Faça o teste de correlação entre as 3 variáveis resposta.
head(a) # lembrando quais são as variáveis resposta
## trat bloc cul cal fos tha ksolo nsolo
## 1 1 1 A 0 0 17.2 23.71 20.34
## 2 2 1 A 0 1 32.4 59.22 21.23
## 3 3 1 A 1 0 31.3 64.91 35.80
## 4 4 1 A 1 1 64.1 40.36 72.67
## 5 5 1 B 0 0 19.3 26.15 33.16
## 6 6 1 B 0 1 33.8 68.51 46.30
require(agricolae)# o teste está em subrotinas do agricolae
Passo a passo
Fatorial triplo com dados simulados com 12 tratamentos, sendo: 3 cultivares; 2 níveis de calagem; 2 níveis de
aplicação de fósforo
a<-read.table("fat3_milho_sil.txt",h=T)# importando os dados
head(a)
## trat bloc cul cal fos tha ksolo nsolo
## 1 1 1 A 0 0 17.2 23.71 20.34
## 2 2 1 A 0 1 32.4 59.22 21.23
## 3 3 1 A 1 0 31.3 64.91 35.80
## 4 4 1 A 1 1 64.1 40.36 72.67
## 5 5 1 B 0 0 19.3 26.15 33.16
## 6 6 1 B 0 1 33.8 68.51 46.30
str(a)
## 'data.frame': 36 obs. of 8 variables:
## $ trat : int 1 2 3 4 5 6 7 8 9 10 ...
## $ bloc : int 1 1 1 1 1 1 1 1 1 1 ...
## $ cul : Factor w/ 3 levels "A","B","C": 1 1 1 1 2 2 2 2 3 3 ...
## $ cal : int 0 0 1 1 0 0 1 1 0 0 ...
## $ fos : int 0 1 0 1 0 1 0 1 0 1 ...
## $ tha : num 17.2 32.4 31.3 64.1 19.3 33.8 29.3 52 26.6 40.4 ...
## $ ksolo: num 23.7 59.2 64.9 40.4 26.1 ...
## $ nsolo: num 20.3 21.2 35.8 72.7 33.2 ...
38
f2<-as.factor(a$cal) # calagem
f3<-as.factor(a$fos) # fósforo
resp<-as.numeric(a$tha)# variável resposta
39
vf23<-fu1(f2:f3)-fu1(f2)-fu1(f3),
vf123<-fu1(f1:f2:f3)-vf1-vf2-vf3-vf12-vf13-vf23)
vf123=fu1(f1:f2:f3)-fu1(f1:f2)-fu1(f1:f3)-fu1(f2:f3)+fu1(f1)+fu1(f2)+fu1(f3)
Conferindo os resultados:
Lembre-se de que os tratamentos encerram todos os efeitos simples da interação, portanto,
SQ(simples+interação)=SQtratamentos, então:
vt<-vf1+vf2+vf3+vf12+vf13+vf23+vf123 vt
Calculando os gls
vgl<-c(glb<-length(levels(fb))-1,
glt<-length(levels(ft))-1,
gltotal<-length(levels(fb:f1:f2:f2))-1,
glresiduo<-gltotal-glb-glt,
gl1<-length(levels(f1))-1,
gl2<-length(levels(f2))-1,
gl3<-length(levels(f3))-1,
gl1i2<-gl1*gl2,
gl1i3<-gl1*gl3,
gl2i3<-gl2*gl3,
gl123<-gl1*gl2*gl3)
Identificando as colunas
colnames(ane1)
40
## [1] "" "vgl" "" "" ""
colnames(ane1)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
ane1
## SQ GL QM Fcal P_valor
## bloc 21.24667 2 10.62333 1.636113 2.175559e-01
## trat 7178.73667 11 652.61242 100.509684 3.571169e-16
## total 7342.83000 35 209.79514 32.310821 1.532895e-12
## res 142.84667 22 6.49303 1.000000 5.000000e-01
## f1 30.38000 2 15.19000 2.339432 1.198972e-01
## f2 2049.07111 1 2049.07111 315.580094 1.561996e-14
## f3 4044.96000 1 4044.96000 622.969524 1.242833e-17
## f1i2 751.01556 2 375.50778 57.832439 1.736180e-09
## f1i3 194.24000 2 97.12000 14.957577 7.914325e-05
## f2i3 35.60111 1 35.60111 5.482973 2.866498e-02
## f1i2i3 73.46889 2 36.73444 5.657519 1.041372e-02
Arredondando os valores
round(ane1,dig=3)
## SQ GL QM Fcal P_valor
## bloc 21.247 2 10.623 1.636 0.218
## trat 7178.737 11 652.612 100.510 0.000
## total 7342.830 35 209.795 32.311 0.000
## res 142.847 22 6.493 1.000 0.500
## f1 30.380 2 15.190 2.339 0.120
## f2 2049.071 1 2049.071 315.580 0.000
## f3 4044.960 1 4044.960 622.970 0.000
## f1i2 751.016 2 375.508 57.832 0.000
## f1i3 194.240 2 97.120 14.958 0.000
## f2i3 35.601 1 35.601 5.483 0.029
## f1i2i3 73.469 2 36.734 5.658 0.010
Qual cultivar produz mais dentro de cada nível de calagem e adubo? desdobraremos f1 d/f2... d/f3...
41
Fazendo os recortes no banco de dados
f23_00<-subset(a1, f2=="0"&f3=="0") #f1 d/f2=0 d/f3=0
f23_10<-subset(a1, f2=="1"&f3=="0") #f1 d/f2=1 d/f3=0
f23_01<-subset(a1, f2=="0"&f3=="1") #f1 d/f2=0 d/f3=1
f23_11<-subset(a1, f2=="1"&f3=="1") #f1 d/f2=1 d/f3=1
Nomeando colunas
colnames(ane2)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
row.names(ane2)<-c("f1d/f2=0 d/f3=0",
42
"f1d/f2=1 d/f3=0",
"f1d/f2=0 d/f3=1",
"f1d/f2=1 d/f3=1")
ane2
## SQ GL QM Fcal P_valor
## f1d/f2=0 d/f3=0 218.447 2 109.223 16.822 0.000
## f1d/f2=1 d/f3=0 18.747 2 9.373 1.444 0.258
## f1d/f2=0 d/f3=1 155.482 2 77.741 11.973 0.000
## f1d/f2=1 d/f3=1 656.429 2 328.214 50.549 0.000
Neste caso o teste F não é conclusivo, pois temos mais de um contraste para níveis de f1. Então faremos o teste de
Tukey para as médias de f1 d/ dos níveis f2 e f3
tapply(f23_00$resp, f23_00$f1, mean) # mostra as medias
## A B C
## 12.56667 19.90000 24.53333
tapply(f23_01$resp, f23_01$f1, mean)
## A B C
## 34.43333 36.20000 44.00000
tapply(f23_10$resp, f23_10$f1, mean)
## A B C
## 33.63333 32.50000 30.16667
tapply(f23_11$resp, f23_11$f1, mean)
## A B C
## 67.23333 50.86667 47.76667
fu3<-function(x){
tk<-HSD.test(x$resp,x$f1,glresiduo,QMr,
alpha=0.05,group=TRUE, main = NULL,console=FALSE)
return(tk[5])
}
43
## $groups
## trt means M
## 1 C 44.00000 a
## 2 B 36.20000 b
## 3 A 34.43333 b
fu3(f23_10)
## $groups
## trt means M
## 1 A 33.63333 a
## 2 B 32.50000 a
## 3 C 30.16667 a
fu3(f23_11)
## $groups
## trt means M
## 1 A 67.23333 a
## 2 B 50.86667 b
## 3 C 47.76667 b
Usando o ExpDes
Exemplo adaptado de Banzatto & Kronka (2008), sendo resp= produtividade de milho em kg/ha; bloc= blocos (4).
Fatorial (4 x 3), sendo:
4 adubos(f1)= adubaçao com salitre do chile (sc), sulfato de amonio (sa), ureia(u), calnitro (cn)
3 dos(f2)= doses de N ( 10, 40 ou 70 kg/ha)
Os objetivos são:
1. comparar as fontes(f1) independentemente de dose(f2)
2. comparar as doses(f2) dentro de cada fonte(f1)
3. comparar as fontes(f1) dentro de cada dose(f2)
Importando os dados.
a<-read.table("par_sub2.txt", h=T)
head(a)
## par spar bloc adu dos resp
## 1 1sc 1sc10 1 sc 10 2747
## 2 1sc 1sc40 1 sc 40 2889
## 3 1sc 1sc70 1 sc 70 3578
## 4 1sa 1sa10 1 sa 10 3164
## 5 1sa 1sa40 1 sa 40 3831
## 6 1sa 1sa70 1 sa 70 4107
str(a)
## 'data.frame': 48 obs. of 6 variables:
## $ par : Factor w/ 16 levels "1cn","1sa","1sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ spar: Factor w/ 48 levels "1cn10","1cn40",..: 7 8 9 4 5 6 10 11 12 1 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
44
## $ adu : Factor w/ 4 levels "cn","sa","sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ dos : int 10 40 70 10 40 70 10 40 70 10 ...
## $ resp: int 2747 2889 3578 3164 3831 4107 1902 2547 3364 2978 ...
Observe acima que os vetores das parcelas e subparcelas foram definidos anteriormente no próprio Excel. Nesta
rotina não usaremos estes vetores, pois o ExpDes já faz as combinações com os fatores em estudo para obtenção das
parcelas e subparcelas. Porém manteremos a estrutura da tabela de dados para ser utilizada em exemplos posteriores
onde aqueles vetores serão necessários.
Tranformando em fator
fspar<-as.factor(a$spar) # subparcelas
fpar<-as.factor(a$par) # parcelas
fb<-as.factor(a$bloc)
f1<-as.factor(a$adu)
f2<-as.factor(a$dos)
resp<-as.numeric(a$resp)
Conferindo o obejeto a1
length(levels(fspar)) # são 48 subparcelas
## [1] 48
length(levels(fpar)) # são 16 parcelas
## [1] 16
length(levels(fb)) # são 4 blocos
## [1] 4
Usaremos o pacote ExpDes. Ao ativá-lo poderá aparecer uma mensagem de advertência a respeito da versão do R
mais recomendada. Mas usaremos a versão do R3.2.0 sem maiores problemas.
require(ExpDes)
## Loading required package: ExpDes
## Warning: package 'ExpDes' was built under R version 3.2.5
No consol, faça uma busca com a palavra-chave split, relacionada a parcelas subdivididas. rbd diz respeito a
radomized blocs design
??split2.rbd
## starting httpd help server ...
## done
Copie a estrutura da rotina na janela do help e cole no editor do Rstudio. Posteriormente informe quais são os
vetores dos fatores (f1,f2,fb) e da variável resposta(resp) em estudo. Informe se os fatores são qualitativos(TRUE) ou
quantitativos(FALSE); se qualitativos qual o teste de médias será usado (tukey); em fac.names informe quais os
nomes de saída dos fatores; e finalmente defina quais os níveis de alpha para o teste F e Tukey(ou para o teste de
médias).
split2.rbd(f1, f2, fb, resp,
quali = c(TRUE, TRUE), mcomp = "tukey",
fac.names = c("Adubo", "Dose"), sigT = 0.05, sigF = 0.05)
## ------------------------------------------------------------------------
## Legend:
## FACTOR 1 (plot): Adubo
45
## FACTOR 2 (split-plot): Dose
## ------------------------------------------------------------------------
##
## ------------------------------------------------------------------------
## $`Analysis of Variance Table\n-----------------------------------------------------
-------------------\n`
## DF SS MS Fc Pr(>Fc)
## Adubo 3 2486093 828698 2.5815 0.11818
## Block 3 3198892 1066297 3.3216 0.07058 .
## Error a 9 2889146 321016
## Dose 2 4703630 2351815 31.5765 < 2e-16 ***
## Adubo*Dose 6 1286153 214359 2.8781 0.02945 *
## Error b 24 1787519 74480
## Total 47 16351434
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## ------------------------------------------------------------------------
## CV 1 = 18.63581 %
## CV 2 = 8.976448 %
##
##
##
## Significant interaction: analyzing the interaction
## ------------------------------------------------------------------------
##
## Analyzing Adubo inside of each level of Dose
## ------------------------------------------------------------------------
## DF SS MS Fc p.value
## Adubo : Dose 10 3.00000 933524.5 311174.8 1.986323 0.152462
## Adubo : Dose 40 3.00000 1856524.2 618841.4 3.950252 0.025249
## Adubo : Dose 70 3.00000 982197.5 327399.2 2.089888 0.13765
## Pooled Error 17.84912 2796221.2 156658.7
## ------------------------------------------------------------------------
##
##
## Adubo inside of Dose 10
## ------------------------------------------------------------------------
## According to F test, the means of this factor are not different.
##
## Levels Means
## 1 cn 2732.25
## 2 sa 3045.50
## 3 sc 2666.75
## 4 u 2365.50
## ------------------------------------------------------------------------
##
## Adubo inside of Dose 40
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a sa 3541
## ab u 2865
## ab sc 2752.25
## b cn 2687.25
## ------------------------------------------------------------------------
46
##
## Adubo inside of Dose 70
## ------------------------------------------------------------------------
## According to F test, the means of this factor are not different.
##
## Levels Means
## 1 cn 3193.50
## 2 sa 3619.00
## 3 sc 3776.75
## 4 u 3238.75
## ------------------------------------------------------------------------
##
##
## Analyzing Dose inside of each level of Adubo
## ------------------------------------------------------------------------
## DF SS MS Fc p.value
## Dose : Adubo cn 2 628087.5 314043.75 4.216486 0.026958
## Dose : Adubo sa 2 774008.7 387004.33 5.196086 0.013336
## Dose : Adubo sc 2 3052014.0 1526007.00 20.488823 6e-06
## Dose : Adubo u 2 1535673.2 767836.58 10.309303 0.000587
## Error b 24 1787519.3 74479.97
## ------------------------------------------------------------------------
##
##
## Dose inside of Adubo cn
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 70 3193.5
## ab 10 2732.25
## b 40 2687.25
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
##
##
## Dose inside of Adubo sa
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 70 3619
## a 40 3541
## b 10 3045.5
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
##
##
## Dose inside of Adubo sc
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 70 3776.75
## b 40 2752.25
## b 10 2666.75
## ------------------------------------------------------------------------
47
## ------------------------------------------------------------------------
##
##
## Dose inside of Adubo u
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 70 3238.75
## a 40 2865
## b 10 2365.5
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
Os objetivos são:
1. comparar as fontes(f1) independentemente de dose(f2)
2. comparar as doses(f2) dentro de cada fonte(f1)
3. comparar as fontes(f1) dentro de cada dose(f2)
Importando os dados
a<-read.table("par_sub2.txt", h=T)
head(a)
## par spar bloc adu dos resp
## 1 1sc 1sc10 1 sc 10 2747
## 2 1sc 1sc40 1 sc 40 2889
## 3 1sc 1sc70 1 sc 70 3578
## 4 1sa 1sa10 1 sa 10 3164
## 5 1sa 1sa40 1 sa 40 3831
## 6 1sa 1sa70 1 sa 70 4107
str(a)
## 'data.frame': 48 obs. of 6 variables:
## $ par : Factor w/ 16 levels "1cn","1sa","1sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ spar: Factor w/ 48 levels "1cn10","1cn40",..: 7 8 9 4 5 6 10 11 12 1 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
## $ adu : Factor w/ 4 levels "cn","sa","sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ dos : int 10 40 70 10 40 70 10 40 70 10 ...
## $ resp: int 2747 2889 3578 3164 3831 4107 1902 2547 3364 2978 ...
Tranformando em fator
fspar<-as.factor(a$spar) # subparcelas
fpar<-as.factor(a$par) # parcelas
fb<-as.factor(a$bloc)
48
f1<-as.factor(a$adu)
f2<-as.factor(a$dos)
resp<-as.numeric(a$resp)
Conferindo o objeto a1
length(levels(fspar))
## [1] 48
length(levels(fpar))
## [1] 16
length(levels(fb))
## [1] 4
Anova geral
ane00<-summary(aov (resp~fb+(f1+f2)^2+Error(fb/f1)))
ane00
##
## Error: fb
## Df Sum Sq Mean Sq
## fb 3 3198892 1066297
##
## Error: fb:f1
## Df Sum Sq Mean Sq F value Pr(>F)
## f1 3 2486093 828698 2.581 0.118
## Residuals 9 2889146 321016
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## f2 2 4703630 2351815 31.576 1.9e-07 ***
## f1:f2 6 1286153 214359 2.878 0.0295 *
## Residuals 24 1787519 74480
49
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
50
GLrb<-df.residual(ane01[[4]]) # GLresiduo_b
SQrb<-sum(residuals(ane01[[4]])^2) # SQresidua_b
QMrb<-SQrb/GLrb
QMrb
## [1] 74479.97
Comentário: Já obtivemos os GLr e QMr, se não temos interesse em realizar a decomposição dos efeitos dos fatores e
testá-los pelo teste F,então partiremos diretamente para o teste de médias.
Recortes de interesse
f1_cn<-subset(a1, f1=="cn")
f1_sa<-subset(a1, f1=="sa")
f1_sc<-subset(a1, f1=="sc")
f1_u<-subset(a1, f1=="u")
Teste de Tukey para f2 d/f1, ou seja, dose d/adubo. Lembre-se que já fizemos os recortes de a1 e que neste caso
usaremos o GLrb e QMrb
futk1<-function(x){
tk<-HSD.test(x$resp,x$f2,GLrb,QMrb,alpha = 0.05, group=TRUE,
main = NULL,console=FALSE)
return(tk[[5]])
}
Tukey f1 d/f2
Uma situação comum, porém que exige de rotinas mais elaboras é testar os níveis do fator 1 dentro dos níveis do
fator 2. Para comparar médias de f1 d/f2 faz-se necessário calcular um novo GLrm e QMrm (m=médio).Mais
detalhes em Pimentel Gomes (2008), v15, ed15, pg165-171.
52
n2= número de níves de f2
n2<-length(levels(f2)) # nº niveis do fator em estudo(f2)
QMrm<-(QMra+QMrb*(n2-1))/n2
QMrm # QMrmédio
## [1] 156658.7
Calculando o GL médio a f1 e f2
Sabemos que a fórmula é:
GLrm=(QMra+((n2-1)QMrb))2/(((QMra2)/GLra)+((((n2-1)QMrb)^2)/GLrb))
GLrm = (termo1)^2/(termo2+termo3)
Antes de aplicar o teste de Tukey para f1 d/f2 faremos os recortes no banco de dados(a1)
levels(f2)# lembrando as doses
## [1] "10" "40" "70"
f2_10<-subset(a1, f2=="10") #recortando
f2_40<-subset(a1, f2=="40")
f2_70<-subset(a1, f2=="70")
53
futk2(f2_40) # f1 d/f2=40
## $groups
## trt means M
## 1 sa 3541.00 a
## 2 u 2865.00 b
## 3 sc 2752.25 b
## 4 cn 2687.25 b
futk2(f2_70) # f1 d/f2=70
## $groups
## trt means M
## 1 sc 3776.75 a
## 2 sa 3619.00 ab
## 3 u 3238.75 b
## 4 cn 3193.50 b
Passo a passo
Exemplo adaptado de Banzatto & Kronka (2008), sendo: resp= produtividade de milho em kg/ha, bloc= blocos (4).
Fatorial (4 x 3), sendo:
4 adu(f1)= adubaçao com salitre do chile (sc), sulfato de amonio (sa), ureia(u), calnitro (cn)
3 dos(f2)= doses de N ( 10, 40 ou 70 kg/ha)
Os objetivos são:
1. comparar as fontes(f1) independentemente de dose(f2)
2. comparar as doses(f2) dentro de cada fonte(f1)
3. comparar as fontes(f1) dentro de cada dose(f2)
Importando os dados
a<-read.table("par_sub2.txt", h=T)
head(a)
## par spar bloc adu dos resp
## 1 1sc 1sc10 1 sc 10 2747
## 2 1sc 1sc40 1 sc 40 2889
## 3 1sc 1sc70 1 sc 70 3578
## 4 1sa 1sa10 1 sa 10 3164
## 5 1sa 1sa40 1 sa 40 3831
## 6 1sa 1sa70 1 sa 70 4107
str(a)
## 'data.frame': 48 obs. of 6 variables:
## $ par : Factor w/ 16 levels "1cn","1sa","1sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ spar: Factor w/ 48 levels "1cn10","1cn40",..: 7 8 9 4 5 6 10 11 12 1 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
## $ adu : Factor w/ 4 levels "cn","sa","sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ dos : int 10 40 70 10 40 70 10 40 70 10 ...
## $ resp: int 2747 2889 3578 3164 3831 4107 1902 2547 3364 2978 ...
54
Tranformando
fspar<-as.factor(a$spar) # subparcelas
fpar<-as.factor(a$par) # parcelas
fb<-as.factor(a$bloc)
f1<-as.factor(a$adu)
f2<-as.factor(a$dos)
resp<-as.numeric(a$resp)
a1<-data.frame(fspar,fpar,fb,f1,f2,resp)
head(a1)
## fspar fpar fb f1 f2 resp
## 1 1sc10 1sc 1 sc 10 2747
## 2 1sc40 1sc 1 sc 40 2889
## 3 1sc70 1sc 1 sc 70 3578
## 4 1sa10 1sa 1 sa 10 3164
## 5 1sa40 1sa 1 sa 40 3831
## 6 1sa70 1sa 1 sa 70 4107
str(a1)
## 'data.frame': 48 obs. of 6 variables:
## $ fspar: Factor w/ 48 levels "1cn10","1cn40",..: 7 8 9 4 5 6 10 11 12 1 ...
## $ fpar : Factor w/ 16 levels "1cn","1sa","1sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ fb : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
## $ f1 : Factor w/ 4 levels "cn","sa","sc",..: 3 3 3 2 2 2 4 4 4 1 ...
## $ f2 : Factor w/ 3 levels "10","40","70": 1 2 3 1 2 3 1 2 3 1 ...
## $ resp : num 2747 2889 3578 3164 3831 ...
Conferindo o objeto a1
length(levels(fspar))
## [1] 48
length(levels(fpar))
## [1] 16
length(levels(fb))
## [1] 4
1ª parte da anova:
Relativa a parcelas, servirá para fb, f1 e fpar. A SQ do resíduo_a será calculada por diferença. Trabalharemos
inicialmente apenas com SQ e GL. Após montado o quadro calculamos o QM, F e PV de uma só vez.
fu1<-function(x){
y<-tapply(resp,x,sum)
n<-tapply(resp,x,length)
ter1<-sum((y^2)/n)
ter2<-((sum(y))^2)/sum(n)
SQ<-ter1-ter2
GL<-length(y)-1
vetnum<-round(c(SQ,GL),dig=3)
return(vetnum)
}
55
Matriz dos GL e SQ dos fatores principais da parte da anova relativa à parcelas
sqp<-rbind(fu1(fb),fu1(f1),fu1(fpar))
vra<-c(sqra<-fu1(fpar)[1]-fu1(fb)[1]-fu1(f1)[1],
glra<-fu1(fpar)[2]-fu1(fb)[2]-fu1(f1)[2])
vqmp<-anep[,1]/anep[,2]
vfcal<-(anep[,1]/anep[,2])/glra
vp_valor<-signif(pf(vfcal, anep[,2], glra, lower.tail = FALSE, log.p = FALSE), dig=3)
anep<-cbind(anep,vqmp,vfcal, vp_valor)
colnames(anep)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
anep
## SQ GL QM Fcal P_valor
## fb 3198892 3 1066297.2 118477.47 5.35e-21
## f1 2486093 3 828697.7 92077.52 1.66e-20
## fpar 8574131 15 571608.8 63512.08 9.98e-21
## res (a) 2889146 9 321016.3 35668.47 2.17e-19
GLra<-glra # precisaremos dele no teste de tukey
QMra<-sqra/glra # precisaremos dele no teste de tukey
2ª parte da anova
Calcularemos a SQ e o GL para f2 e fspar usando a fu1(...). Também usaremos a fu1(...) para SQ bruta de f1:f2 e por
diferença obteremos a SQ da interação f1i2. O GL da f1i2 é obtido através do glf1*glf2. Por diferença calcularemos
a SQ e GL do resíduo b.
fu1(f2) # sq e gl do fator 2
## [1] 4703630 2
fu1(fspar) # sq e gl da subparcela
## [1] 16351434 47
fu1(f1:f2)[1] # efeito bruto f1:f2
## [1] 8475876
vf1i2<-c(sqf1i2<-fu1(f1:f2)[1]-fu1(f1)[1]-fu1(f2)[1], # sq interação f1i2
glf1i2<-fu1(f1)[2]*fu1(f2)[2]) # gl interação f1i2
vresb<-c(sqrb<-fu1(fspar)[1]-sqf1i2-fu1(f2)[1]-fu1(fpar)[1],glrb<-fu1(fspar)[2]-
glf1i2-fu1(f2)[2]-fu1(fpar)[2])
56
# juntando em uma matriz anesp
# pense na sequencia de linhas abaixo:
# vetor de sq e gl do f2
# vetor de sq e gl da f1if2
# vetor de sq e gl da suparcela
# vetor de sq e gl do resíduo b
# reuna os obj com os vetores na sequencia e
# depois junte com o rbind. Não se esqueça de usar "," entre os objs
anesp<-rbind(fu1(f2),
vf1i2<-c(sqf1i2<-fu1(f1:f2)[1]-fu1(f1)[1]-fu1(f2)[1],
glf1i2<-fu1(f1)[2]*fu1(f2)[2]),
fu1(fspar),
vresb<-c(sqrb<-fu1(fspar)[1]-sqf1i2-fu1(f2)[1]-fu1(fpar)[1],
glrb<-fu1(fspar)[2]-glf1i2-fu1(f2)[2]-fu1(fpar)[2]))
rownames(anesp)<-c("f2", "f1if2", "fspar", "res (b)")
anesp
## [,1] [,2]
## f2 4703630 2
## f1if2 1286153 6
## fspar 16351434 47
## res (b) 1787519 24
vqm<-anesp[,1]/anesp[,2]
vfcal<-anesp[,1]/anesp[,2]/(sqrb/glrb)
vp_valor<-signif(pf(vfcal, anesp[,2],glrb ,lower.tail =FALSE, log.p = FALSE), dig=4)
anepsp<-rbind(anep, anesp)
round(anepsp,dig=3)
## SQ GL QM Fcal P_valor
## fb 3198892 3 1066297.25 118477.472 0.000
## f1 2486093 3 828697.69 92077.522 0.000
## fpar 8574131 15 571608.75 63512.083 0.000
## res (a) 2889146 9 321016.27 35668.474 0.000
## f2 4703630 2 2351815.08 31.576 0.000
## f1if2 1286153 6 214358.86 2.878 0.029
## fspar 16351434 47 347902.85 4.671 0.000
## res (b) 1787519 24 74479.97 1.000 0.500
Efeito dos adubos(f1 com Tukey), independente da dose. Usaremos o GLra e QMra
57
levels(f1)#apenas conferindo os níveis f1
## [1] "cn" "sa" "sc" "u"
require(agricolae)
## Loading required package: agricolae
## Warning: package 'agricolae' was built under R version 3.2.3
tk1<-HSD.test(resp, f1, GLra,QMra,alpha=0.05,
group=TRUE, main = NULL,console=FALSE)
tk1[5] #tem rodar com com alpha 0.20!
## $groups
## trt means M
## 1 sa 3401.833 a
## 2 sc 3065.250 a
## 3 cn 2871.000 a
## 4 u 2823.083 a
Anova e Tukey f2 d/f1, ou seja,doses dentro de níveis de adubo. Usaremos QMrb e Glrb
fu3<-function(x){
y<-tapply(x$resp,x$f2,sum)
n<-tapply(x$resp,x$f2,length)
ter1<-sum((y^2)/n)
ter2<-(sum(y)^2)/sum(n)
SQ<-ter1-ter2
GL<-(length(levels(f2)))-1
QM<-SQ/GL
Fcal<-QM/QMrb # usamos o residuo_b
PV<-c(pf(Fcal, GL, QM,
lower.tail=FALSE))
v3<-round(c(SQ,GL,QM,Fcal,PV),dig=3)
return(v3)
}
anef2df1<-rbind(fu3(f1_cn),
fu3(f1_sa),
fu3(f1_sc),
fu3(f1_u))
require(agricolae)
f2 d/f1 ou dose d/adubo. Lembre-se que já fizemos os recortes de a1. Lembrar que neste caso usaremos o GLrb e
QMrb
futk1<-function(x){
tk<-HSD.test(x$resp, x$f2, GLrb,QMrb,
alpha = 0.05, group=TRUE,
main = NULL,console=FALSE)
tk<-tk[5]
return(tk)
}
list(futk1(f1_cn),
futk1(f1_sa),
futk1(f1_sc),
futk1(f1_u))
## [[1]]
## [[1]]$groups
## trt means M
## 1 70 3193.50 a
## 2 10 2732.25 ab
## 3 40 2687.25 b
##
##
## [[2]]
## [[2]]$groups
## trt means M
## 1 70 3619.0 a
## 2 40 3541.0 a
## 3 10 3045.5 b
##
##
## [[3]]
## [[3]]$groups
## trt means M
## 1 70 3776.75 a
## 2 40 2752.25 b
## 3 10 2666.75 b
59
##
##
## [[4]]
## [[4]]$groups
## trt means M
## 1 70 3238.75 a
## 2 40 2865.00 a
## 3 10 2365.50 b
Tukey para f1 d/f2
Para comparar médias f1 d/f2 faz-se necessário calcular novo GLrm e QMrm (m=médio). Mais detalhes em Pimentel
Gomes (2008), v15, ed15, pg165-171
#QMrm=(QMra+QMrb*(n2-1))/n2
Sabemos que:
QMrm<-(QMra+QMrb*(n2-1))/n2
#GLrm=(QMra+((n2-1)QMrb))2/(((QMra2)/GLra)+((((n2-1)QMrb)^2)/GLrb))
# GLrm=(termo1)^2/(termo2+termo3)
termo1<-QMra+((n2-1)*QMrb)
termo2<-(QMra^2)/GLra
termo3<-(((n2-1)*QMrb)^2)/GLrb
GLrm<-((termo1)^2)/(termo2+termo3)
GLrm<-round(GLrm, dig=0) #arredonda
GLrm
## [1] 18
Tukey para f1 d/f2
Primeiro faremos os recortes no banco de dados(a1)
60
f2_10<-subset(a1, f2=="10") # recorte...
f2_40<-subset(a1, f2=="40")
f2_70<-subset(a1, f2=="70")
futk2<-function(x){
tk<-HSD.test(x$resp, x$f1, GLrb,QMrb,
alpha = 0.05, group=TRUE,
main = NULL,console=FALSE)
tk<-tk[5]
return(tk)
}
list(futk2(f2_10),
futk2(f2_40),
futk2(f2_70))
## [[1]]
## [[1]]$groups
## trt means M
## 1 sa 3045.50 a
## 2 cn 2732.25 ab
## 3 sc 2666.75 ab
## 4 u 2365.50 b
##
##
## [[2]]
## [[2]]$groups
## trt means M
## 1 sa 3541.00 a
## 2 u 2865.00 b
## 3 sc 2752.25 b
## 4 cn 2687.25 b
##
##
## [[3]]
## [[3]]$groups
## trt means M
## 1 sc 3776.75 a
## 2 sa 3619.00 ab
## 3 u 3238.75 b
## 4 cn 3193.50 b
Passo a passo
61
Objetivos:
1. avaliar qual ecotipo(f1) produz mais, independente da fonte de P(f2)
2. avaliar qual fonte(f2) permite maior produção, dentro de cada ecotipo(f1)
3. avliar qual ecotipo(f1) responde melhor as fontes(f2)= st e fn
Importando os dados
a<-read.table("par_sub_amendoin.txt", h=T)
head(a)
## par spar trat bloc esp fos resp
## 1 1e.1 1e.1ct 1 1 e.1 ct 41
## 2 1e.2 1e.2ct 2 1 e.2 ct 29
## 3 1e.3 1e.3ct 3 1 e.3 ct 41
## 4 1e.4 1e.4ct 4 1 e.4 ct 45
## 5 1e.5 1e.5ct 5 1 e.5 ct 23
## 6 1e.6 1e.6ct 6 1 e.6 ct 48
str(a)
## 'data.frame': 72 obs. of 7 variables:
## $ par : Factor w/ 18 levels "1e.1","1e.2",..: 1 2 3 4 5 6 1 2 3 4 ...
## $ spar: Factor w/ 72 levels "1e.1ct","1e.1fn",..: 1 5 9 13 17 21 2 6 10 14 ...
## $ trat: int 1 2 3 4 5 6 7 8 9 10 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
## $ esp : Factor w/ 6 levels "e.1","e.2","e.3",..: 1 2 3 4 5 6 1 2 3 4 ...
## $ fos : Factor w/ 4 levels "ct","fn","ss",..: 1 1 1 1 1 1 2 2 2 2 ...
## $ resp: int 41 29 41 45 23 48 76 74 74 98 ...
Tranformando em fator
fspar<-as.factor(a$spar) # subparcelas
fpar<-as.factor(a$par) # parcelas
fb<-as.factor(a$bloc)
f1<-as.factor(a$esp)
f2<-as.factor(a$fos)
resp<-as.numeric(a$resp)
62
Conferindo o obj a1
length(levels(fspar))
## [1] 72
length(levels(fpar))
## [1] 18
length(levels(fb))
## [1] 3
Anova geral
ane00<-summary(aov (resp~fb+(f1+f2)^2+Error(fb/f1)))
ane00
##
## Error: fb
## Df Sum Sq Mean Sq
## fb 2 25.86 12.93
##
## Error: fb:f1
## Df Sum Sq Mean Sq F value Pr(>F)
## f1 5 13158 2631.5 1226 1.34e-13 ***
## Residuals 10 21 2.1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## f2 3 139125 46375 15750 <2e-16 ***
## f1:f2 15 49545 3303 1122 <2e-16 ***
## Residuals 36 106 3
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
63
##
## Terms:
## f1 Residuals
## Sum of Squares 13157.611 21.472
## Deg. of Freedom 5 10
##
## Residual standard error: 1.46534
## 15 out of 20 effects not estimable
## Estimated effects may be unbalanced
##
## Stratum 3: Within
##
## Terms:
## f2 f1:f2 Residuals
## Sum of Squares 139124.78 49544.72 106.00
## Deg. of Freedom 3 15 36
##
## Residual standard error: 1.715938
## Estimated effects may be unbalanced
64
## $groups
## trt means M
## 1 e.2 114.08333 a
## 2 e.5 112.66667 a
## 3 e.1 93.66667 b
## 4 e.4 88.66667 c
## 5 e.3 82.50000 d
## 6 e.6 80.08333 e
Anova e Tukey para f2 d/f1, ou seja, doses d/ de níveis de adubo.
Usaremos QMrb e Glrb
levels(f1)# lembrando os niveis de f1
## [1] "e.1" "e.2" "e.3" "e.4" "e.5" "e.6"
# recortes de interesse -----
f1_e.1<-subset(a1, f1=="e.1")
f1_e.2<-subset(a1, f1=="e.2")
f1_e.3<-subset(a1, f1=="e.3")
f1_e.4<-subset(a1, f1=="e.4")
f1_e.5<-subset(a1, f1=="e.5")
f1_e.6<-subset(a1, f1=="e.6")
Teste de Tukey para f2 d/f1, ou seja, dose d dentro de adubo. Lembre-se que o procedimento exige o pacote agricolae.
Neste caso usaremos o GLrb e QMrb
futk1<-function(x){
tk<-HSD.test(x$resp,x$f2,GLrb,QMrb,alpha = 0.05, group=TRUE,
main = NULL,console=FALSE)
return(tk[[5]])
}
65
## trt means M
## 1 ss 119.66667 a
## 2 fn 98.00000 b
## 3 st 90.33333 c
## 4 ct 46.66667 d
futk1(f1_e.5)
## trt means M
## 1 ss 249.0000 a
## 2 st 124.6667 b
## 3 fn 55.0000 c
## 4 ct 22.0000 d
futk1(f1_e.6)
## trt means M
## 1 ss 104.33333 a
## 2 fn 85.00000 b
## 3 st 81.66667 b
## 4 ct 49.33333 c
Tukey f1 d/f2
Faz-se necessário calcular novo GLrm e QMrm (m=médio). Mais detalhes em Pimentel Gomes (2008), v15, ed15,
pg165-171
Sabemos que:
QMra # calculado anteriormente
QMrb # calculado anteriormente n2=número de níves de f2
n2<-length(levels(f2)) # nº niveis do fator em estudo(f2)
QMrm<-(QMra+QMrb*(n2-1))/n2
QMrm
## [1] 2.745139
Calculando um GLrm para f1 e f2 Sabemos que a fórmula é:
# GLrm=(QMra+((n2-1)QMrb))2/(((QMra2)/GLra)+((((n2-1)QMrb)^2)/GLrb))
Montaresmo a equação
GLrm<-((termo1)^2)/(termo2+termo3)
GLrm<-round(GLrm, dig=0) #arredonda
GLrm
## [1] 46
Tukey f1 d/f2
66
Primeiro faremos os recortes no banco de dados(a1)
levels(f2)# lembrando as doses
## [1] "ct" "fn" "ss" "st"
f2_ct<-subset(a1, f2=="ct")
f2_fn<-subset(a1, f2=="fn")
f2_ss<-subset(a1, f2=="ss")
f2_st<-subset(a1, f2=="st")
Aplicando a futk2
futk2(f2_ct) # f1 d/f2=ct
## $groups
## trt means M
## 1 e.6 49.33333 a
## 2 e.4 46.66667 ab
## 3 e.1 42.66667 bc
## 4 e.3 41.33333 c
## 5 e.2 29.33333 d
## 6 e.5 22.00000 e
futk2(f2_fn)
## $groups
## trt means M
## 1 e.4 98.00000 a
## 2 e.6 85.00000 b
## 3 e.1 75.66667 c
## 4 e.3 73.00000 c
## 5 e.2 72.33333 c
## 6 e.5 55.00000 d
futk2(f2_ss)
## $groups
## trt means M
## 1 e.5 249.0000 a
## 2 e.2 200.3333 b
## 3 e.1 154.0000 c
## 4 e.3 124.3333 d
## 5 e.4 119.6667 e
## 6 e.6 104.3333 f
futk2(f2_st)
## $groups
## trt means M
## 1 e.2 154.33333 a
67
## 2 e.5 124.66667 b
## 3 e.1 102.33333 c
## 4 e.3 91.33333 d
## 5 e.4 90.33333 d
## 6 e.6 81.66667 e
Odirley Campos
OBS: o arquivo de entrada contendo os dados abriga tanto tratamentos fatoriais como a parte adicional
Importando os dados
a<-read.table("fat2_1ad_soja.txt", h=T)
str(a) #verificar a "natureza" dos dados
## 'data.frame': 130 obs. of 5 variables:
## $ trat: int 1 2 3 4 5 6 7 8 9 10 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
## $ cult: Factor w/ 6 levels "A","B","C","D",..: 1 2 3 4 5 6 2 3 4 5 ...
## $ dos : int 101 50 50 50 50 50 75 75 75 75 ...
## $ resp: num 361 133 156 111 226 ...
head(a)
## trat bloc cult dos resp
## 1 1 1 A 101 360.95
## 2 2 1 B 50 133.17
## 3 3 1 C 50 156.06
## 4 4 1 D 50 111.30
## 5 5 1 E 50 226.46
## 6 6 1 F 50 53.48
Transformando os dados em fator
ft<-as.factor(a$trat) # tratamentos
fb<-as.factor(a$bloc)
f1<-as.factor(a$cult) # progenie
f2<-as.factor(a$dos) # tipo de adubo
resp<-as.numeric(a$resp)# variável resposta
Reunindo em novo data
a1<-data.frame(ft,fb,f1,f2,resp)
head(a1)
68
## ft fb f1 f2 resp
## 1 1 1 A 101 360.95
## 2 2 1 B 50 133.17
## 3 3 1 C 50 156.06
## 4 4 1 D 50 111.30
## 5 5 1 E 50 226.46
## 6 6 1 F 50 53.48
# Anova apenas tratamentos ------
ane0 <-aov(resp~fb+ft, data=a1)
summary(ane0)
## Df Sum Sq Mean Sq F value Pr(>F)
## fb 4 4412 1103 0.911 0.461
## ft 25 941309 37652 31.092 <2e-16 ***
## Residuals 100 121098 1211
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
GLr<-df.residual(ane0) # gl do residuo
GLr
## [1] 100
sum(residuals(ane0)^2) # SQresiduo
## [1] 121098.2
QMr<-sum(residuals(ane0)^2)/df.residual(ane0)
QMr
## [1] 1210.982
Calculando as SQ para os efeitos principais
fu1<-function(x){
y<-tapply(resp,x,sum)
n<-tapply(resp,x,length)
t<-sum(n)
term1<-sum((y^2)/n)
term2<-((sum(y))^2)/t
SQ<-term1-term2
GL<-length(n)-1
return(c(SQ,GL))}
Aplicando a fu1
ane1<-rbind(fu1(fb),
fu1(ft),
fu1(fb:ft),
fu1(fb:ft)-fu1(ft)-fu1(fb))
Calculando o F e os P-valores
ane1<-cbind(ane1, QM<-ane1[,1]/ane1[,2],
Fcal<-QM/QM[4],
P_valor<-signif(pf(Fcal,ane1[,2],
ane1[4,2],
lower.tail = FALSE),dig=1))
ane1
69
## [,1] [,2] [,3] [,4] [,5]
## [1,] 4412.279 4 1103.070 0.9108885 5e-01
## [2,] 941308.528 25 37652.341 31.0923981 2e-36
## [3,] 1066819.029 129 8269.915 6.8290969 2e-20
## [4,] 121098.222 100 1210.982 1.0000000 5e-01
Renomeando colunas e linhas
colnames(ane1)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
ane1
## SQ GL QM Fcal P_valor
## [1,] 4412.279 4 1103.070 0.9108885 5e-01
## [2,] 941308.528 25 37652.341 31.0923981 2e-36
## [3,] 1066819.029 129 8269.915 6.8290969 2e-20
## [4,] 121098.222 100 1210.982 1.0000000 5e-01
rownames(ane1)<-c("bloc", "trat", "total", "residuo")
round(ane1,dig=3)
## SQ GL QM Fcal P_valor
## bloc 4412.279 4 1103.070 0.911 0.5
## trat 941308.528 25 37652.341 31.092 0.0
## total 1066819.029 129 8269.915 6.829 0.0
## residuo 121098.222 100 1210.982 1.000 0.5
SQ para culturas, incluindo A
fu2<-function(x){
y<-tapply(resp,x,sum)
n<-tapply(resp,x,length)
term1<-sum((y^2)/n)
term2<-(sum(y)^2)/sum(n)
SQ<-term1-term2
GL<-length(n)-1
QM<-SQ/GL
Fcal<-QM/ane1[4,3]
P_valor<-pf(Fcal,GL,
ane1[4,2],
lower.tail = FALSE)
return(round(c(SQ,GL,QM,Fcal,P_valor),dig=3))
}
70
fu3<-function(vresp,vfator){
y<-as.vector(na.omit(as.vector(tapply(vresp,vfator,sum))))
n<-as.vector(na.omit(as.vector(tapply(vresp,vfator,length))))
term1<-sum((y^2)/n)
term2<-(sum(y)^2)/sum(n)
SQ<-term1-term2
GL<-length(n)-1
QM<-SQ/GL
Fcal<-QM/ane1[4,3]
P_valor<-pf(Fcal,GL,
ane1[4,2],
lower.tail = FALSE)
vetor<-c(SQ,GL,QM,Fcal,P_valor)
return(round(vetor,dig=3))
}
Aplicando a fu3
fu3(a2$resp,a2$f2)# para dose, excluindo 101
## [1] 498680.07 4.00 124670.02 102.95 0.00
fu3(a2$resp,a2$f1)# para cultura, excluindo "A"
## [1] 295159.660 4.000 73789.915 60.934 0.000
fu2(f1) # para cultura, incluindo "A"
## [1] 356885.588 5.000 71377.118 58.942 0.000
fu3(a1$resp,a1$f1) # para cultura, incluindo "A"
## [1] 356885.588 5.000 71377.118 58.942 0.000
# veja que a fu3(a1$resp,a1$f1) retorna o mesmo resultado da fu2(f1)
# tornando desnecessária a fu2
Calculando a SQ da parte adicional. Lembrando que:
SQ_adicional= SQ_todas_culturas - SQ_culturas_parte_fatorial
fu2(f1)[1]-fu3(a2$resp,a2$f1)[1] #SQ da parte adicional
## [1] 61725.93
vadi<-c(fu2(f1)[1]-fu3(a2$resp,a2$f1)[1],1,1,1,1) #vetor sq adicional
Usaremos a fu3 para calcular a SQbruta f1:f2 sem a parte adicional
sqbruta<-fu3(a2$resp,a2$f1:a2$f2)[1] #sqbruta
sqf1sa<-fu3(a2$resp,a2$f1)[1] #efeito simple f2 sem parte adicional
sqf2sa<-fu3(a2$resp,a2$f2)[1] # efeito simples f2 sem parte adicional
Vetor da SQ da interação, sem a parte adicional
vf1i2<-c(sqf1i2<-sqbruta-sqf1sa-sqf2sa,
glf1i2<-fu3(a2$resp,a2$f1)[2]*fu3(a2$resp,a2$f2)[2],
qmf1i2<-sqf1i2/glf1i2,
fcal1i2<-qmf1i2/ane1[4,3],
p_valor<-round(pf(fcal1i2,glf1i2,
ane1[4,2],
lower.tail = FALSE),dig=3))
71
Reunindo tudo numa matriz
ane2<-rbind(fu3(a1$resp,a1$f1),# culturas, inclui A
fu3(a2$resp,a2$f1),# para cultura, excluindo "A"
fu3(a2$resp,a2$f2),# para dose, excluindo 101
vadi, # parte adicional
vf1i2) # intercao f1i2
rownames(ane2)<-c("culturas 6","culturas,sem A",
"dose, sem 101",
"adicional", "Inter_f1f2")
ane2
## [,1] [,2] [,3] [,4] [,5]
## culturas 6 356885.59 5 71377.118 58.942000 0
## culturas,sem A 295159.66 4 73789.915 60.934000 0
## dose, sem 101 498680.07 4 124670.018 102.950000 0
## adicional 61725.93 1 1.000 1.000000 1
## Inter_f1f2 85742.87 16 5358.929 4.425275 0
colnames(ane2)<-c("SQ", "GL", "QM", "Fcal", "P_valor")
round(ane2, dig=3) # Quadro da anova
## SQ GL QM Fcal P_valor
## culturas 6 356885.59 5 71377.118 58.942 0
## culturas,sem A 295159.66 4 73789.915 60.934 0
## dose, sem 101 498680.07 4 124670.018 102.950 0
## adicional 61725.93 1 1.000 1.000 1
## Inter_f1f2 85742.87 16 5358.929 4.425 0
require(agricolae)
futk2<-function(x){
tk<-HSD.test(x$resp, x$f2, GLr, QMr,
alpha=0.05, group=TRUE, main = NULL,console=FALSE)
return(tk[5])
}
futk2(cul_b)
## $groups
## trt means M
## 1 100 290.448 a
## 2 150 285.602 a
## 3 125 263.840 a
## 4 75 233.632 a
## 5 50 143.872 b
futk2(cul_c)
## $groups
## trt means M
## 1 125 320.414 a
## 2 100 304.546 a
## 3 150 288.206 a
## 4 75 221.950 b
## 5 50 154.028 c
futk2(cul_d)
## $groups
## trt means M
## 1 150 459.758 a
## 2 125 438.276 a
## 3 100 372.594 b
## 4 75 305.874 c
## 5 50 180.924 d
futk2(cul_e)
## $groups
## trt means M
## 1 125 353.052 a
## 2 150 341.766 a
## 3 100 335.722 a
## 4 75 274.534 b
## 5 50 190.380 c
futk2(cul_f)
73
## $groups
## trt means M
## 1 100 265.636 a
## 2 125 255.186 a
## 3 75 222.232 ab
## 4 150 192.998 b
## 5 50 118.098 c
Passo a passo
Dados simulados de um experimento onde avaliar-se-á a germinação de sementes em função da dose de fertilizante
aplicada. Veja a descrição abaixo:
3 blocos
2 solos (AG e AR)
2 fontes de K na forma de KCl (K e Kr) onde r indica revestido
4 doses de equivalente K2O (40; 80; 120; 180 kg/ha)
1 controle sem aplicação de K fará a vez do tratamento adicional
Fatorial ((2 x 4)+1) x 2)= 18; ou seria ((2 x 2 x 4)+ 1 + 1)= 18;
OBS: o mesmo banco de dados se prestaria a ajuste de modelos dentro de cada fonte de K e solo
Importando os dados
a<-read.table("fat3_ad2.txt",h=T)# importando os dados
str(a) #verificar a "natureza" dos dados
## 'data.frame': 54 obs. of 6 variables:
## $ trat: int 1 2 3 4 5 6 7 8 9 10 ...
## $ bloc: int 1 1 1 1 1 1 1 1 1 1 ...
## $ sol : Factor w/ 2 levels "ag","ar": 1 1 1 1 1 1 1 1 1 2 ...
## $ fon : Factor w/ 3 levels "0","k","kr": 1 2 2 2 2 3 3 3 3 1 ...
## $ dos : int 0 40 80 120 160 40 80 120 160 0 ...
## $ resp: int 100 99 95 70 20 100 99 94 88 100 ...
Transformando em fatores
ft<-as.factor(a$trat)
fb<-as.factor(a$bloc)
f1<-as.factor(a$sol)
f2<-as.factor(a$fon)
f3<-as.factor(a$dos)
resp<-as.numeric(a$resp)
74
## 'data.frame': 54 obs. of 6 variables:
## $ ft : Factor w/ 18 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ fb : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
## $ f1 : Factor w/ 2 levels "ag","ar": 1 1 1 1 1 1 1 1 1 2 ...
## $ f2 : Factor w/ 3 levels "0","k","kr": 1 2 2 2 2 3 3 3 3 1 ...
## $ f3 : Factor w/ 5 levels "0","40","80",..: 1 2 3 4 5 2 3 4 5 1 ...
## $ resp: num 100 99 95 70 20 100 99 94 88 100 ...
76
futk1(f2) # obs que a dose 0 (trat adicional) é mantida para
## $groups
## trt means M
## 1 0 98.66667 a
## 2 kr 91.79167 b
## 3 k 61.87500 c
# comparação com o K e Kr
# mas isto é uma informação muito geral
# é necessário desdobrar ao menos a nível de solo
Fazendo o recorte para extrair efeito dos fatores não considerando a parte adicional
a2<-subset(a1, !f2=="0") # retiranto a fonte 0 ou dose 0 do data
# adpataremos a fu1 a nova condição e chamaremos de fu3
# para calcular a SQ dos fatores principais sem os adicionais ("0")
fu3<-function(x){
y<-as.vector(na.omit(
as.vector(tapply(a2$resp,x,sum))))
n<-as.vector(na.omit(
as.vector(tapply(a2$resp,x,length))))
ter1<-sum(y^2/n)
fc<-(sum(y)^2)/(sum(n))
SQ<-ter1-fc
return(SQ)
}
fagk<-subset(subset(a1,f1=="ag"),f2=="k"|f2=="0")
fagkr<-subset(subset(a1,f1=="ag"),f2=="kr"|f2=="0")
fark<-subset(subset(a1,f1=="ar"),f2=="k"|f2=="0")
farkr<-subset(subset(a1,f1=="ar"),f2=="kr"|f2=="0")
fu3<-function(x){
y<-tapply(x$resp,x$f3,sum)
n<-tapply(x$resp,x$f3,length)
ter1<-sum((y^2)/n)
fc<-(sum(y)^2)/sum(n)
SQ<-ter1-fc
GL<-length(y)-1
vet<-c(GL,SQ)
return(vet)}
ane3<-rbind(fu3(fagk),fu3(fagkr),fu3(fark),fu3(farkr))
aned123<-cbind(GLs<-ane3[,1],
SQs<-ane3[,2],
QMs<-ane3[,2]/ane3[,1],
Fcal<-QM/QMr,
PV<-round(c(pf(Fcal, GLs, GLr,
lower.tail = FALSE)),dig=3))
rownames(aned123)<-c("f3 d/f2=k d/f1=ag",
"f3 d/f2=kr d/f1=ag",
"f3 d/f2=k d/f1=ar",
"f3 d/f2=kr d/f1=ar")
aned123
## [,1] [,2] [,3] [,4] [,5]
## f3 d/f2=k d/f1=ag 4 14164.9333 3541.23333 348.73268 0
## f3 d/f2=kr d/f1=ag 4 339.3333 84.83333 84.63644 0
## f3 d/f2=k d/f1=ar 4 19789.7333 4947.43333 2516.82164 0
## f3 d/f2=kr d/f1=ar 4 554.6667 138.66667 2777.62404 0
79
## $groups
## trt means M
## 1 0 99.00000 a
## 2 40 98.33333 a
## 3 80 96.66667 a
## 4 120 93.33333 b
## 5 160 86.00000 c
futk3(fark)
## $groups
## trt means M
## 1 0 98.33333 a
## 2 40 94.66667 b
## 3 80 79.00000 c
## 4 120 38.33333 d
## 5 160 4.00000 e
futk3(farkr)
## $groups
## trt means M
## 1 0 98.33333 a
## 2 40 97.66667 a
## 3 80 91.00000 b
## 4 120 89.66667 b
## 5 160 81.66667 c
Bibliografia
Banzatto, D. A.; Kronka, S. N. Experimentação agrícola. 4.ed. Jaboticabal: FUNEP, 2006. 237p.
Pimentel Gomes, F. Curso de estatística experimental. 15.ed. Piracicaba: Fealq, 2008. 451p.
80