GET00130 - Métodos Computacionais para Estatística II
Conteúdo da aula
- Teste de hipóteses comparando as variâncias de duas populações.
- Teste de hipóteses comparando as médias de duas populações independentes.
- Teste de hipóteses comparando as médias de duas populações dependentes.
1 - Verificando igualdade das variâncias de duas populações normais.
Vamos discutir o problema de se comparar duas variâncias de populações normais. O intuito de fazermos esta comparação, reflete diretamente na estatística de teste que será usada no teste de comparação de médias.
O dono de uma fábrica, possui duas máquinas empacotando um determinado produto \(K\). O dono da fábrica coletou a informação do peso de 25 pacotes produzidos pela máquina A e 20 pacotes produzidos pela máquina B. O produtor quer saber se as máquinas estão produzindo da mesma forma, ou seja, se as médias dos pesos dos pacotes produzidos pelas máquinas são iguais. Só que para respondermos esta pergunta, precismos inicialmente compararmos a se a variância do peso dos pacotes produzidos pelas máquinas são diferentes.
Suponha que queremos verificar se as variâncias dos pesos dos pacotes nas duas populações (máquina A e máquina B) são diferentes Deste modo, estamos interessado em verificar
\[H_0: \frac{\sigma^2_A}{\sigma^2_B} = 1 \qquad \times \qquad H_1: \frac{\sigma^2_A}{\sigma^2_B} \neq 1.\]
O teste acima possui um pré-requisito. O teste assume que as variâncias que serão comparadas são parâmetros de variáveis aleatórias com distribuição normal independentes. A independência é fácil de ser assumida, uma vez que as máquinas produzem pacotes de café separadamente. Com relação a normalidade, devemos verificar se a variável peso do pacote produzido pela Máquina A possui distribuição normal e também devemos verificar se a variável peso do pacote produzido pela máquina B possui distribuição normal.
#Carregando pacote
library(tidyverse)
#Importando os dados
base = read_table2("Maquinas.txt")
#Carregando pacote
library(ggpubr)
#Criando um tibble somente com as informações da máquina A
pesoA = base %>%
filter(Maquina == "A")
#Criando um tibble somente com as informações da máquina B
pesoB = base %>%
filter(Maquina == "B")
#Criando um qq-plot com o ggpubr para a população 1
qq1 = ggqqplot(pesoA$Peso)
#Criando um qq-plot com o ggpubr para a população 2
qq2 = ggqqplot(pesoB$Peso)
#Carregando pacote
library(gridExtra)
#Plotando os qqplots
grid.arrange(qq1, qq2, ncol = 2)#Teste de normalidade para a população 1
shapiro.test(x = pesoA$Peso)
Shapiro-Wilk normality test
data: pesoA$Peso
W = 0.97366, p-value = 0.7383
#Teste de normalidade para a população 2
shapiro.test(x = pesoB$Peso)
Shapiro-Wilk normality test
data: pesoB$Peso
W = 0.95447, p-value = 0.4401
Para verificar, inicialmente plotamos um qq-plot do peso do pacote em cada máquina, com suas respectivas bandas de confiança. Se analisarmos os dois gráficos, eles parecem indicar que a suposição de normalidade da variável peso do pacote em ambas as populações é razoável. Para confirmar esta hipótese, realizamos o teste de Shapiro-Wilk em cada população e com base em um nível de significância (\(\alpha\)) de 5%, como o p-valor = 0.7383 (Máquina A) e o p-valor = 0.4401 (Máquina B) é maior do que \(\alpha\), não rejeitamos \(H_0\), ou seja, não existe evidências para desconfiarmos que a amostra não seja proveniente de uma distribuição normal.
Deste modo, podemos partir para o testar a afirmação sobre igualdade das variâncias.
Para executarmos o teste de comparação de variâncias, usaremos a função VarTest do pacote DescTools.
A seguir, vamos apresentar os principais argumentos da função VarTest:
- x - o vetor com a amostra da população 1;
- y - o vetor com a amostra da população 1;
- sigma.squared - o valor do parâmetro que definem as hipóteses (default = 1);
- alternative - argumento que define se o teste é bilateral ou unilateral a esquerda e a direita (default = bilateral - two.sided).
#Carregando o pacote
library(DescTools)
#Avaliando as variâncias nas duas populações
var(pesoA$Peso)[1] 9.647933
var(pesoB$Peso)[1] 12.74568
#Realizando o teste de comparação das variâncias
VarTest(x = pesoA$Peso,
y = pesoB$Peso,
alternative = "two.sided",
ratio = 1,
conf.level = 0.95)
F test to compare two variances
data: x and y
F = 0.75696, num df = 24, denom df = 19, p-value = 0.5137
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.3086696 1.7751803
sample estimates:
ratio of variances
0.7569569
A saída do teste contém várias informações: o valor da estatística do teste F, o número de graus de liberdade do numerador e do denominador da estatística de teste num df e denom df e o p-valor associado as hipóteses especificadas. Ele deixa explícito qual a hipótese alternativa “true ratio of variances is not equal to 1” que significa “a razão das variâncias é diferente de 1” o que equivale a dizer que as variâncias são diferentes. Fornece também uma estimativa pontual e intervalar para a razão das variâncias.
Note que, a estimativa da razão das variâncias parece inferior a 1 (0,75), indicando que os pesos dos pacotes produzidos pela Máquina B possuem uma variância maior do que aquelas produzidos pela máquina A. Porém, com base em um nível de significância de 5%, não rejeitamos \(H_0\) (p-valor = 0.5137 > 0,05 = \(\alpha\)), ou seja, não encontramos evidências nos dados para acreditar que a variância dos pesos dos pacotes das duas máquinas são diferentes.
2 - Teste de hipóteses para comparação de médias de duas populações normais independentes
A etapa anterior de avaliar se as variâncias são iguais ou não, trata-se de uma etapa intermediária do teste de comparação das médias de duas populações.
Voltemos ao problema do dono da fábrica que está avaliando se duas máquinas estão produzindo da mesma forma. O dono da fábrica deseja saber se os pesos médios dos pacotes produzidos pelas máquinas são iguais. Com base nos dados, qual a sua conclusão?
Para responder o questionamento feito, precisamos discutir o problema de se comparar duas médias de populações normais independentes. Traduzindo em hipóteses, podemos escrever
Hipótese: \[H_0: \mu_A = \mu_B \qquad \times \qquad H_1: \mu_A \neq \mu_B,\] ou equivalentemente, \[H_0: \mu_A - \mu_B = 0 \qquad \times \qquad H_1: \mu_A - \mu_B \neq 0.\]
Para testar as hipóteses acima, precisamos nos lembrar que estamos comparando médias de duas populações normais. Entretanto, já verificamos que a suposição de normalidade dos dados é satisfeita por meio do teste de Shapiro_Wilk.
Para executarmos o teste de comparações de médias de duas populações, usaremos a função t.test.
A seguir, vamos apresentar os principais argumentos da função t.test:
- x - o vetor com a amostra da população 1;
- y - o vetor com a amostra da população 2;
- mu - o valor do parâmetro que definem as hipóteses (default = 0);
- alternative - argumento que define se o teste é bilateral ou unilateral a esquerda e a direita (default = bilateral - two.sided);
- var.equal - argumento lógico que indica se as variâncias são iguais ou diferentes (default = FALSE);
- paired - argumento lógico que indica se o teste é para médida de populações dependentes (default = FALSE).
#Obtendo algumas medidas descritivas
resultados = base %>%
group_by(Maquina) %>%
summarise(N = n(),
media = mean(Peso),
desvio.padrao = sd(Peso),
erro.padrao = desvio.padrao/sqrt(N),
int.conf = qt(0.975, N))
resultados# A tibble: 2 × 6
Maquina N media desvio.padrao erro.padrao int.conf
<chr> <int> <dbl> <dbl> <dbl> <dbl>
1 A 25 99.6 3.11 0.621 2.06
2 B 20 141. 3.57 0.798 2.09
#Visualizando graficamente o comportamento dos pesos nas duas máquinas
library(ggplot2)
#Plotando o boxplot
ggplot(data = base, aes(y = Peso, x = Maquina)) +
geom_boxplot() +
theme_minimal()#Plotando o gráfico de médias e intervalo de confiança
ggplot(resultados, aes(x=Maquina, y = media)) +
#Desenha as médias
geom_point() +
#Desenha as barras do Intervalo de Confiança
geom_errorbar(data = resultados,
aes(ymin = media-int.conf,
ymax = media+int.conf), width=.1) +
theme_minimal()#Realizando o teste de médias
t.test(x = pesoA$Peso,
y = pesoB$Peso,
alternative = "two.sided",
mu = 0,
var.equal = TRUE,
conf.level = 0.95)
Two Sample t-test
data: pesoA$Peso and pesoB$Peso
t = -41.465, df = 43, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-43.29611 -39.27989
sample estimates:
mean of x mean of y
99.572 140.860
A saída do teste contém várias informações: o valor da estatística do teste \(t\), o número de graus de liberdade da estatística de teste \(df\) e o p-valor associado as hipóteses especificadas. Ele deixa explícito qual a hipótese alternativa “true difference in means is not equal to 0” que significa “a verdadeira diferença entre as médias não é 0”. Fornece também um intervalo de confiança e o valor de uma estimativa pontual para cada média.
Note que, graficamente os comportamentos dos boxplots parecem indicar que os pesos possuem comportamentos distintos. O que é ratificado pelas estimativas pontuais obtidas do peso de cada máquina. Para verificarmos a afirmação feita, precisamos realizar o teste de hipóteses. Com base em um nível de significância de 5%, rejeitamos \(H_0\) (p-valor < 0,0001 < 0,05 = \(\alpha\) ), encontramos evidências para acreditar que os pesos médios dos pacotes são diferentes nas duas máquinas.
3 - Teste de hipóteses para comparação de médias de duas populações normais dependentes
Um médico está verificando a eficácia de uma medicação para diabetis. Ele mediu a glicemia de pacientes com diabetis antes do início do tratamento e após o tratamento com a medicação. Para que o medicamento seja eficiente, o médico espera que a glicemia dos pacientes tenha diminuído. Você diria que o medicamento é eficiente?
Para responder o questionamento feito, precisamos discutir o problema de se comparar duas médias de populações normais dependentes. Traduzindo em hipóteses, podemos escrever
Hipótese: \[H_0: \mu_1 = \mu_2 \qquad \times \qquad H_1: \mu_1 > \mu_2,\] ou equivalentemente, \[H_0: \mu_1 - \mu_2 = 0 \qquad \times \qquad H_1: \mu_1 - \mu_2 > 0.\]
Para testar as hipóteses acima, precisamos nos lembrar que estamos comparando médias de duas populações normais e precisamos checar normalidade dos dados em cada população.
#Importando os dados
glicemia = read_csv2("Glicemia.csv")
#Criando um qq-plot com o ggpubr para a população 1
qq1 = ggqqplot(glicemia$Glicemia1)
#Criando um qq-plot com o ggpubr para a população 2
qq2 = ggqqplot(glicemia$Glicemia2)
#Plotando os qqplots
grid.arrange(qq1, qq2, ncol = 2)#Teste de normalidade para a população 1
shapiro.test(x = glicemia$Glicemia1)
Shapiro-Wilk normality test
data: glicemia$Glicemia1
W = 0.97001, p-value = 0.5395
#Teste de normalidade para a população 2
shapiro.test(x = glicemia$Glicemia2)
Shapiro-Wilk normality test
data: glicemia$Glicemia2
W = 0.98095, p-value = 0.8503
Analisando os qq-plots e os testes de normalidade, é razoável assumirmos normalidade das glicemias nos dois períodos.
#Criando um objeto com os dados empilhados
base.mod = glicemia %>%
gather(key = Tratamento,
value = Glicemia, Glicemia1, Glicemia2)
#Visualizando o novo objeto
base.mod# A tibble: 60 × 2
Tratamento Glicemia
<chr> <dbl>
1 Glicemia1 184.
2 Glicemia1 193.
3 Glicemia1 202
4 Glicemia1 188.
5 Glicemia1 204.
6 Glicemia1 198.
7 Glicemia1 187.
8 Glicemia1 197.
9 Glicemia1 189.
10 Glicemia1 210.
# … with 50 more rows
#Obtendo medidas descritivas
resultados3 = base.mod %>%
group_by(Tratamento) %>%
summarise(media = mean(Glicemia),
desvio.padrao = sd(Glicemia),
N = n())
resultados3# A tibble: 2 × 4
Tratamento media desvio.padrao N
<chr> <dbl> <dbl> <int>
1 Glicemia1 199. 10.5 30
2 Glicemia2 111. 17.9 30
#Plotando o boxplot
ggplot(base.mod, aes(y = Glicemia, x = Tratamento)) +
geom_boxplot()#Realizando o teste de comparação de médias de populações dependentes
t.test(x = glicemia$Glicemia1,
y = glicemia$Glicemia2,
alternative = "greater",
mu = 0,
paired = TRUE,
conf.level = 0.95)
Paired t-test
data: glicemia$Glicemia1 and glicemia$Glicemia2
t = 21.243, df = 29, p-value < 2.2e-16
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
80.91215 Inf
sample estimates:
mean of the differences
87.94667
A saída do teste informa que é um teste pareado, o mesmo é realizado sempre que informamos o argumento paired como TRUE.
Com base em um nível de significância de 5%, rejeitamos \(H_0\), indicando que possuímos evidências suficiente para acreditar que a média da glicemia após o tratamento é inferiror à média da glicemia antes do tratamento.
Realizar um teste de comparações de médias de duas populações dependentes é equivalente a realizar o teste de média de uma população para a diferença das variáveis. Veja os resultados abaixo e compare com os obtidos no passo anterior.
#Criando a variável diferença das glicemias
dif = glicemia$Glicemia1 - glicemia$Glicemia2
#Realizando o teste de média de uma população
t.test(x = dif,
alternative = "greater",
mu = 0,
conf.level = 0.95)
One Sample t-test
data: dif
t = 21.243, df = 29, p-value < 2.2e-16
alternative hypothesis: true mean is greater than 0
95 percent confidence interval:
80.91215 Inf
sample estimates:
mean of x
87.94667