• Nenhum resultado encontrado

Computação Estatística em R

N/A
N/A
Protected

Academic year: 2021

Share "Computação Estatística em R"

Copied!
73
0
0

Texto

(1)

Computação Estatística em

R

(2)
(3)

Plano de curso

Neste curso você vai conhecer o ambiente R para computação estatística e realizar desde análises básicas até alguns dos principais métodos de análise multivariada utilizados para análise de dados obtidos em estudos agrícolas. Além disso, você aprenderá a linguagem R de programação para construir suas próprias funções. Exercícios dentro e fora de sala são parte essencial do curso.

Título: Computação Estatística em R Edição: 2

Datas: 28/11 a 09/12/2016

Horário: 08:00 - 12:00 (e 14:00 - 17:00, para atendimento individual) Local: Depto. Solos, ESALQ/USP, Piracicaba - SP

Programa de estudo:

• Instalação, apresentação do R e motivação • Nuts and bolts

- Principais operadores e funções - Objetos e classes de objetos - Subsetting

- Importação/exportação de dados

- Análise exploratória de dados: medidas descritivas + gráficos - O que é um PACOTE?

- R commander • Covariância e correlação

- Diagramas de dispersão + draftsman

- Covariância, correlação (Pearson, Spearman)

- Matrizes de correlação e representação gráfica de matrizes • Regressão

(4)

iv

- Regressão linear múltipla + superfície de resposta - Regressão não linear

• ANOVA + Experimentação - Delineamentos básicos - Esquemas experimentais - Comparações de médias • Métodos multivariados (com o livro)

- Autovalores e autovetores

- Componentes principais, Biplot e PCR - Análise de cluster

- MANOVA e Variáveis discriminantes canônicas - Elípses de confiança

• Miscelânea

- Integração, integração numérica, diferenciação - O pacote soilphysics e o RcmdrPlugin.soilphysics • A linguagem R: aprendendo a programar

- Estruturas de controle de fluxo - Desenvolvendo funções

Pré-requisitos: Conhecimentos básicos de estatística.

Critérios de avaliação: Ao final do curso os participantes serão

submeti-dos a uma avaliação teórico/prática. Serão considerasubmeti-dos aprovasubmeti-dos aqueles com mínimo de 75% de frequência e nota acima de 70% na avaliação.

Sugestões de leitura:

• Chambers, J.M. (1998) Programming with Data. New York: Springer.

• Mello & Petenelli (2013) Conhecendo o R: uma visão mais que estatística. Viçosa: Editora UFV.

• Silva, A.R. (2016) Métodos de análise multivariada em R. Pi-racicaba: Fealq.

Instrutor: Anderson R Silva

Instituto Federal Goiano, Campus Urutaí E-mail: anderson.silva@ifgoiano.edu.br

(5)

Sobre o R

O R é um ambiente para computação e uma linguagem de programação orientada a objetos que permite a manipulação de dados, realização de cálculos e confecção de gráficos (Peternelli & Mello, 2013). Além dos pro-cedimentos estatísticos, o R permite criar funções em linguagem própria, fazer operações matemáticas simples, manipulação de vetores e matrizes

O software pode ser obtido gratuitamente emwww.r-project.org, dis-ponível nas plataformas Linux, MacOS X ou Windows.

Os recursos do R, tais como funções, dados, exemplos, etc estão todos armazenados em pacotes. Tais recursos ficam disponíveis para utilização apenas quando o pacote é carregado. Não obstante, quando da instalação do R, alguns pacotes básicos já são automaticamente instalados e carrega-dos, tais como ‘base’, ‘stats’, ’graphics’ e outros. Para saber quais pacotes já estão instalados, digite no console do R: library(). Para carregar um pacote instalado, use o comando: library(nome do pacote). Para insta-lar um pacote, use o comando: install.packages(“nome do pacote”). Em apêndice você vai encontrar uma lista com os pacotes e conjuntos de dados utilizados neste curso. Para saber detalhes sobre um pacote ou uma função de um pacote já carregado, leia a documentação (help). Para tal, digite: help(nome do pacote) ou help(nome da função).

