Antes de eu entrar no assunto machine learning, porque é um buraco sem fundo devo me demorar quando entrar, quero cobrir um pouco mais do básico em inferência.
Nesse post eu disse que para realizar o teste t em duas amostras independentes deveríamos saber antes se as variâncias dessas amostras são iguais ou diferentes. Vamos ver como atestar isso agora. A base utilizada será a german credit data.
# importando dados# obs.: o -1 é para remover a primeira coluna, que é apenas o índicedata = readr::read_csv("german_credit_data.csv")[-1]
New names:
Rows: 1000 Columns: 10
── Column specification
──────────────────────────────────────────────────────── Delimiter: "," chr
(5): Sex, Housing, Saving accounts, Checking account, Purpose dbl (5): ...1,
Age, Job, Credit amount, Duration
ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
Specify the column types or set `show_col_types = FALSE` to quiet this message.
• `` -> `...1`
# visualizandoprint(data)
# A tibble: 1,000 × 9
Age Sex Job Housing `Saving accounts` `Checking account`
<dbl> <chr> <dbl> <chr> <chr> <chr>
1 67 male 2 own <NA> little
2 22 female 2 own little moderate
3 49 male 1 own little <NA>
4 45 male 2 free little little
5 53 male 2 free little little
6 35 male 1 free <NA> <NA>
7 53 male 2 own quite rich <NA>
8 35 male 3 rent little moderate
9 61 male 1 own rich <NA>
10 28 male 3 own little moderate
# ℹ 990 more rows
# ℹ 3 more variables: `Credit amount` <dbl>, Duration <dbl>, Purpose <chr>
Da mesma forma que o teste t, podemos testar se a medida de uma amostra é significativamente diferente de um valor escolhido ou podemos testar em relação à outra amostra — se maior, menor ou diferente. Para este exercício, vamos testar se a variância da variável Credit amount (limite de crédito) é o mesmo para homens e mulheres que vivem de aluguel. Primeiro, vamos calcular os desvios-padrão populacionais:
Verificamos que o limite de crédito dos homens tem um desvio-padrão de DM$ 2.846, enquanto o das mulheres é de DM$ 22351, o que quer dizer que o limite de crédito dos homens varia mais em torno da média do que das mulheres. O que gostaríamos de saber agora é se essa diferença é significativamente diferente. Vamos ao teste!
1 O TESTE
O teste F, dentre suas várias outras aplicações, é usado em conjunto com o teste t de duas amostras — quando é preciso conhecer se as duas populações amostradas têm a mesma variância ou não.
Ele também é um teste paramétrico, o que significa que ele supõe que as populações têm aproximadamente uma certa de distribuição, neste caso a normal. Portanto, temos de primeiramente garantir que essa hipótese seja atendida.
1.1 VERIFICANDO A HIPÓTESE DE NORMALIDADE
Primeiramente, vamos plotar as densidades para verificar se sua distribuição é plausível com a hipótese de normalidade:
# dados de densidaded1 =density(homens)d2 =density(mulheres)# separando o grid em 2 colunaspar(mfrow =c(1,2))# visualizaçãoplot(d1,main ="Density Plot: homens")polygon(d1, col ="lightblue")plot(d2,main ="Density Plot: mulheres")polygon(d2, col ="salmon")
Com esse formato, a normalidade é bastante implausível e não há necessidade de realizar quaisquer testes. Para contornar esse problema, podemos tentar realizar uma transformação logarítmica:
# transformação logarítimicalog_homens =log(homens)log_mulheres =log(mulheres)# calculando a variância após transformaçãovar(log_homens)
[1] 0.5614271
var(log_mulheres)
[1] 0.5229548
# dados de densidaded3 =density(log_homens)d4 =density(log_mulheres)# separando o grid em 2 colunaspar(mfrow =c(1,2))# visualizaçãoplot(d3,main ="Density Plot: log(homens)")polygon(d3, col ="lightblue")plot(d4,main ="Density Plot: log(mulheres)")polygon(d4, col ="salmon")
Os dados agora parecem seguir uma distribuição próxima da normal. Para verificar, pode-se realizar um teste de normalidade mas, como não é esse o tema, exploraremos o assunto em outra postagem. Por hora, vamos apenas registrar que a transformação foi exitosa e os dados agora apresentam uma distribuição próxima da normal.
# teste de normalidadeshapiro.test(log_homens)
Shapiro-Wilk normality test
data: log_homens
W = 0.98624, p-value = 0.5147
shapiro.test(log_mulheres)
Shapiro-Wilk normality test
data: log_mulheres
W = 0.98171, p-value = 0.2071
A hipótese nula é de que não se pode inferir, com certo nível de significância, que as variâncias são diferentes. E a hipótese alternativa é de que elas são significamente distintas.
1.3 NÍVEL DE SIGNIFICÂNCIA
\[ \alpha = 0.05 \]
Vamos utilizar um nível de significância padrão de 5%, o que quer dizer que a probabilidade de rejeitarmos a hipótese nula quando ela não deve ser rejeitada é de apenas 5%. Quanto menor for essa probabilidade, maior deve ser a diferença entre as variâncias para que possamos atestar a diferença significativa entre elas.
1.4 ESTATÍSTICA DO TESTE
\[ F = \frac{s^2_1}{s^2_2} \]
Como a estatística do teste é a razão entre as variâncias amostrais, o teste é para verificar se essa razão é diferente da unidade. Para verificarmos a estatística tabelada, precisamos de saber quantos graus de liberdade temos nas amostras:
# graus de liberdade (n-1)table(data[data$Housing =="rent",]$Sex)
female male
95 84
E então a estatística tabelada será:
# F-statistic para 95º percentilqf(.95, 83, 94)
[1] 1.419123
1.5 VALOR CRÍTICO
# calculando valor críticovar(log_homens) /var(log_mulheres)
[1] 1.073567
\[ F = \frac{s^2_1}{s^2_2} = 1.07 \]
1.6 DECISÃO
Como o valor de 1.07 não excede 1.42, não podemos rejeitar a hipótese nula ao nível de 5% de significância. As variâncias não são significativamente distintas.
2 O TESTE F NO R
No base R, a sintaxe do teste é muito semelhante a do teste t:
F test to compare two variances
data: log_homens and log_mulheres
F = 1.0736, num df = 83, denom df = 94, p-value = 0.7362
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.707196 1.638814
sample estimates:
ratio of variances
1.073567
O sumário do teste nos diz que para que pudéssemos rejeitar a hipótese nula com \(\alpha\) = 5%, a razão deveria ser na ordem de 1.64 (variância de log_homens maior do que log_mulheres) ou 0.70 (variância de log_homens menor do que log_mulheres). Alternativamente, poderíamos rejeitar a hipótese nula se aumentássemos \(\alpha\) para 1-0.7362 = 26.38%, o que é uma probabilidade de incorrer no erro tipo II muito alta para ser considerada razoável.