7 Manipulação de objeto
7.1 Como remover um ponto no R?
Conjunto de dados: Neste tutorial iremos trabalhar com dados simulados, considerando um experimento inteiramente casualizado com cinco repetições e cinco tratamentos. Abaixo segue os valores da resposta e os tratamentos.
=c(3.1,3.2,3.4,3.8,4,5.0,5.1,5.6,6.2,7,10,10.2,10.7,11,12,6,6.5,6.2,7,6.9,20,5.2,5.6,5.8,6)
resposta=rep(c(paste("T",1:5)),e=5) Trat
Este conjunto de dados apresenta um ponto discrepante das demais repetições de um dos tratamentos. Uma das formas de descobrir este ponto é através de um gráfico de caixas, conforme segue abaixo.
## Utilizando o pacote car
::Boxplot(resposta~Trat) car
## [1] "21"
Inicialmente vamos construir um modelo de análise de variância em DIC sem remover o ponto discrepante e analisar quanto aos pressupostos de normalidade dos erros e homogeneidade das variâncias.
=aov(resposta~Trat)
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.60825, p-value = 5.291e-07
bartlett.test(modelo$residuals~Trat)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat
## Bartlett's K-squared = 41.623, df = 4, p-value = 1.997e-08
Pode-se concluir que os pressupostos foram corrompidos e análise de variância não é válida. Dessa forma, poderiamos transformar os dados pela metodologia de Box-Cox (1964), conforme segue abaixo:
=MASS::boxcox(modelo) bc
=bc$x[which.max(bc$y)]
lambda=aov((resposta^lambda-1)/lambda~Trat)
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.9009, p-value = 0.01919
bartlett.test(modelo$residuals~Trat)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat
## Bartlett's K-squared = 17.295, df = 4, p-value = 0.001693
Nesse exemplo em questão a transformação de dados não resolve os problemas de normalidade dos erros e homogeneidade das variâncias. Neste sentido, as vezes a simples remoção de um ponto discrepante poderia resolver esses problemas. Dessa forma, vamos remover o ponto 21, conforme acusado pela gráfico de caixas.
Para remover o ponto, podemos efetuar de várias formas. Manualmente em cada um dos vetores, criando uma nova variável, usando o comando with
, entre outros.
Removendo manualmente em cada vetor
=aov(resposta[-21]~Trat[-21])
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.94239, p-value = 0.1844
bartlett.test(modelo$residuals~Trat[-21])
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat[-21]
## Bartlett's K-squared = 4.5314, df = 4, p-value = 0.3388
::Boxplot(resposta[-21]~Trat[-21]) car
Criando novos vetores de dados
=Trat[-21]
Trat1=resposta[-21]
resposta1=aov(resposta1~Trat1)
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.94239, p-value = 0.1844
bartlett.test(modelo$residuals~Trat1)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat1
## Bartlett's K-squared = 4.5314, df = 4, p-value = 0.3388
::Boxplot(resposta1~Trat1) car
Removendo utilizando o with
=data.frame(Trat,resposta)
dados=with(dados[-21,],aov(resposta~Trat))
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.94239, p-value = 0.1844
with(dados[-21,],bartlett.test(modelo$residuals~Trat))
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat
## Bartlett's K-squared = 4.5314, df = 4, p-value = 0.3388
with(dados[-21,],car::Boxplot(resposta~Trat))
7.2 Como remover um Tratamento?
=data.frame(Trat,resposta)
dados=with(dados[!Trat=="T 5",],aov(resposta~Trat))
modeloshapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.93316, p-value = 0.1776
with(dados[!Trat=="T 5",],bartlett.test(modelo$residuals~Trat))
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Trat
## Bartlett's K-squared = 3.1774, df = 3, p-value = 0.3651
with(dados[!Trat=="T 5",],car::Boxplot(resposta~Trat))