Referências para leitura deste material:
Abreviação: Teste de hipóteses (TH’s).
Problema. O gerente de um restaurante está interessado na distribuição do tempo de entrega de pedidos realizados pelo aplicativo do restaurante. Para tal estudo, uma amostra aleatória simples de 32 tempos de entrega (em minutos) foram registrados (veja os dados no script abaixo). Estudos prévios mostram que estes tempos formam uma amostra aleatória simples de uma distribuição normal com desvio padrão de 9 minutos.Teste a hipótese que o tempo médio de entrega de pedidos pelo aplicativo é menor que 25 minutos (\(H_{0}:\mu=25\hspace{0.2cm}\mbox{min}\) versus \(H_{1}:\mu<25\hspace{0.2cm}\mbox{min}\)). Apresente uma estimativa intervalar para o tempo médio de entrega com confiança de 95%.
library(TeachingDemos)
dados <- c(4.24,9.94,11.31,11.84,13.89,19.97,21.18,22.15,
22.44,24.69,25.20,25.36,25.62,26.96,27.25,27.42,
29.98,32.54,32.98,34.88,35.34,35.44,35.57,36.29,
37.03,38.13,41.88,44.16,48.89,49.78,51.63,52.27)
summary(dados)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.24 22.37 28.70 29.88 36.48 52.27
var(dados)
## [1] 153.3435
sd(dados)
## [1] 12.38319
out <- z.test(x=dados,mu=25,stdev=9,alt="less",n=length(dados),conf.level=0.95)
out
##
## One Sample z-test
##
## data: dados
## z = 3.069, n = 32.000, Std. Dev. = 9.000, Std. Dev. of the sample mean
## = 1.591, p-value = 0.9989
## alternative hypothesis: true mean is less than 25
## 95 percent confidence interval:
## -Inf 32.49976
## sample estimates:
## mean of dados
## 29.88281
names(out)
## [1] "statistic" "parameter" "p.value" "conf.int" "estimate"
## [6] "null.value" "alternative" "method" "data.name"
out$p.value
## [1] 0.9989263
out$conf.int
## [1] -Inf 32.49976
## attr(,"conf.level")
## [1] 0.95
as.vector(out$conf.int)
## [1] -Inf 32.49976
Não rejeitamos a hipótese nula \(H_{0}\) (veja que o p-valor é alto, \(0.9989\)). Portanto, não existem evidências
experimentais que o tempo médio de entrega de pedidos pelo aplicativo
seja menor que 25 minutos. Note que o intervalo de 95% confiança
proporcionado pela função z.test() (do pacote
TeachingDemos) contém a hipótese \(H_{0}\).
hist(dados,freq=FALSE,xlab="Tempos",ylab="Densidade",main="")
curve(dnorm(x,mean=mean(dados),sd=sd(dados)),-10,70,col="blue",add=TRUE)
abline(v=mean(dados),col="red")
qqnorm(dados,xlab="Quantis teóricos",ylab="Quantis amostrais",main="Q-Q Plot Normal")
qqline(dados,col="red")
Problema. Considere os dados e a mesma situação do problema anterior, mas não assuma conhecimento em relação à variância populacional da normal em questão. Teste \(H_{0}:\mu=20\hspace{0.2cm}\mbox{min}\) versus \(H_{1}:\mu\not=20\hspace{0.2cm}\mbox{min}\). Caso a hipótese nula seja rejeitada, apresente uma estimativa intervalar para o tempo médio de entrega com confiança de 95%.
dados <- c(4.24,9.94,11.31,11.84,13.89,19.97,21.18,22.15,
22.44,24.69,25.20,25.36,25.62,26.96,27.25,27.42,
29.98,32.54,32.98,34.88,35.34,35.44,35.57,36.29,
37.03,38.13,41.88,44.16,48.89,49.78,51.63,52.27)
out <- t.test(x=dados,mu=20,alternative="two.sided",conf.level=0.95)
out
##
## One Sample t-test
##
## data: dados
## t = 4.5146, df = 31, p-value = 8.588e-05
## alternative hypothesis: true mean is not equal to 20
## 95 percent confidence interval:
## 25.41819 34.34743
## sample estimates:
## mean of x
## 29.88281
names(out)
## [1] "statistic" "parameter" "p.value" "conf.int" "estimate"
## [6] "null.value" "stderr" "alternative" "method" "data.name"
out$p.value
## [1] 8.587632e-05
as.vector(out$conf.int)
## [1] 25.41819 34.34743
Rejeitamos a hipótese nula \(H_{0}\)
(veja que o p-valor é muito pequeno, \(8.587632\times 10^{-5}\)). Portanto,
existem evidências experimentais que o tempo médio de entrega de pedidos
pelo aplicativo é diferente de 20 minutos. A função
t.test() proporciona um intervalo de 95% confiança para o
tempo médio de entrega populacional \(\mu\), que é \(\mbox{IC}(\mu;0.95)=(25.41819,34.34743)\)
minutos. Note que, neste caso, o intervalo não contém \(H_{0}\).
Problema. Considere os dados e a mesma situação do problema anterior, novamente sem assumir conhecimento algum em relação à variância populacional da normal em questão. Desenvolva o seguinte teste de hipóteses \(H_{0}:\sigma^{2}=81\hspace{0.2cm}\mbox{min}^{2}\) versus \(H_{1}:\sigma^{2}>81\hspace{0.2cm}\mbox{min}^{2}\). Caso a hipótese nula seja rejeitada, apresente uma estimativa intervalar para a variância do tempo de entrega de pedidos, com confiança de 95%.
library(EnvStats)
##
## Attaching package: 'EnvStats'
## The following objects are masked from 'package:stats':
##
## predict, predict.lm
## The following object is masked from 'package:base':
##
## print.default
dados <- c(4.24,9.94,11.31,11.84,13.89,19.97,21.18,22.15,
22.44,24.69,25.20,25.36,25.62,26.96,27.25,27.42,
29.98,32.54,32.98,34.88,35.34,35.44,35.57,36.29,
37.03,38.13,41.88,44.16,48.89,49.78,51.63,52.27)
out <- varTest(dados,alternative="greater",sigma.squared=81,conf.level=0.95,data.name="dados")
out
##
## Chi-Squared Test on Variance
##
## data: dados
## Chi-Squared = 58.687, df = 31, p-value = 0.001921
## alternative hypothesis: true variance is greater than 81
## 95 percent confidence interval:
## 105.6711 Inf
## sample estimates:
## variance
## 153.3435
names(out)
## [1] "statistic" "parameters" "p.value" "estimate" "null.value"
## [6] "alternative" "method" "data.name" "conf.int"
out$p.value
## [1] 0.001921262
as.vector(out$conf.int)
## [1] 105.6711 Inf
#
#
#
sigma2.0 <- 81
n <- length(dados);n
## [1] 32
s2 <- var(dados);s2
## [1] 153.3435
Q <- ((n-1)*s2)/sigma2.0;Q
## [1] 58.68702
pvalor <- 1-pchisq(Q,df=n-1);pvalor
## [1] 0.001921262
Rejeitamos a hipótese nula \(H_{0}\)
(veja que o p-valor é muito pequeno, \(0.001921\)). Portanto, existem evidências
experimentais que a variância do tempo de entrega de pedidos pelo
aplicativo seja maior que 81 minutos ao quadrado (ou seja, que o desvio
padrão do tempo de entrega de pedidos pelo aplicativo seja maior que 9
minutos). A função var.Test() do pacote
EnvStats proporciona um intervalo de 95% confiança para a
variância populacional \(\sigma^{2}\)
do tempo de entrega populacional de pedidos e este intervalo não contém
\(H_{0}\).
Problema. Uma amostra de 500 habitantes de uma cidade com idade igual ou superior a 16 anos foi selecionada para participar de uma pesquisa de opinião. Cada pessoa na amostra respondeu se concordava ou não com a solução proposta pela prefeitura da cidade para resolver um problema municipal que está prejudicando seriamente a população. As opções de resposta para a pergunta são: sim (se a pessoa é favorável a solução proposta) ou não (se a pessoa não é favorável a solução proposta). Das 500 pessoas ouvidas, 300 responderam sim e 200 responderam não. Com base nos dados, deseja-se testar se a proporção da população em questão (habitantes da cidade com idade igual ou superior a 16 anos) que é favorável a solução proposta pela prefeitura é igual a 1/2 ou é diferente de 1/2.
respostas <- c(rep("nao",200),rep("sim",300))
respostas <- factor(respostas,levels=c("nao","sim"))
df <- data.frame(Indivíduos=1:500,Resposta=respostas)
str(df)
## 'data.frame': 500 obs. of 2 variables:
## $ Indivíduos: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Resposta : Factor w/ 2 levels "nao","sim": 1 1 1 1 1 1 1 1 1 1 ...
freq <- as.vector(table(df$Resposta))
prop <- as.vector(prop.table(table(df$Resposta)))
tabela <- data.frame(Classe=c("Não","Sim"),Frequencia=freq,Proporções=prop)
tabela
## Classe Frequencia Proporções
## 1 Não 200 0.4
## 2 Sim 300 0.6
#
# Teste binomial exato para a proporção de uma população de Bernoulli
#
out <- binom.test(x=300,n=500,p=0.5,alternative="two.sided",conf.level=0.95)
out
##
## Exact binomial test
##
## data: 300 and 500
## number of successes = 300, number of trials = 500, p-value = 8.94e-06
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.5555718 0.6432386
## sample estimates:
## probability of success
## 0.6
names(out)
## [1] "statistic" "parameter" "p.value" "conf.int" "estimate"
## [6] "null.value" "alternative" "method" "data.name"
out$p.value
## [1] 8.940067e-06
as.vector(out$conf.int)
## [1] 0.5555718 0.6432386
#
#
#
pvalor <- 2*(1-pbinom(299,size=500,prob=0.5));pvalor
## [1] 8.940067e-06
Rejeitamos a hipótese nula \(H_{0}\)
(veja que o p-valor é muito pequeno, \(8.94\times 10^{-6}\)). Portanto, existem
evidências experimentais que a proporção da população em questão
(habitantes da cidade com idade igual ou superior a 16 anos) que é
favorável a solução proposta pela prefeitura é diferente de 1/2. A
função binom.test() proporciona um intervalo de 95%
confiança exato para \(p\), que é dado
por \(\mbox{IC}(p;0.95)=(0.5555718,0.6432386)\).
Note que, neste caso, o intervalo não contém \(H_{0}\).
Problema. Considere novamente os dados e a mesma situação do problema anterior.
tabela
## Classe Frequencia Proporções
## 1 Não 200 0.4
## 2 Sim 300 0.6
#
# Teste para a proporção de uma população de Bernoulli
# sem correção de continuidade (grandes amostras)
#
out <- prop.test(x=300,n=500,p=0.5,alternative="two.sided",conf.level=0.95,correct=FALSE)
out
##
## 1-sample proportions test without continuity correction
##
## data: 300 out of 500, null probability 0.5
## X-squared = 20, df = 1, p-value = 7.744e-06
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5564541 0.6420210
## sample estimates:
## p
## 0.6
#
# Teste para a proporção de uma população de Bernoulli
# com correção de continuidade (grandes amostras)
#
out <- prop.test(x=300,n=500,p=0.5,alternative="two.sided",conf.level=0.95,correct=TRUE)
out
##
## 1-sample proportions test with continuity correction
##
## data: 300 out of 500, null probability 0.5
## X-squared = 19.602, df = 1, p-value = 9.537e-06
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5554442 0.6429956
## sample estimates:
## p
## 0.6
#
# Alternativamente, podemos utilizar também neste problema
# o teste qui-quadrado
#
out <- chisq.test(x=c(200,300),p=c(0.5,0.5),correct=FALSE)
out
##
## Chi-squared test for given probabilities
##
## data: c(200, 300)
## X-squared = 20, df = 1, p-value = 7.744e-06
names(out)
## [1] "statistic" "parameter" "p.value" "method" "data.name" "observed"
## [7] "expected" "residuals" "stdres"
out$statistic
## X-squared
## 20
out$parameter
## df
## 1
pvalor <- 1-pchisq(out$statistic,df=out$parameter);pvalor
## X-squared
## 7.744216e-06
Os resultados obtidos com as funções prop.test() e
chisq.test() estão em concordância com os resultados exatos
obtidos com a função binom.test().
| Teste | Decisão | P.valor | limite.inf.IC95 | limite.sup.IC95 |
|---|---|---|---|---|
| Teste binomial exato | Rejeita H0 | 8.94e-06 | 0.5555718 | 0.6432386 |
| Teste-z sem correção (grandes amostras) | Rejeita H0 | 7.74e-06 | 0.5564541 | 0.6420210 |
| Teste-z com correção (grandes amostras) | Rejeita H0 | 9.54e-06 | 0.5554442 | 0.6429956 |
Problema. Um material radioativo emite partículas alfa ao longo do tempo. Deseja-se entender a distribuição dos tempos entre duas emissões sucessivas de partículas alfa deste material. Para tal estudo, uma amostra aleatória simples de 36 tempos entre duas emissões sucessivas foram registrados (veja os dados no script abaixo). Teste a hipótese que o tempo médio entre duas emissões sucessivas é igual a 1. Se a hipótese nula for rejeitada, apresente uma estimativa intervalar para o tempo médio entre duas emissões sucessivas com confiança de 95%.
library(TeachingDemos)
dados <- c(0.02,0.04,0.05,0.07,0.07,0.09,0.09,0.10,0.12,
0.22,0.28,0.34,0.34,0.35,0.36,0.43,0.43,0.46,
0.61,0.62,0.74,0.80,0.81,0.85,0.90,0.93,1.02,
1.09,1.17,1.18,1.40,1.53,1.54,1.81,2.02,2.10)
summary(dados)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0200 0.1950 0.5350 0.6939 1.0375 2.1000
var(dados)
## [1] 0.3525559
sd(dados)
## [1] 0.5937642
out <- z.test(x=dados,mu=1,stdev=sd(dados),alt="two.sided",n=length(dados),conf.level=0.95)
out
##
## One Sample z-test
##
## data: dados
## z = -3.0933, n = 36.000000, Std. Dev. = 0.593764, Std. Dev. of the
## sample mean = 0.098961, p-value = 0.00198
## alternative hypothesis: true mean is not equal to 1
## 95 percent confidence interval:
## 0.4999295 0.8878483
## sample estimates:
## mean of dados
## 0.6938889
names(out)
## [1] "statistic" "parameter" "p.value" "conf.int" "estimate"
## [6] "null.value" "alternative" "method" "data.name"
out$p.value
## [1] 0.001979709
as.vector(out$conf.int)
## [1] 0.4999295 0.8878483
Rejeitamos a hipótese nula \(H_{0}\)
(veja que o p-valor é pequeno, \(0.00198\)). Portanto, existem evidências
experimentais que o tempo médio entre duas emissões sucessivas de
partículas é diferente de 1. O intervalo de 95% confiança proporcionado
pela função z.test() não contém a hipótese \(H_{0}\) e é dado por \(\mbox{IC}(\mu;0.95)\approx(0.4999295,0.8878483)\).
hist(dados,freq=FALSE,xlab="Tempos",ylab="Densidade",main="")
curve(dexp(x,rate=1/mean(dados)),0,3,col="blue",add=TRUE)
abline(v=mean(dados),col="red")
Problema. Um motor de foguete é fabricado ligando-se dois tipos de propelentes, um iniciador e um mantenedor, que estão juntos dentro de um cilíndro metálico. A tensão cisalhante da ligação entre os dois tipos de propelentes é um atributo importante. Os resultados de testes envolvendo 20 motores aleatoriamente selecionados estão mostrados no seguinte script. Teste a hipótese de que a mediana da tensão cisalhante é 2000 psi (se desejar, utilize um nível de significância \(\alpha=5\%\)).
dados <- c(2158.70,1678.15,2316.00,2061.30,2207.50,
1708.30,1784.70,2575.10,2357.90,2256.70,
2165.20,2399.55,1779.80,2336.75,1765.30,
2053.50,2414.40,2200.50,2654.20,1753.70)
m0 <- 2000
d <- dados-m0
df <- subset(data.frame(Dados=dados,d=d),subset=(d!=0))
sinal <- NULL;n <- nrow(df)[1]
for(i in 1:n){if(df$d[i]>0){sinal[i] <- 1}else{sinal[i] <- -1}}
df$Sinal <- sinal
df
## Dados d Sinal
## 1 2158.70 158.70 1
## 2 1678.15 -321.85 -1
## 3 2316.00 316.00 1
## 4 2061.30 61.30 1
## 5 2207.50 207.50 1
## 6 1708.30 -291.70 -1
## 7 1784.70 -215.30 -1
## 8 2575.10 575.10 1
## 9 2357.90 357.90 1
## 10 2256.70 256.70 1
## 11 2165.20 165.20 1
## 12 2399.55 399.55 1
## 13 1779.80 -220.20 -1
## 14 2336.75 336.75 1
## 15 1765.30 -234.70 -1
## 16 2053.50 53.50 1
## 17 2414.40 414.40 1
## 18 2200.50 200.50 1
## 19 2654.20 654.20 1
## 20 1753.70 -246.30 -1
rp <- sum(subset(df,subset=Sinal>0,select=Sinal))
rn <- sum(subset(df,subset=Sinal<0,select=Sinal))
c(rp,rn)
## [1] 14 -6
z <- (rp-(n/2))/sqrt(n/4);z
## [1] 1.788854
Para realizar o teste do sinal, basta usar a função
binom.test().
rp
## [1] 14
n
## [1] 20
out <- binom.test(x=rp,n=n,p=0.5,alternative="two.sided",conf.level=0.95)
out
##
## Exact binomial test
##
## data: rp and n
## number of successes = 14, number of trials = 20, p-value = 0.1153
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.4572108 0.8810684
## sample estimates:
## probability of success
## 0.7
Não rejeitamos a hipótese nula \(H_{0}\) (veja o p-valor igual a \(0.1153\)). Portanto, não existem evidências experimentais que a mediana da tensão cisalhante é diferente de 2000 psi.
Problema. Considere o mesmo problema da seção anterior.
dados <- c(2158.70,1678.15,2316.00,2061.30,2207.50,
1708.30,1784.70,2575.10,2357.90,2256.70,
2165.20,2399.55,1779.80,2336.75,1765.30,
2053.50,2414.40,2200.50,2654.20,1753.70)
m0 <- 2000
d <- dados-m0
D <- abs(d)
df <- subset(data.frame(Dados=dados,d=d,D=D),subset=(d!=0))
R <- rank(df$D,ties.method="average")
sinal <- NULL;n <- nrow(df)[1]
for(i in 1:n){if(df$d[i]>0){sinal[i] <- 1}else{sinal[i] <- -1}}
df$Sinal <- sinal
df$R <- R
df$PostoSinalizado <- sinal*R
df
## Dados d D Sinal R PostoSinalizado
## 1 2158.70 158.70 158.70 1 3 3
## 2 1678.15 -321.85 321.85 -1 14 -14
## 3 2316.00 316.00 316.00 1 13 13
## 4 2061.30 61.30 61.30 1 2 2
## 5 2207.50 207.50 207.50 1 6 6
## 6 1708.30 -291.70 291.70 -1 12 -12
## 7 1784.70 -215.30 215.30 -1 7 -7
## 8 2575.10 575.10 575.10 1 19 19
## 9 2357.90 357.90 357.90 1 16 16
## 10 2256.70 256.70 256.70 1 11 11
## 11 2165.20 165.20 165.20 1 4 4
## 12 2399.55 399.55 399.55 1 17 17
## 13 1779.80 -220.20 220.20 -1 8 -8
## 14 2336.75 336.75 336.75 1 15 15
## 15 1765.30 -234.70 234.70 -1 9 -9
## 16 2053.50 53.50 53.50 1 1 1
## 17 2414.40 414.40 414.40 1 18 18
## 18 2200.50 200.50 200.50 1 5 5
## 19 2654.20 654.20 654.20 1 20 20
## 20 1753.70 -246.30 246.30 -1 10 -10
wp <- sum(subset(df,subset=PostoSinalizado>0,select=PostoSinalizado))
wn <- abs(sum(subset(df,subset=PostoSinalizado<0,select=PostoSinalizado)))
c(wp,wn)
## [1] 150 60
z <- (wp-(n*(n+1)/4))/sqrt(n*(n+1)*(2*n+1)/24);z
## [1] 1.67997
Para realizar o teste dos postos sinalizados de Wilcoxon, basta usar a
função wilcox.test().
wilcox.test(dados,alternative="two.sided",mu=2000,exact=TRUE,conf.int=TRUE,conf.level=0.95)
##
## Wilcoxon signed rank exact test
##
## data: dados
## V = 150, p-value = 0.09731
## alternative hypothesis: true location is not equal to 2000
## 95 percent confidence interval:
## 1982.50 2286.35
## sample estimates:
## (pseudo)median
## 2138.05
wilcox.test(dados,alternative="two.sided",mu=2000,exact=FALSE,correct=FALSE,conf.int=TRUE,conf.level=0.95)
##
## Wilcoxon signed rank test
##
## data: dados
## V = 150, p-value = 0.09296
## alternative hypothesis: true location is not equal to 2000
## 95 percent confidence interval:
## 1982.50 2286.35
## sample estimates:
## (pseudo)median
## 2138.277
wilcox.test(dados,alternative="two.sided",mu=2000,exact=FALSE,correct=TRUE,conf.int=TRUE,conf.level=0.95)
##
## Wilcoxon signed rank test with continuity correction
##
## data: dados
## V = 150, p-value = 0.09665
## alternative hypothesis: true location is not equal to 2000
## 95 percent confidence interval:
## 1982.50 2286.35
## sample estimates:
## (pseudo)median
## 2138.277
Os resultados do teste dos postos sinalizados de Wilcoxon estão em concordância com os resultados do teste do sinal.