O software R em si constiste do R console, onde input/output são realizados. Entretanto, é muito mais comum a utilização de IDEs, edi-tores/processadores de texto para a construção de rotinas (scripts), com as quais uma série de comandos podem ser armazenados e enviados ao R console. No R há um editor padrão básico, o R editor. Mas ou-tros editores gratuitos mais sofisticados podem ser utilizados. O Rstudio (https://www.rstudio.com/) é amplamente utilizado. Outra opção de IDE é o Tinn-R.

Para uma introdução ao uso do R, consulte Peternelli & Mello (2013) ou utilize o manual em .pdf An Introduction to R, disponível na ajuda do software. Além disso, há várias fontes para aprendizado online, como foruns, blogs, tutoriais no youtube etc.

(6)
(7)

Sumário

I

R - NUTS AND BOLTS

1

1 Objetos 3

1.1 Tipos de dados . . . 3

1.2 Classes dos objetos . . . 4

1.3 Vetores . . . 4 1.3.1 Criando vetores . . . 4 1.3.2 Coerção . . . 5 1.3.3 Subsetting . . . . 5 1.4 Fatores . . . 6 1.5 Matrizes e arrays . . . . 6

1.5.1 Criando matrizes e arrays . . . . 6

1.5.2 Operações com matrizes . . . 8

1.5.3 Subsetting . . . . 8 1.6 Listas . . . 8 1.7 data.frame() . . . 9 1.7.1 Subsetting/Attaching . . . . 9 2 Importação/exportação de dados 11 2.1 Importação de dados . . . 11 2.2 Exportação de dados . . . 12 2.3 Exercício . . . 13

II

MÉTODOS UNIVARIADOS

15

3 Análise exploratória de dados 17 3.1 Distribuição de frequências . . . 17

3.2 Estatísticas descritivas . . . 19

3.2.1 Medidas de posição . . . 19

3.2.2 Medidas de dispersão . . . 19

(8)

viii Sumário

3.2.3 Quantis amostrais . . . 19

3.2.4 Trabalhando com fatores . . . 20

3.2.5 Outras funções úteis . . . 20

3.2.6 str/summary . . . 20

3.2.7 Box plot . . . 20

3.3 Exercícios . . . 21

4 Covariância e correlação 23 4.1 Covariância e correlação de Pearson . . . 23

4.2 Diagramas de dispersão . . . 23

4.3 Teste da correlação . . . 24

4.4 Correlações não paramétricas . . . 25

4.5 Gráfico de draftsman . . . 25

4.6 Matrizes de covariância e de correlação . . . 25

4.7 Representação gráfica de matrizes de correlação . . . 26

4.8 Inferência sobre matrizes de correlação . . . 26

4.8.1 Testes simultâneos . . . 26

4.8.2 Homogeneidade de matrizes de covariância . . . 28

4.9 Exercícios . . . 28

5 Regressão 31 5.1 Regressão linear simples . . . 31

5.1.1 Coeficiente de determinação . . . 32

5.1.2 Independência e normalidade residual . . . 32

5.1.3 Análise de variância da regressão . . . 33

5.1.4 Teste t . . . . 33

5.1.5 Intervalo de confiança e de predição . . . 34

5.2 Regressão linear múltipla . . . 35

5.3 Stepwise . . . . 36

5.4 Construíndo superfícies de resposta . . . 37

5.5 Regressão não linear . . . 38

5.6 Linear Response Plateau . . . . 40

5.7 Exercícios . . . 42

6 Análise de variância e delineamentos experimentais 45 6.1 One-way ANOVA . . . . 45

6.2 Testando a homogeneidade de variâncias . . . 46

6.3 Two-way ANOVA . . . 47

6.4 O teste da aditividade . . . 48

6.5 A precisão experimental: CV vs. IV . . . . 48

(9)

7 Procedimentos de comparações múltiplas de médias 51

7.1 Teste t para contrastes . . . . 51

7.2 Teste LSD de Fisher . . . 52 7.3 A correção de Bonferroni . . . 53 7.4 Teste HSD de Tukey . . . 54 7.5 Teste SNK . . . 54 7.6 O critério de Scott-Knott . . . 54 7.7 Escolhendo o teste . . . 55 7.8 Exercícios . . . 55 8 Experimentos multifatores 57 8.1 Estruturas dos fatores, tipos de efeito e interação . . . 57

8.2 Experimentos fatoriais . . . 58

8.3 Fatoriais com tratamentos adicionais . . . 60

8.4 Experimentos em parcelas subdivididas . . . 61

(10)
(11)

Parte I

R - NUTS AND BOLTS

(12)
(13)

Capítulo 1

Objetos

Este capítulo inicial trata basicamente da criação, manipulação e checagem de objetos no R.

1.1

Tipos de dados

O R possui basicamente os seguintes tipos ou classes de dados:

• numeric (números reais) • integer

• complex

• character (valores nominais, não numéricos) • logical (TRUE/FALSE)

Exemplo: podemos definir o objeto ‘a’ como sendo o valor numérico 2.7; isso é feito no R da seguinte forma: a <- 2.7 ou, de forma equivalente, a = 2.7.

Poderíamos ainda definir o objeto ‘a’ como sendo:

• um inteiro; exemplo: a <- 3L

• um número complexo; exemplo: a <- 0+20i

• um valor não numérico; exemplo: a <- ‘Cultivar A’ • um valor lógico; exemplo: a <- TRUE ou a <- FALSE

Operações com números no R podem gerar ainda valores especiais, quais sejam:

(14)

4 Capítulo 1. Objetos

• -Inf, Inf, obtido por exemplo nas divisões: -1/0 e 1/0.

Valores perdidos, de quaisquer dos tipos de dados anteriores, são repre-sentados por NA (Not Available).

1.2

Classes dos objetos

Os diferentes tipos de dados no R apresentam diferentes classes.

É possível checar a classe de um objeto por meio da função class(). Por exemplo: seja o objeto a <- 11L, isto é, o inteiro 11; checamos a classe deste objeto da seguinte forma:

R> class(a) [1] "integer"

De fato, os tipos de dados são em si classes de objetos. Assim, as funções is.numeric(), is.integer(), is.character(), is.complex(), is.logical() também são úteis na checagem de dados. As mesmas retor-nam valores lógicos.

Não obstante, objetos mais complexos, envolvendo uma ou mais de uma classe, são comuns em outputs de funções do R. Muitos desses outputs representam uma classe própria, que define ‘o quê’ está contido nesse objeto, como será visto mais adiante.

1.3

Vetores

Um vetor é um conjunto de elementos pertencentes a mesma classe.

1.3.1

Criando vetores

A função c() (de concatenar) pode ser usada para criar vetores de objetos. Exemplos:

R> x <- c(1.2, 1.4, 2.7, 10) # numeric R> x <- c("a", "b", "c") # character R> x <- c(TRUE, FALSE, TRUE, TRUE) # logical R> x <- 11:20L # integer

A função vector() também pode ser usada para construir vetores. R> x <- vector("numeric", length = 5L)

R> x

(15)

Capítulo 1. Objetos 5

1.3.2

Coerção

O que aconteceria se misturássemos objetos de classes diferentes num mesmo vetor?

R> w1 <- c("a", 1.5, "b", 0.8)

R> w2 <- c(4, TRUE, FALSE, 2.2, FALSE) R> w3 <- c(TRUE, "b", "a", FALSE)

Extraíndo as classes de cada objeto, encontramos:

R> class(w1) [1] "character" R> class(w2) [1] "numeric" R> class(w3) [1] "character"

Logo, note que coerção trata-se de uma alteração da classe de alguns dos objetos para a classe comum mais plausível a todos os objetos de um vetor. Por exemplo: em w1 não seria possível transformar os caracteres ‘a’ e ‘b’ num valor númerico, mas seria mais lógico tratar 1.5 e 0.8 como caracteres (valores não numéricos). Em w2, como os valores lógicos TRUE e FALSE são comumemte entendidos como 1 e 0, respectivamente, todo este vetor será tomado como sendo da classe ‘numeric’. Isso explica porque w3 torna-se um vetor de classe ‘character’.

1.3.3

Subsetting

Subconjuntos de vetores podem ser extraídos usando o operador [. R> y <- c("a", "b", "z", "k") R> y[1] [1] "a" R> y[2] [1] "b" R> y[2:4] [1] "b" "z" "k" R> y[-1] [1] "b" "z" "k" R> y[c(1, 3)] [1] "a" "z" R> y[-c(1, 3)] [1] "b" "k" R> z <- c(1.3, 1.4, 1, 2.8, 3.9, 4.4, 0.5) R> z[c(2, 3, 4)] [1] 1.4 1.0 2.8 R> z >= 2

[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE R> z[z >= 2]

(16)

6 Capítulo 1. Objetos

[1] 2.8 3.9 4.4 R> is.na(z)

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

1.4

Fatores

Vetores do tipo factor são usados para representar dados categóricos, or-denados ou não.

No R, fatores são especialmente úteis para ajustar modelos de regressão.

R> x <- factor(c("macho", "fêmea", "macho", + "fêmea", "fêmea"))

R> x

[1] macho fêmea macho fêmea fêmea Levels: fêmea macho

A ordem dos níveis do fator ‘x’ pode ser ajustada pelo argumento levels.

R> x <- factor(c("macho", "fêmea", "macho", + "fêmea", "fêmea"),

levels = c("macho", "fêmea")) R> x

[1] macho fêmea macho fêmea fêmea Levels: macho fêmea

Isso pode ser de fundamental importância na definição do nível base no modelo linear, em especial nos de rank incompleto, em que não há a estimação do efeito do nível base.

1.5

Matrizes e arrays

Matrizes são combinações de vetores com uma dimensão definida (linhas e colunas).

1.5.1

Criando matrizes e arrays

R> m1 <- matrix(nrow = 3, ncol = 4) R> m1 [,1] [,2] [,3] [,4] [1,] NA NA NA NA [2,] NA NA NA NA [3,] NA NA NA NA R> dim(m1) [1] 3 4

(17)

Capítulo 1. Objetos 7 R> m2 [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8 R> dim(m2) [1] 4 2 R> m3 <- matrix(c("a", "b", "c", "d"), nrow = 2, + ncol = 2, byrow = TRUE)

R> m3

[,1] [,2] [1,] "a" "b" [2,] "c" "d"

Matrizes também podem ser criadas combinando vetores com as funções cbind(), rbind(). R> x <- 1:4 R> y <- c(0.5, 0.6, 0.7, 0.8) R> cbind(x, y) x y [1,] 1 0.5 [2,] 2 0.6 [3,] 3 0.7 [4,] 4 0.8 R> rbind(x, y) [,1] [,2] [,3] [,4] x 1.0 2.0 3.0 4.0 y 0.5 0.6 0.7 0.8

Arrays, por sua vez, são combinações de matrizes de mesma dimensão.

R> a1 <- array(data = 1:12, dim = c(2, 2, 3)) R> a1 , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,] 6 8 , , 3

(18)

8 Capítulo 1. Objetos

[,1] [,2] [1,] 9 11 [2,] 10 12

1.5.2

Operações com matrizes

Basicamente, operações aritméticas com matrizes podem ser executadas de acordo com as indicações da tabela 1.1.

Tabela 1.1: Principais operações com matrizes e respectivos operado-res/funções. Adição + Subtração -Multiplicação %*% Inversão solve() Transposição t() Diagonalização∗ diag() Produto de Kronecker kronecker()

Extração da diagonal ou criação de matrizes diagonais.

1.5.3

Subsetting

Subconjuntos de matrizes podem ser extraídos usando os operadores [i, j] para matrizes, ou [i, j, k, ...] para arrays.

R> m2[1, 2] # linha 1, coluna 2 da matriz ’m2’ [1] 5

R> m2[2:3, ] # linhas 2 a 3 de ‘m2’ [,1] [,2]

[1,] 2 6 [2,] 3 7

R> a1[1, 2, 3] # linha 1, coluna 2, matriz 3 [1] 11

1.6

Listas

Listas são tipos especiais de vetores que podem conter elementos de dife-rentes classes e comprimentos.

R> x <- list("Cultivar A", 2.2221, + c(TRUE, FALSE, FALSE))

(19)

Capítulo 1. Objetos 9 R> x [[1]] [1] "Cultivar A" [[2]] [1] 2.2221 [[3]]

[1] TRUE FALSE FALSE

A seleção de elementos específicos de uma lista é feita com os operadores duplos [[.

R> x[[1]]

[1] "Cultivar A"

1.7

data.frame()

Quadros de dados ou data frames apresentam uma característica comum às listas: ambos podem conter objetos de diferentes classes. Entretanto, os

data frames permitem combinar apenas vetores e estes devem ter o mesmo

comprimento. De fato, data frames são mais similares à matrizes em forma, pois tem entradas de linhas e colunas.

R> x <- data.frame(Cultivar = c("A", "B", "C"), + Precoce = c(TRUE, FALSE, TRUE)) R> x

Cultivar Precoce 1 A TRUE 2 B FALSE 3 C TRUE

Data frames são de forma usual criados por importação de dados, a partir das funções read.table(), read.csv() ou read.csv2().

1.7.1

Subsetting/Attaching

É possível selecionar partes de um data frame usando os operadores [ , ], da mesma forma como feito com matrizes. Além disso, se as colunas do data frame tiverem nomes, então é possível selecioná-las usando o operador $. Por exemplo:

R> x$Precoce

[1] TRUE FALSE TRUE

Ao lidar com um data frame várias vezes uma análises mais demorada, a seleção de variáveis (colunas) pode ser cansativa e até desnecessária. A solução aqui seria tornar "disponíveis"à memória do R as variáveis deste data frame, de forma que possamos acessar os dados destas variáveis apenas pelo nome da coluna. Isso é feito com a função attach().

(20)

10 Capítulo 1. Objetos

R> attach(x) R> Precoce

[1] TRUE FALSE TRUE

Desta forma, o objeto x torna-se um novo caminho de busca de objetos, no caso contendo os objetos Cultivar e Precoce. Para retirar x deste caminho, use a função inversa: detach(x).

(21)

Capítulo 2

Importação/exportação

de dados

2.1

Importação de dados

O R permite importar arquivos em diversos formatos, dentre eles: .R, .txt, .dat, .csv (excel). Para tanto, há algumas principais funções. Ei-las:

• read.table() - para leitura de dados tabulados em colunas

• read.csv() ou read.csv2() - para leitura de dados tabulados em colunas no formato csv

• readLines() - para leitura das linhas de um arquivo de texto • source() - para leitura de códigos em R

Veja quais os argumentos são necessários para utilizar a função read.table(), por exemplo. Ou digite args(read.table).

Todas as funções mencionadas permite a leitura de dados da web, sem a necessidade de download do arquivo em si. Para tanto, basta informar no argumento file o enderço URL do arquivo. Exemplo: consulte a página em

http://arsilva.weebly.com/dados.html. Observe que há um arquivo batata.txt. Podemos fazer a leitura direta desses dados por meio de:

> batata <- read.table(file = "http://arsilva.weebly.com/uploads/ + 2/1/0/0/21008856/batata.txt",

+ header = TRUE) > batata

cultivar rep prod 1 1 1 50.9 2 1 2 50.6 3 1 3 51.2 4 2 1 49.1 5 2 2 49.3

(22)

12 Capítulo 2. Importação/exportação de dados 6 2 3 49.9 7 3 1 49.9 8 3 2 49.8 9 3 3 49.5 10 4 1 49.2 11 4 2 49.1 12 4 3 50.0 >

Note que usamos o argumento header = TRUE. Isso permite identificar a primeira linha como nomes (cabeçalho) das colunas, não dados.

2.2

Exportação de dados

Algumas funções análogas para exportação de dados são: • write.table()

• write.csv() ou write.csv2() • writeLines()

Exemplo: considere adicionar uma nova coluna ao data frame "batata", que irá receber a raiz quadrada dos valores da variável prod. Iremos salvar o novo data frame no formato .csv, sob o nome batata2, da seguinte forma:

> batata$prod2 <- sqrt(batata$prod) > batata

cultivar rep prod prod2 1 1 1 50.9 7.134424 2 1 2 50.6 7.113368 3 1 3 51.2 7.155418 4 2 1 49.1 7.007139 5 2 2 49.3 7.021396 6 2 3 49.9 7.063993 7 3 1 49.9 7.063993 8 3 2 49.8 7.056912 9 3 3 49.5 7.035624 10 4 1 49.2 7.014271 11 4 2 49.1 7.007139 12 4 3 50.0 7.071068 >

# exportando os dados para o diretório de trabalho

> write.table(x = batata, file = "batata2.csv", sep = ",") Observe que no argumento file indicamos o novo nome e a extensão do arquivo, csv no caso. Neste caso, o argumento sep é necessário devido ao formato escolhido (csv = comma separated values). Por vezes, arquivos csv podem estar separados não por vírgula, mas por ponto-e-vírgula. Nestes casos, a função read.csv2() deve ser utilizada.

(23)

Capítulo 2. Importação/exportação de dados 13

2.3

Exercício

1. Faça a leitura do arquivo camadassolo.csv utilizando a função read.table(). Transforme os valores de resistência à penetração de MPa para kPa e depois salve o data frame modificado no seu diretório de trabalho no formato solo.csv. Não adicione uma nova coluna ao data frame

original!

2. Identifique quais as classes de cada coluna do conjunto de dados. 3. Crie um novo data frame de nome camada1 contendo apenas os dados

de umidade e densidade do solo da camada de 0-20 cm.

4. Tente resolver a questão anterior utilizando a função subset(). Veja a documentação (help) da função, se necessário.

5. Crie uma lista tripla contendo os valores de umidade, densidade e camada do solo com os dados da camada de 20-40 cm.

(24)
(25)

Parte II

MÉTODOS

UNIVARIADOS

(26)
(27)

Capítulo 3

Análise exploratória de

dados

A análise exploratória de dados deve ser sempre feita e, não raramente, podem ser ou as únicas necessárias ou decisivas na escolha de um método estatístico mais sofisticado. A exploração de dados é comumente feita por duas formas: i) estudo da distribuição de frequências dos dados, ii) por meio de medidas descritivas que procuram resumir a informação da amostra, e iii) por meios gráficos.

3.1

Distribuição de frequências

Algumas ferramentas frequentemente utilizadas para o estudo de distribui-ção de frequências são:

• Gráfico de barras

• Gráfico de pizza ou de setores • Diagrama de ramos-e-folhas • Histograma

Em particular, os dois últimos são adequados para dados quantitaivos. Para tal, podemos utilizar as funções stem() e hist(). A distribuição de ferequências de variáveis categóricas ou qualitativas é feita com os dois primeiros. Para estes, algumas funções úteis são: table(), barplot() e pie().

Exemplo: utilizando os dados camadassolo.csv, faremos o diagrama de ramos-e-folhas da resistência à penetração por meio de:

> solo <- read.csv("http://arsilva.weebly.com/uploads/ + 2/1/0/0/21008856/camadassolo.csv",

(28)

18 Capítulo 3. Análise exploratória de dados

> stem(solo$RP)

The decimal point is at the |

0 | 47 1 | 0001445566668899 2 | 00000111112234455555667788999 3 | 000011222334444778 4 | 0002334446788 5 | 2277 6 | 25

Podemos observar claramente que há uma tendência de encontrar mais valores de RP entre 1 e 4 Mpa. Por outro lado, valores de RP acima de 5 MPa são pouco prováveis. Use o comando hist(solo$RP) para construir um histograma.

Histogramas são, é claro, amplamente utilizados para representar a dis-tribuição dos dados, uma vez que o mesmo da ideia da forma da verdadeira distribuição f dos dados. Contudo, histogramas como estimadores de densi-dade podem ser criticados, principalmente por desperdiçar parte dos dados quando da formação das barras de frequência. alternativas robustas são os gráficos de densidade kernel, os quais estimam f por suavização, levando em conta cada observação da amostra.

Na figura a seguir foi obtida com o comando:

> attach(solo) > plot( density(RP) ) 0 2 4 6 8 0.00 0.10 0.20 0.30 density.default(x = RP) N = 84 Bandwidth = 0.4638 Density

(29)

Capítulo 3. Análise exploratória de dados 19

3.2

Estatísticas descritivas

A descrição dos dados é feita por meio de medidas que os representem, resumidamente. Tais medidas podem ser de três tipos:

• Medidas de posição ou de tendencia central • Medidas de dispersão ou variabilidade • Medidas de associação

3.2.1

Medidas de posição

Veremos aqui algumas funções para computar as medidas de posição: média e mediana. > mean(RP) [1] 2.907619 > median(RP) [1] 2.75

3.2.2

Medidas de dispersão

Calcularemos nesta seção as estatísticas: amplitude total (max - min), variância, desvio padrão e coeficiente de variação.

> max(RP) - min(RP) [1] 6.14 > var(RP) [1] 1.654324 > sd(RP) [1] 1.286205 > 100 * sd(RP) / mean(RP) [1] 44.23569

3.2.3

Quantis amostrais

Muitas vezes desejamos saber não o mínimo ou máximo apenas, mas sim valores em posições mais específicas, como o valor na posição percentual 95%, que significa o 95omaior valor de uma amostra de tamanho 100. Para

isso, use a função quantile(). > quantile(RP, prob = 0.95)

95% 5.201

(30)

20 Capítulo 3. Análise exploratória de dados

3.2.4

Trabalhando com fatores

Frequentemente precisamos calcular estatísticas para cada nível de um fa-tor. Por exemplo, qual o valor da média de RP para cada camada de solo?

> aggregate(RP ~ Camada, FUN = mean, data = solo) Camada RP

1 0-20 3.177381 2 20-40 2.637857

Veja o que acontece ao passar o comando:

> aggregate( .~ Camada, FUN = mean, data = solo)

3.2.5

Outras funções úteis

• sum() • sort() • order()

3.2.6

str/summary

Ao fazer a leitura de um data frame, é interessante utilizar as funções str() e summary(), para uma ideia inicial geral dos dados. Faça-o com o data frame solo:

> str(solo) > summary(solo)

3.2.7

Box plot

Diagramas de caixa (box plot) estão entre os mais completos métodos grá-ficos para análise exploratória de dados. Neles podemos identificar as esta-tísticas: média, mediana, primeiro e terceiro quartis (percentis 25% e 75%, respectivamente), além de possíveis outliers.

No R, podemos construir box plots individuais:

> boxplot(RP)

ou conjuntos (para diferentes níveis de um fator):

(31)

Capítulo 3. Análise exploratória de dados 21

3.3

Exercícios

1. Com o objeto solo, calcule para todas as variáveis, por camada, as seguintes estatísticas:

Amplitudes total, Hx= max(x) − min(x)

Coeficiente de variação, CV % = 100 × sx/¯x

2. Construa um histograma para a variável Tensão de preconsolidação e adicione a linha de densidade kernel no mesmo gráfico. Dica: use a função lines()

3. Qual é o 22o maior valor de Tensão?

4. Padronize a variável Tensão par ter média 0 e variância 1

(32)
(33)

Capítulo 4

Covariância e correlação

Outra parte fundamental da análise expliratória de dados é o estudo de me-didas de associação entre variáveis. Além disso, a existência de associação entre variáveis resposta é condição fundamental para realização de análi-ses multivariadas, no sentido de que interdependência implica em nenhum ganho em relação as informações obtidas com métodos univariados.

O grau de associação linear entre variáveis é usualmente medido por meio da covariância e por meio de coeficientes de correlação. Sendo que a primeira é afetada pelas unidades de medida, as correlações não.

4.1

Covariância e correlação de Pearson

Considere novamente os dados do objeto solo1. Calcularemos a covariância entre as variáveis US e RP da seguinte forma:

> cov(x = US, y = RP) [1] -1.989888

> cor(x = US, y = RP) [1] -0.7992292

Assim, quanto maior a umidade do solo, menor a resistência.

4.2

Diagramas de dispersão

Devido ao fato de a covariância e a correlação amostral (Pearson) serem medidas de associação estritamente linear, é aconselhável fazer inicial-mente uma análise gráfica da dispersão dos pares de valores. Isso pode ser executado com a função geral plot().

> plot(x = US, y = RP)

(34)

24 Capítulo 4. Covariância e correlação ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● 6 8 10 12 14 1 2 3 4 5 6 US RP

Figura 4.1: Diagrama de dispersão de US e RP

A relação entre US e RP, neste caso, pode ser considerada, pelo menos, aproximadamente linear. Assim, o coeficiente de correlação de Pearson pode ser utilizado como medida de associação. No entanto, faça o diagrama de dispersão das variáveis x e y a seguir e depois calcule a correlação...

> x <- seq(-2, 2, by = 0.1) > y <- x^2

4.3

Teste da correlação

O teste t-Student com n − 2 graus de liberdade para a hipótese de nulidade

H0: ρXY = 0 é feito por meio de:

> cor.test(x = US, y = RP)

Pearson’s product-moment correlation

data: US and RP

t = -12.042, df = 82, p-value < 2.2e-16

alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval:

-0.8653465 -0.7057680 sample estimates:

cor -0.7992292

Note: como p < 0.01, rejeitamos H0. 1Lembre-se de que os dados devem estar attachados.

(35)

Capítulo 4. Covariância e correlação 25

4.4

Correlações não paramétricas

O coeficiente de Pearson deve ser utilizado quando as variáveis são pro-venientes da distribuição normal bivariada ou, ao menos, são contínuas. Variáveis discretas ou que não atendem a esse pré-requisito devem ser estu-dadas por meio dos coeficientes de Spearman ou Kendall, os quais podem ser entendidos como índices de monotonicidade, isto é, são baseados nos ranks das observações e não no seus valores propriamente ditos. A coerral-ção de Spearman, por exemplo, é calculada a partir dos ranks (ou postos) das observações originais. Para calcular estes coeficientes, basta adicionar modificar o argumento method da função cor().

4.5

Gráfico de draftsman

Uma generalização do diagrama de dispersão é o gráfico de draftsman, onde podem ser visualizadas as dispersões envolvendo todos os pares de variáveis. Por exemplo:

> pairs(solo[, -7])

4.6

Matrizes de covariância e de correlação

Matrizes de covariância e de correlação são facilmente obtidas no R através das funções cov() e cor(), respectivamente. Ambas permitem calcular os seguintes coeficientes: Pearson (default) e não paramétricas de Kendall e Spearman, bastando alterar o argumento method.

Exemplo: eliminaremos a coluna Camada (sétima coluna) do data frame solo para computar a matriz de covariâncias entre as variáveis.

> covsolo <- cov(solo[, -7])

Observe que armazenamos a matriz no objeto covsolo. Iremos agora imprimir no console esta matriz com os valores arredondados em 2 casas decimais. > round(covsolo, 2) US DS RP CO Argila Tensao US 3.75 -0.12 -1.99 7.75 -1.63 -11.69 DS -0.12 0.01 0.10 -0.41 0.14 0.71 RP -1.99 0.10 1.65 -5.73 1.74 10.42 CO 7.75 -0.41 -5.73 41.12 -9.92 -43.31 Argila -1.63 0.14 1.74 -9.92 4.54 14.88 Tensao -11.69 0.71 10.42 -43.31 14.88 82.99

em que na diagonal observamos as variâncias e fora dela as covariâncias entre pares de variáveis.

Devido a questões de unidades de medida, dificilmente identificamos quando uma covariância é alta ou baixa. Lembre que −∞ ≤ cov ≤ ∞. No

(36)

26 Capítulo 4. Covariância e correlação

entanto, podemos facilmente transformar uma matriz de covariâncias em uma matriz de correlações, pois:

cor(x, y) = cov(x, y)

pvar(x)var(y) Assim, basta fazer:

> corsolo <- cov2cor(covsolo) > round(corsolo, 2) US DS RP CO Argila Tensao US 1.00 -0.73 -0.80 0.62 -0.39 -0.66 DS -0.73 1.00 0.89 -0.76 0.76 0.92 RP -0.80 0.89 1.00 -0.69 0.63 0.89 CO 0.62 -0.76 -0.69 1.00 -0.73 -0.74 Argila -0.39 0.76 0.63 -0.73 1.00 0.77 Tensao -0.66 0.92 0.89 -0.74 0.77 1.00

Essa função, cov2cor(), é bastante útil em situações em que não dis-pomos dos dados, mas apenas da matriz de covariâncias. Sim, poderíamos ter obtido a matriz de correlações (Pearson, Spearman ou Kendall) sem precisar obter primeiro a matriz de covariâncias. O procedimento utilizado foi apenas ilustrativo. Por outro lado, se conhecermos apenas a matriz de correlação, não é possível retornar a matriz de covariância, a menos que tenhamos a informação das variâncias ou desvios padrão.

4.7

Representação gráfica de matrizes de

cor-relação

A representação gráfica de matrizes de correlação pode ser de grande valia quando se deseja examinar a força e a direção das associações para um número considerável de variáveis (digamos > 10), ou mesmo quando se deseja observar correlações em blocos ou grupos de variáveis, facilitando assim a visualização e a descoberta de padrões de associação. Para isso, utilizaremos o pacote corrplot.

Os comandos

> library(corrplot) > corrplot(corsolo)

produzem a figura 4.2.

4.8

Inferência sobre matrizes de correlação

4.8.1

Testes simultâneos

A função multcor.test() do pacote biotools permite realizar os testes de cada um das correlações de uma matriz simultaneamente, bastando

(37)

Capítulo 4. Covariância e correlação 27 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 US DS RP CO Argila Tensao US DS RP CO Argila Tensao

Figura 4.2: Representação gráfica da matriz de correlação do data frame solo

informar a matriz de correlação e o número de linha do data set (n). Por exemplo, dada a matriz corsolo, a significância de cada correlação dessa matriz pode ser verificada por meio de:

> library(biotools)

> multcor.test(corsolo, n = nrow(solo))

Pairwise correlation t-test

data: corsolo

degrees of freedom: 82

alternative hypothesis: the true correlation is not equal to 0 p-values (with none adjustment for multiple tests):

US DS RP CO Argila Tensao US <NA> *** *** *** *** *** DS 0 <NA> *** *** *** *** RP 0 0 <NA> *** *** *** CO 0 0 0 <NA> *** *** Argila 2e-04 0 0 0 <NA> *** Tensao 0 0 0 0 0 <NA>

---Signif. codes: ’***’0.001 ’**’0.01 ’*’0.05 ’.’0.1 ’ ’1

Todas as correlações foram significativas (p < 0.01). Com esta imple-mentação, é possível ainda ajustar os valores-p para o número de testes realizados na matriz.

(38)

28 Capítulo 4. Covariância e correlação

4.8.2

Homogeneidade de matrizes de covariância

A hipótese

H0: Σ1= Σ2= ... = Σk = Σ

de igualdade ou homogeneidade das k matrizes de covariância é de especial importância em análise de variância multivariada ou em análise discrimi-nante canônica. O teste M de Box é o mais comumente utilizado para este fim. O mesmo pode ser realizado com a função boxM() do pacote biotools. Exemplo: Com o data set solo, podemos verificar se as matrizes de cova-riâncias das duas camadas são estatisticamente iguais, da seguinte forma:

> boxM(data = solo[, -7], grouping = solo[, 7])

Box’s M-test for Homogeneity of Covariance Matrices

data: solo[, -7]

Chi-Sq (approx.) = 107.04, df = 21, p-value = 1.605e-13

Como p = 1.605 × 10−13, dizemos que as matrizes de covariância não devem ser consideradas homogêneas.

4.9

Exercícios

1. Construa o seguinte gráfico (figura 4.3):

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 US DS RP Tensao CO Argila −0.73 −0.8 −0.66 0.62 −0.39 0.89 0.92 −0.76 0.76 0.89 −0.69 0.63 −0.74 0.77 −0.73

Figura 4.3: Representação gráfica da matriz de correlação do data frame solo

(39)

Capítulo 4. Covariância e correlação 29

2. Agora faça um gráfico representando as correlações e indicando quais são significativas (p < 0,05).

Dica: use o resultado da função multcor.test().

3. Instale/carregue o pacote soilphysics. Carregue o conjunto de dados bulkDensity (digite data(bulkDensity)).

- Teste a correlação entre as variáveis MOIS e BULK.

- Teste a igualdade de matrizes de covariância para as amostras (coluna Id)

(40)
(41)

Capítulo 5

Regressão

A simples correlação entre duas variáveis não fornece ideia de causa e efeito de uma variável sobre outra. Por exemplo, quanto será a mudança média em Y quando X variar em uma unidade. Além disso, na análise de corre-lação ambas as variáveis são consideradas resposta, ou variáveis aleatórias, o que nem sempre ocorre. Considere, por exemplo, um estudo de dose-resposta de um fertilizante sobre a produção vegetal. A variável dose é a controlada pelo pesquisador, isto é, não é aleatória, mas sim uma variável explanatória cujo efeito sobre a resposta produção esta sendo avaliado.

5.1

Regressão linear simples

Vimos no capítulo anterior que a resistência do solo à penetração apresenta correlação linear negativa com a quantidade de água no solo e positiva com a densidade. Faça:

> plot(RP ~ DS, data = solo)

Perceba que a relação é linear. Ajustaremos então uma reta de mínimos

quadrados, isto é, um modelo de regressão linear simples: yi= b0+ b1xi+ i

em que b0e b1são os parâmatros do modelo, ié o erro aleatório associado a

observação yi, suposto ter distribuição normal1com média zero e variância

constante σ2.

A função à ser chamada é a lm() (de linear models). > m1 <- lm(RP ~ DS, data = solo)

> m1

1Veremos mais adiante como checar a normalidade dos resíduos e também outras

(42)

32 Capítulo 5. Regressão

Call:

lm(formula = RP ~ DS, data = solo)

Coefficients:

(Intercept) DS -19.62 13.49

5.1.1

Coeficiente de determinação

Um dos critérios mais simples e amplamente utilizados para verificar o grau de ajuste do modelo é o coeficiente de determinação:

R2= SQreg

SQtotal

= 1 − SQerro

SQtotal

Sendo que R2 ∈ [0, 1], e quanto maior o seu valor, melhor o ajuste do modelo. No entanto, deve-se considerar que o R2, além de ser uma função

crescente do número de parâmetros do modelo (p), é esperado ser maior quando o modelo é ajustado com um menor número de observações (n). O coeficiente de determinação ajustado deve então ser utilizado quando da comparação de modelos ou diferentes ajustes de um mesmo modelo:

R2aj.=R

2(n − 1) − p + 1 n − p

A função Rsq() do pacote soilphysics calcula ambos os coeficientes de determinação a partir do objeto m1.

> Rsq(m1) $R.squared [1] 0.7883671 $adj.R.squared [1] 0.7857862 attr(,"class") [1] "Rsq"

5.1.2

Independência e normalidade residual

Quando se pretende fazer inferências acerca dos parâmetros do modelo linear, assume-se que os resíduos sejam independentes e normalmente dis-tribuídos. Para checar tais exigências, utilizaremos aqui dois testes de fácil aplicação: o teste de Durbin-Watson2para independência e o teste de

Shapiro-Wilk para normalidade.

> library(car)

2Na verdade, o teste é para autocorrelação serial, sendo indiretamente usado para

(43)

Capítulo 5. Regressão 33

> dwt(m1)

lag Autocorrelation D-W Statistic p-value 1 0.01462032 1.970238 0.912 Alternative hypothesis: rho != 0

> resid <- residuals(m1) > shapiro.test(resid)

Shapiro-Wilk normality test

data: resid

W = 0.96404, p-value = 0.01908

No exemplo corrente, podemos a firmar a 5% de significância que os resíduos são independentes (p = 0.912), mas não apresentam normalidade (p = 0.0198).

5.1.3

Análise de variância da regressão

Uma vez ajustado o modelo, sob a pressuposições acerca dos resíduos, o teste F da análise de variância pode ser utilizado para avaliar a hipótese de nulidade:

H0: b0= b1= 0

contra a alternativa de que ao menos um dos parâmetros é não nulo ao nível α de significância.

> anova(m1)

Analysis of Variance Table

Response: RP

Df Sum Sq Mean Sq F value Pr(>F) DS 1 108.250 108.250 305.46 < 2.2e-16 *** Residuals 82 29.059 0.354

---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Sendo p < 0.01, devemos rejeitar H0.

5.1.4

Teste t

A hipótese anterior, verificada com o teste F , nem sempre é de interesse. Na verdade, o teste do intercepto tem pouco sentido prático. O teste t pode ser aplicado para testar a nulidade (H0 : bj = 0) de cada um dos

parâmetros do modelo, individualmente.

t =

ˆbj q

ˆ

V ar(ˆbj)

(44)

34 Capítulo 5. Regressão

por meio da distribuição t-Student com n − p graus de liberdade.

Um summary no objeto m1 irá apresentar, além do resumo dos testes t para cada parâmetro, o valor do R2e do R2 ajustado.

> summary(m1)

Call:

lm(formula = RP ~ DS, data = solo)

Residuals:

Min 1Q Median 3Q Max -1.3153 -0.4391 -0.1104 0.3594 2.1547

Coefficients:

Estimate Std. Error t value Pr(>|t|) (Intercept) -19.6177 1.2905 -15.20 <2e-16 *** DS 13.4882 0.7717 17.48 <2e-16 ***

---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.5953 on 82 degrees of freedom Multiple R-squared: 0.7884, Adjusted R-squared: 0.7858 F-statistic: 305.5 on 1 and 82 DF, p-value: < 2.2e-16

5.1.5

Intervalo de confiança e de predição

Um intervalo de 100(1 − alpha)% confiança para o valor esperado E(Yh) =

b0+ b1∗ Xhé dado por: ˆ yh± t1−α 2 q ˆ V ar(ˆyh)

podendo yh ser ou não um valor observado. Por outro lado, o erro de

pre-dição associado a uma observação futura pode ser utilizado para construir um intervalo de predição de 100(1 − alpha)% de confiança:

ˆ yh± t1−α 2 q ˆ σ2+ ˆV ar(ˆy h)

A diferença básica entre os intervalos reside no fato de que os limites do intervalo de confiança são para um parâmetro E(Yh), enquanto que a

predição está associada a uma variável aleatória não observada (observação

futura). Note também que o intervalo de predição é sempre maior que o

intervalo de confiança.

Com a função genérica predict(), iremos construir e adicionar ao plot anterior intervalos de 95% confiança e de predição com o ajuste obtido em m1.

> new <- data.frame(DS = seq(min(solo$DS), max(solo$DS), len = 99)) > ic <- predict(m1, newdata = new, interval = "confidence")

(45)

Capítulo 5. Regressão 35

> matlines(new$DS, ic, col = c("black", "red", "red"), lty = 2) > matlines(new$DS, ip, col = c("black", "blue", "blue"), lty = 3) > legend("topleft", c("confiança", "predição"),

+ title = "Intervalo de", lty = 2:3, + col = c("red", "blue"), cex = 0.8)

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 1.5 1.6 1.7 1.8 1 2 3 4 5 6 DS RP Intervalo de confiança predição

Figura 5.1: Intervalos de 95% confiança e de previsão para regressão linear da resistência do solo à penetração em função da densidade.

5.2

Regressão linear múltipla

Quando o modelo de regressã linear é composto por mais de um regressor, este modelo pode ser entendido como um modelo de regressão múltipla. Exemplo: o modelo y = b0+ b1x + b2x2+  tem apenas uma variável

expli-cativa, X, mas tem dois regressores: os termos X e X2. Essa é uma forma

geral de tratar modelos de regressão múltipla. Note que, de forma análoga,

Y pode ser explicado em função de mais de uma variável explicativa

pro-priamente dita (X1, X2, ..., Xk), digamos y = b0+ b1x1+ b2x2+ b3x3+ .

E ainda poderíamos adicionar a este modelo termos quadráticos, cúbicos... e ainda de produtos cruzados. Suponha então ajustar um modelo da RP em função de US, DS, CO e Argila.

> m2 <- lm(RP ~ DS + US + CO + Argila, data = solo) > summary(m2)

Call:

lm(formula = RP ~ DS + US + CO + Argila, data = solo)

(46)

36 Capítulo 5. Regressão

Residuals:

Min 1Q Median 3Q Max -1.23224 -0.41100 -0.04888 0.32306 1.74196

Coefficients:

Estimate Std. Error t value Pr(>|t|) (Intercept) -11.42886 2.59128 -4.411 3.22e-05 *** DS 9.56573 1.56371 6.117 3.43e-08 *** US -0.22656 0.05022 -4.512 2.21e-05 *** CO 0.00607 0.01585 0.383 0.703 Argila 0.02524 0.05057 0.499 0.619 ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.532 on 79 degrees of freedom Multiple R-squared: 0.8371, Adjusted R-squared: 0.8289 F-statistic: 101.5 on 4 and 79 DF, p-value: < 2.2e-16

A equação de regressão ajustada seria:

ˆ

RP = −11.42 + 9.56DS − 0.22U S + 0.006CO + 0.025Argila

Contudo, pelo teste t, apenas termos DS e US foram significativos (p < 0,05).

5.3

Stepwise

Em regressão múltipla, deve-se sempre buscar por modelos parcimoniosos, isto é, que sejam bem ajustados e com um mínimo possível de parâme-tros. Tais modelos são em geral obtidos por meio de seleção de variáveis explicativas. Um método amplamente utilizado de seleção é o stepwise, que consiste em:

• (Método backward) Ajustar inicialmente um modelo com todas as variáveis e, em seguida, eliminar uma a uma, desde que haja isso promova redução do AIC do modelo.

• (Método forward) Ajustar um modelo inicial, em geral apenas com a constante (b0), e em seguida adicionar variáveis que promovam

dimi-nuição do AIC.

• (Método stepwise) Consiste na mistura dos dois anteriores. Geral-mente parte-se de um modelo completo, e então avalia-se a exclusão e inclusão de variáveis em cada passo.

Assim como o R2 ajustado, critérios de informação são bastante

utili-zados como critério de escolha do modelo. Destaca-se aqui o critério de Akaike (AIC):

(47)

Capítulo 5. Regressão 37

AIC = −2logLike + 2k

em que logLike é o log natural da função de verossimilhança do modelo, e k é o número de parâmetros. Quanto menor o valor do AIC, melhor o ajuste do modelo.

Realizando um stepwise bidirecional a partir do modelo m2, teremos: > step(m2) Start: AIC=-101.17 RP ~ DS + US + CO + Argila Df Sum of Sq RSS AIC - CO 1 0.0415 22.403 -103.017 - Argila 1 0.0705 22.432 -102.908 <none> 22.361 -101.173 - US 1 5.7615 28.123 -83.916 - DS 1 10.5924 32.954 -70.600 Step: AIC=-103.02 RP ~ DS + US + Argila Df Sum of Sq RSS AIC - Argila 1 0.0387 22.441 -104.872 <none> 22.403 -103.017 - US 1 6.0633 28.466 -84.897 - DS 1 10.6293 33.032 -72.400 Step: AIC=-104.87 RP ~ DS + US Df Sum of Sq RSS AIC <none> 22.441 -104.872 - US 1 6.6177 29.059 -85.165 - DS 1 27.1590 49.600 -40.253 Call:

lm(formula = RP ~ DS + US, data = solo)

Coefficients:

(Intercept) DS US -11.646 9.910 -0.214 E assim, o modelo selecionado é:

ˆ

RP = −11.646 + 9.910DS − 0.214U S

5.4

Construíndo superfícies de resposta

Assim como fazemos diagramas de dispersão bidimensional para verificar a relação entre duas variáveis, um gráfico tridimensional pode ser feito com

(48)

38 Capítulo 5. Regressão

o exemplo usado aqui. Para tal, utilizaremos a função scatterplot3d() do pacote homônimo, que, embora não forneca soluções gráficas muito so-fisticada, é uma implementação simples e de fácil uso.

> library(scatterplot3d)

> s3d <- scatterplot3d(x = DS, y = US, z = RP, angle = 45)

Feito isso, e tendo-se ajustado o modelo (m2), é possível adicionar ainda um plano 3D representando o ajuste da regressão.

> m2 <- lm(RP ~ DS + US, data = solo) > s3d$plane3d(m2, col = "blue")

1.4 1.5 1.6 1.7 1.8 1.9 0 1 2 3 4 5 6 7 4 6 8 10 1214 16 DS US RP ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

Figura 5.2: Diagrama de dispersão em 3D e plano de regressão ajustado para resistência à penetração em função da densidade e umidade do solo.

Nota: É importante salientar que a função plane3d() serve,

unica-mente, para construir planos de regressão. Quaisquer outros modelos, contendo não apenas os termos lineares, devem ser representados grafica-mente com outras funções mais gerais, tal como a função persp().

5.5

Regressão não linear

A relação entre uma variável explicativa ou explanatória X e uma variável resposta Y pode ser do tipo linear ou não linear. Mas atenção, NÃO é esta forma de associação que define se um modelo de regressão é linear ou não. Isto é, na verdade, definido pela forma como os parâmetros do modelo se relacionam. Assim, dizemos que a equação y = b0+ b1x + b2x2+  constitui

(49)

Capítulo 5. Regressão 39

que um modelo é não linear se pelo menos uma das derivadas parciais em relação aos parâmetros for uma função de pelo menos um parâmetro. Por exemplo, o modelo y = b0+ xb1+  é não linear, pois:

∂y ∂b1

= f (b1) = xb1log(x)

O método de estimação mais utilizado é o método dos mínimos

quadra-dos não lineares, cujo princípio é o mesmo do método de mínimos quadraquadra-dos

para modelos lineares. Contudo, modelos não lineares raramente possuem forma fechada para os estimadores. Assim sendo, a estimação é feita por um processo iterativo, de acordo com algum algoritmo de busca, tais como Gauss-Newton, Newton-Raphson, Gauss-Marquardt, entre outros. O uso de processos iterativos requer, então, valores (ou chutes) iniciais para os parâmetros.

Exemplo

Visando determinar o tamanho ideal de parcelas experimentais, Lessman & Atkins (1963) propuseram o seguinte modelo para o coeficiente de variação experimental:

y = b0x−b1+ 

em que y é o coeficiente de variação experimental; x é o tamanho da parcela;

b0 e b1 são parâmetros.

Uma forma bastante simples de se obter valores iniciais é por meio da

linearização do modelo não linear, ignorando (obviamente) o erro aleatório.

Com o exemplo, podemos fazer:

log(y) = log(b0) − b1log(x)

que é, agora, um modelo de regressão linear simples.

Considere agora os seguintes dados de CV % e tamanho de parcela (m2):

> ps <- c(1, 2, 3, 4, 6, 8, 12)

> cv <- c(35.6, 29, 27.1, 25.6, 24.4, 23.3, 21.6) > lm(log(cv) ~ log(ps))

Call:

lm(formula = log(cv) ~ log(ps))

Coefficients:

(Intercept) log(ps) 3.5309 -0.1908

Poderíamos então utilizar esses valores iniciais (3.53 e -0.19) para obter as estimativas de mínimos quadrados não lineares, usando a função nls(). > nls(cv ~ b0*ps^-b1,

+ start = list(b0 = exp(3.53), b1 = 0.19)) Nonlinear regression model

(50)

40 Capítulo 5. Regressão model: cv ~ b0 * ps^-b1 data: parent.frame() b0 b1 34.5394 0.1996 residual sum-of-squares: 3.665

Number of iterations to convergence: 3 Achieved convergence tolerance: 3.061e-06

Podemos agora desenhar o ajuste da regressão (5.3):

> plot(ps, cv)

> curve(34.54*x^-0.1996, add = TRUE, col = "blue")

● ● ● ● ● ● ● 2 4 6 8 10 12 22 24 26 28 30 32 34 36 ps cv

Figura 5.3: Ajuste do modelo não linear para o coeficiente de variação experimental em função do tamanho da parcela.

5.6

Linear Response Plateau

Não raramente, em estudos de nutrição de plantas, é esperado que a partir de certo ponto haja uma faixa de estabilização da produção ou cresimento vegetal em função da adição de nutrientes. Nesse caso, parece bastante apropriado ajustar um modelo de regressão do tipo LRP ou platô de res-posta linear.

(51)

Capítulo 5. Regressão 41

O modelo LRP nada mais é do que um modelo de regressão segmentado, em duas partes, sendo que em uma delas a resposta é descrita por um modelo de regressão linear simples, e a outra é descrita por uma reta (platô), isto é, onde a resposta é constante. Formalmente, o escrevemos da seguinte forma: y = h(x) + , em que:

h(x) =



b0+ b1x, x ≤ x0 b0+ b1x0, x > x0

sendo o parâmetro x0 o valor no eixo-x que delimita o platô.

Exemplo

Hartinee et al. (2010) utilizaram o modelo LRP para determinar a exigência de nitrogênio por arroz. Dados de produção em função de doses de um fertilizante nitrogenado são mostrados na tabela a seguir:

Tabela 5.1: Efeito de N na produção de arroz (Hartinee et al., 2010). N 0 50 100 150 200

Prod. 7.67 14.46 19.84 20.04 20.59

A relação entre produção e dose de N pode ser melhor entendida quando visualizada graficamente. Isso ainda nos ajudará identificar onde deve estar o platô.

> N <- c(0, 50, 100, 150, 200)

> prod <- c(7.67, 14.46, 19.84, 20.04, 20.59) > plot(prod ~ N)

No R, uma forma prática de estimar os parâmetros do modelo LRP é tratando-o como um modelo não linear, via a implementação nls(). > lrp <- function (x, b0, b1, x0)

+ ifelse(x <= x0, b0 + b1*x, b0 + b1*x0) > nls(prod ~ lrp(N, b0, b1, x0),

+ start = list(b0 = 8, b1 = 0.1, x0 = 80)) Nonlinear regression model

model: prod ~ lrp(N, b0, b1, x0) data: parent.frame()

b0 b1 x0

7.6700 0.1358 91.9489

residual sum-of-squares: 0.3017

Number of iterations to convergence: 2 Achieved convergence tolerance: 1.147e-08

Logo, a equação ajustada foi:

(52)

42 Capítulo 5. Regressão ˆ y =  7.67 + 0.1358x, x ≤ 91.9489 20.15666, x > 91.9489

sendo 21.15666 o platô de resposta.

A figura 5.4 mostra o ajuste do modelo.

● ● ● ● ● 0 50 100 150 200 8 10 12 14 16 18 20 N prod

Figura 5.4: Ajuste do modelo LRP aos dados de produção de arroz em função de doses de fertilizante nitrogenado.

5.7

Exercícios

1. Ajuste um modelo de regressão linear múltipla para a resistência à penetração em função da densidade e umidade do solo de cada uma das duas camadas (0-20 e 20-40 cm). Depois construa um diagrama de dispersão 3D, indicando com cores diferentes as observações tomadas em cada camada. Finalmente, adicione a esse gráfico os dois planos de regressão ajustados, separando também pelas cores das observações. 2. Como você classificaria o seguinte modelo, linear ou não linear?

y = b1x + b2x + 

3. Busscher (1990) propôs o seguinte modelo para a resistência à pene-tração:

(53)

Capítulo 5. Regressão 43

Em que θ é o conteúdo de água no solo, ρ é o valor da densidade do solo, b0, b1 e b2 são parâmetros. Pede-se: com os dados das duas

camadas, ajuste o modelo de Busscher e construa a superfície de resposta.

4. Em 1909, o alemão E. A. Mitscherlich desenvolveu uma equação rela-cionando o crescimento de plantas ao suprimento de nutrientes, subs-tituindo o modelo linear de Leibig. A lei de Mitscherlich é descrita pela equação:

y = A[1 − 10−c(x+b)]

em que y é a resposta obtida (produção), x é a dose do fertilizante,

A é um parâmetro que representa a produção máxima, b é um

parâ-metro que representa a quantidade (dose) previamente existente no solo e c é um parâmetro que representa um coeficiente de eficácia do fertilizante. À exceção de c, todos os demais componentes da equação são expressos em kg ha−1. Esta lei foi estudada por Pimentel-Gomes (1953) com os seguintes dados de produtividade de cana-de-açúcar (t ha−1) em função de doses de vinhaça (m3 ha−1).

Dose 0 250 500 1000 Prod. 47 75 90 98

Pede-se: ajuste o modelo de Mitscherlich e represente-o graficamente.

Dica: use como valores iniciais para b e c os resultados obtidos com:

mean(diff(dose)) e 1/mean(dose), respectivamente.

Você conseguiu perceber alguma desvantagem do modelo de Mitscher-lich? Será que o modelo linear quadrático seria mais apropriado no caso presente (sim/não, por quê)?

(54)
(55)

Capítulo 6

Análise de variância e

delineamentos

experimentais

Frequentemente conduzimos experimentos para provar hipóteses científi-cas. Adimitindo que estes sejam delineados de forma adequada e regidos pelos princípios básicos da experimentação (repetição, casualização, con-trole local), a variação total dos dados pode ser decomposta em partes conhecidas, devidas aos fatores estudados, e em parte desconhecida, o erro experimental. Essa técnica de decomposição é denominada análise de

va-riância (ANOVA), e está associada ao teste F para as fontes de variação

conhecidas, tais como tratamentos, interação etc.

Veremos neste capítulo, como relizar análise de variância de dados ex-perimentais provenientes do delineamento inteiramente casualizado (DIC) e de blocos casualizados (DBC), ambos envolvendo apenas um fator de tratamento.

6.1

One-way ANOVA

Suponha estudar apenas um fator com I níveis (i = 1, 2, ..., I), cada um repetido ri vezes (j = 1, 2, ..., ri). O modelo de ANOVA associado é:

yij = µi+ ij

em que yij é a observação tomada na j-ésima repetição do i-ésimo nível do

fator; µié a média do i-ésimo nível do fator; ijé o erro aleatório associado

a observação yij.

A hipótese à ser verificada é: H0 : µ1 = µ2 = ... = µI, contra a

alternativa de que ao menos um dos níveis tem efeito não nulo ou, de forma mais simples, que ao menos uma das médias dos níveis difere das demais.

(56)

46 Capítulo 6. Análise de variância e delineamentos experimentais

Exemplo

Considere dados1de produção de quatro variedades de milho, obtidos de um experimento em delineamento inteiramente casualizado (DIC) com cinco repetições. Os mesmos estão disponíveis emarsilva.weebly.com. > milho <- read.table("http://arsilva.weebly.com/uploads/2 + /1/0/0/21008856/milho.txt", header = TRUE)

O ajuste do modelo de ANOVA é feito da seguinte forma: > lm.milho <- lm(prod ~ variedade, data = milho) > lm.milho

Call:

lm(formula = prod ~ variedade, data = milho)

Coefficients:

(Intercept) variedadeB variedadeC variedadeD

23 4 3 8

Nesse caso, o objeto lm.milho contem as estimativas de µA (23), ˆµB =

ˆ

µA+ 4, ˆµC = ˆµA+ 3 e ˆµD = ˆµA+ 8. Isso porque o modelo é de posto

incompleto2.

A tabela da ANOVA só é obtida com auxílio da função anova(): > anova(lm.milho)

Analysis of Variance Table

Response: prod

Df Sum Sq Mean Sq F value Pr(>F) variedade 3 163.75 54.583 7.7976 0.001976 ** Residuals 16 112.00 7.000

---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Concluímos então pelo teste F que há diferença (p = 0.0019) entre ao menos duas das médias dos cultivares.

6.2

Testando a homogeneidade de variâncias

Ao se ajustar um modelo de ANOVA, além de independência e normalidade dos erros, assumimos também que as variâncias residuais sejam homogêneas para o fator em estudo (variedade, no caso), sob pena de se fazer inferências erroneas. Assim, o teste da considerada mais importante das pressuposições do modelo, H0: σ21= σ 2 2= ... = σ 2 I = σ

pode ser realizado com a estatística de Bartlett.

1Extraídos de Vieira e Hoffmann (1999).

(57)

Capítulo 6. Análise de variância e delineamentos experimentais 47

> bartlett.test(residuals(lm.milho) ~ variedade, data = milho)

Bartlett test of homogeneity of variances

data: residuals(lm.milho) by variedade

Bartlett’s K-squared = 0.03706, df = 3, p-value = 0.9981

Em se obtendo p = 0.9981, concluímos que as variâncias das variedades podem ser consideradas homogêneas.

Nota: Observe que é muito importante que o teste de homogeneidade de

variâncias seja feito com base nos resíduos do modelo, não nos dados!

6.3

Two-way ANOVA

Suponha agora estudar dois fatores, um com I níveis (i = 1, 2, ..., I) e o outro com J níveis (j = 1, 2, ..., J ), em que cada observação yij está sob o

efeito da combinação de dois níveis desses fatores. O modelo de ANOVA associado é:

yij= µ + τi+ βj+ ij

em que µ é a média geral; τié o efeito do i-ésimo nível do primeiro fator; βj

é o efeito do j-ésimo nível do segundo fator; ij é o erro aleatório associado

a observação yij.

A hipótese à ser verificada pode ser tanto de igualdade de médias de um quanto do outro fator. Se associarmos este modelo ao delineamento de

blocos casualizados (DBC), então apenas o teste do fator de tratamentos

interessa, sendo o segundo fator apenas para controle local ou blocagem.

Exemplo

Considere dados de produção de quatro cultivares de batata, obtidos de um experimento em delineamento em blocos ao acaso (DBC) com três blocos. Os mesmos estão disponíveis emarsilva.weebly.com.

> batata <- read.table("http://arsilva.weebly.com/uploads/2/ + 1/0/0/21008856/batata.txt", h = TRUE)

> batata$cultivar <- as.factor(batata$cultivar) > batata$bloco <- as.factor(batata$bloco)

Perceba que as duas últimas esta últimas linhas de comando são ne-cessárias para que ao ajustar o modelo linear, o programa não entenda os níveis de cultivar nem de bloco como valores numéricos e sim como categorias ou níveis de um fator mesmo.

A ANOVA é obtida fazendo:

> lm.batata <- lm(prod ~ cultivar + bloco, data = batata) > anova(lm.batata)

Analysis of Variance Table

(58)

48 Capítulo 6. Análise de variância e delineamentos experimentais

Response: prod

Df Sum Sq Mean Sq F value Pr(>F) cultivar 3 4.3825 1.46083 13.8031 0.004218 ** bloco 2 0.4650 0.23250 2.1969 0.192373 Residuals 6 0.6350 0.10583 ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

6.4

O teste da aditividade

Em experimentos em DBC, é assumido no modelo que não há interação entre blocos e fatores principais (tratamentos), isto é, que os efeitos de blo-cos e tratamentos sejam aditivos (não multiplicativos). Esta presuposição pode ser avaliada por meio do teste de Tukey para não-aditividade. O teste consiste em separar um grau de liberdade do resíduo, que de fato consiste da interação tratamentos × blocos, na análise de variância e aplicar o teste

F para testar a hipótese H0 de aditividade. Para isso, o termo λτiβj é

adicionado ao modelo. Neste caso, podemos escrever H0 : λ = 0, e para

executar o teste basta extrair os valores preditos e inserí-los como efeito quadrático no modelo.

> lambda <- predict(lm.batata)^2

> anova(lm(prod ~ cultivar + bloco + lambda, data = batata)) Analysis of Variance Table

Response: prod

Df Sum Sq Mean Sq F value Pr(>F) cultivar 3 4.3825 1.46083 11.6357 0.0108 * bloco 2 0.4650 0.23250 1.8519 0.2501 lambda 1 0.0073 0.00727 0.0579 0.8195 Residuals 5 0.6277 0.12555 ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

A fonte de variação lambda corresponde ao teste da aditividade. No caso, como p = 0.8195, não rejeitamos H0.

6.5

A precisão experimental: CV vs. IV

A precisão experimental é comumente avaliada pelo coeficiente de variação experimental, dado por:

CV (%) = 100

QM res

ˆ

µ

Por exemplo, no caso do primeiro exemplo deste capítulo (dados de mi-lho), CV (%) = 1007.0/26.75 = 9.98%. De acordo a classificação proposta por Pimentel-Gomes (2009), esse valor indica alta precisão experimental.

(59)

Capítulo 6. Análise de variância e delineamentos experimentais 49

Entretanto, é preciso uma análise mais cuidadosa quanto à classificação do CV, já que este varia com o delineamento experimental, espécie, variável resposta, tipo de estudo etc.

Quando da comparação da precisão de experimentos instalados em con-dições diferentes, como número de repetições (r) diferentes, é sabido que o coeficiente de variação não é a medida mais indicada, já que quanto maior o número de repetições, menor tende a ser o CV. Pimentel-Gomes (1991) propôs então utilizar uma medida mais conveniente, o índice de variação (IV), corrigindo assim o problema do número diferente de repetições.

IV (%) =CV

r

6.6

Exercício

Instalou-se um experimento para avaliar o comportamento de 9 porta-enxertos para a laranjeira Valência, casualizado em blocos com 3 repetições. Após 12 anos, foram avaliados, então, os resultados de produção, em nú-mero médio de frutos por planta. Os dados estão disponíveis emhttp:// arsilva.weebly.com/dados.html, sob o nome "laranja.txt"(Fonte: Teó-filo Sobrinho, 1972). Faça a leitura destes e depois a análise de variância, verificando também as pressuposições do modelo que se fizerem necessá-rias.

(60)
(61)

Capítulo 7

Procedimentos de

comparações múltiplas de

médias

Quando o teste F da ANOVA está sendo utilizado para testar diferenças entre I tratamentos, a seguinte hipótese de nulidade é formulada

H0: µ1= µ2= ... = µI

Entretanto, quando I > 2, algumas comparações específicas de trata-mentos podem ser interesse. Nesse contexto, os proceditrata-mentos de compa-rações múltiplas (PCM) são apropriados, desde que tratamento seja um fator qualitativo, e servem como um complemento do teste F .

Há um número razoável de PCM disponível atualmente. Aplicaremos 5 deles e separando-os de acordo com a finalidade, em dois tipos principais: para comparações planejadas e comparações post-hoc.

7.1

Teste t para contrastes

Um contraste é uma combinação linear de médias, cuja soma dos coefi-cientes é nula. Por exemplo, revisitando o exemplo sobre cultivares de

batata do capítulo anterior, podemos construir um contraste entre médias de cultivares resistentes (1 e 3) e suscetíveis (2 e 4) à P. infestans:

C = (µ1+ µ3) − (µ2+ µ4)

No caso, o teste de C refere-se a comparação de dois grupos de médias, conforme podemos escrever na hipótese H0: µ13= µ24. A estatística

t-Student pode ser utilizada para testar a significância de um contraste, pois:

Referências

Documentos relacionados

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Of these priority areas, 1123 are already protected (as protected area sites or as indigenous lands), and another 11 are areas that do not have a protection status. The

Na primeira década da existência do Estado de Minas Gerais, a legislação educacional mineira estabeleceu o perfil de professor estadual, imputando como formação

Analysis of relief and toponymy of the landscape based on the interpretation of the military topographic survey: Altimetry, Hypsometry, Hydrography, Slopes, Solar orientation,

3259 21 Animação e dinamização de actividades lúdico-expressivas - expressão musical 50 3260 22 Animação e dinamização de actividades lúdico-expressivas -

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de