Teste de Hipóteses: Definições

O objetivo de um teste de hipótese é testar a veracidade de uma hipótese, a hipótese nula, contra uma outra hipótese, chamada de alternativa. Em geral, assume-se que as duas hipóteses são complementares.

Matematicamente, temos um problema estatístico que envolve um parâmetro desconhecido. Suponha que particionemos e estamos interessados se está em ou está em . Dividimos essa parte nos seguintes itens:

  1. Hipótese Nula e Alternativa
  2. Região Crítica
  3. Estatística de Teste
  4. Função de Poder
  5. Tipos de Erro
  6. Nível e tamanho do teste
  7. P-valor

Hipótese Nula e Alternativa

Dizemos que é a hipótese de que e chamamos de hipótese nula, enquanto é a hipótese alternativa e representa . Queremos decidir qual das hipóteses é verdadeira (e só uma será, porque a partição é disjunta). Se decidimos que , rejeitamos , e se , não rejeitamos .

Hipótese Simples e Composta

Suponha que formam uma amostra aleatória com pdf . Queremos testar a hipótese de que

Se contem apenas um valor, então é dita hipótese simples. Se contém mais de um valor, dizemos que é composta.

Hipótese Unilateral e Bilateral

Seja um parâmetro unidimensional. Dizemos que a hipótese é unilateral (ou one tailed) quando é da forma ou . Ela será bilateral quando é do tipo .

Região Crítica

Suponha que queremos testar a hipótese de que

Quando queremos decidir qual hipótese escolher, observamos uma amostra dessa distribuição no espaço de amostras . O dever do estatístico é especificar um procedimento que particione o conjunto em dois subconjuntos e , onde contém os valores de que rejeitam .

Região crítica é o conjunto , isto é, o conjunto de amostras que, a partir de um procedimento, rejeita .

cr

Esse tipo de teste também é chamado de não randomizado, visto que após a observação das amostras, ele está defoinido.

Estatística de Teste

Seja . Sejam uma estatística e um subconjunto da reta. Suponha que nosso procedimento de teste é o seguinte:

Rejeitamos se .

Chamamos de estatística de teste e de região de rejeição. Dessa forma a região crítica será: .

Na prática a maioria dos testes é do tipo

Rejeitamos se .

Observação: É importante lembrar que há duas diferentes divisões: , que é a divisão do espaço dos parâmetros, e é a divisão do espaço das amostras. Mas qual a relação entre eles? Se , então rejeitamos a hipótese . Além do mais, podemos encontrar e , mas dificilmente saberemos em qual dos conjuntos pertence com certeza.

Função de Poder e Tipos de Erro

A função poder é uma forma de mensurar a performance de um teste com fixo.

Função Poder

Seja um procedimento de teste (como esse assinalado acima). Se é a região crítica,

em que a última igualdade ocorre quando o proocedimento de teste é o citado acima.

O seu significado?

É a probabilidade, para cada valor de , de que rejeita . Queremos, intuitivamente que:

Entretanto isso não é em geral o que acontece. Por isso definimos:

Erros I e II

rejeita Erro Tipo I Certo
não rejeita Certo Erro Tipo II

Portanto se é a probabilidade de cometermos o erro do tipo I. Se é a probabilidade de cometer o erro do tipo II.

Nível/Tamanho

Um teste que satisfaz é chamado de teste nível , ou que o teste tem nível de significância .
O tamanho ou nível de significância de um teste é Um teste terá nível se, e só se, seu tamanho for no máximo . Com isso, é a pior chance de rejeitarmos de forma errônea.

Randomização

Por razões técnicas, as vezes é desejável haver uma randomização externa para se tomar uma decisão de rejeitar ou não uma hipótese. Isso é feito da seguinte maneira. Seja uma função de teste ou crítica tal que seja a chance de rejeitarmos .
Assim,

A maior vantagem de usar randomização é que a combinação convexa de funções críticas é uma função crítica.

P-valor

É o menor nível tal que rejeitaríamos a hipótese nula a nível com os dados observados.

Se rejeitamos a hipótese nula se, e somente se, o p-valor é no máximo , estamos usando um teste com nível de significância .

Compreensão e Implementação

Teste de hipótese é um método para que façamos decisões estatísticas a partir dos dados. É uma forma de compreender (fazer inferância sobre) um parâmetro.

Exemplo: Belgas tem, em média, maior altura do que peruanos.

Exemplo 2: Temperatura não é um fator relevante para o processo de cultivo de uva.

Estamos avaliando afirmações mutualmente exclusivas, ou os belgas tem maior altura do que os peruanos, ou não tem! Queremos saber qual dessas afirmações é suportada pelos dados que obtivermos.

A hipótese nula é a afirmação a ser testada e muitas vezes estabelece uma conjectura de que as características observadas em uma população são por um acaso, isto é, o fator a ser estudado "não existe". Por exemplo: o número de voos entre Rio de Janeiro e São Paulo não tem correlação com o nível do mar no Japão.

Em geral queremos anulá-la, rejeitá-la (daí o nome).

Exemplo

Vamos considerar um exemplo simples utilizando a distribuição normal. É a distribuição com cálculos simples e uma boa visualização. A ideia nesse exemplo vai ser a seguinte:

O preço do quilo ouro varia diariamente e essa variação em unidade de dólares será nosso objeto de interesse. Por exemplo: Se no dia 1 o preço mil e no dia 2 o preço era 1 050 e no dia 3 o preço é 1 025 temos que e . Vamos supor que as variações entre dois diferentes pares de dias são independentes (essa já uma simplificação da realidade!)

Primeiro vamos importar os dados.

```python import pandas as pd import numpy as np

import matplotlib.pyplot as plt import matplotlib.patches as mpatches import seaborn as sns sns.set() ```

```python gold_df = pd.read_csv('../data/gold.csv', low_memory = False, header=[2,3,4])

There has a lot of data. I will get average diary from USD price

gold_df = gold_df[[('Priced In', 'Price Type', 'Summary'), ('USD', 'Ask', 'Average')]] gold_df.columns = ['Day', 'Price'] gold_df.head() ```

Day Price
0 1/01/68 NaN
1 2/01/68 NaN
2 3/01/68 NaN
3 4/01/68 NaN
4 5/01/68 NaN

Observe que existem diversos Nan values. Na prática eu teria que fazer alguma espécie de limpeza rigorosa. Nesse caso, para tornar tudo bem simples, vou apenas limpar. Também precisamos garantir que as informações estejam em formato float.

```python

Inplace assegura que eu não crie outro DataFrame

gold_df.dropna(inplace = True) gold_df.Price = gold_df.Price.apply(lambda x: float(x.strip().replace(',', ''))) ```

python plt.plot(gold_df['Price']) plt.title('Preço do Ouro em Dólares') plt.show()

png

python variation = gold_df.Price.diff() sns.violinplot(x = variation) plt.xlim((-50,50)) plt.title('Distribuição da variação diária') plt.show()

png

De fato não parece uma normal (na verdade uma distribuição de cauda mais pesada talvez fosse interessante. Mas tudo bem!), mas vamos modelar dessa forma. A partir de agora vamos nos preocupar mais com as definições para dar a devida interpretação. O exemplo é só motivador.

Qual hipótese queremos testar? O que queremos saber sobre a variação?

A pergunta que nasce é o seguinte: será que a média dessa distribuição é 0? Isto é, será que se calcularmos as médias das variações, teremos que com infinitas observações, o resultado seria 0? Isso é importante porque vai nos ajudar a identificar se existe uma tendência de crescimento nas variações diárias.

Hipótese Nula: , onde .

Hipótese Alternativa: .

Vamos supor que é conhecido e que , mas a média é desconhecida.

  1. Quem é e ?

é a região dos parâmetros onde a hipótese nula é verdadeira, isto é , é um conjunto unitário. Por outro lado , por que a média pode assumir, em teoria, qualquer valor real.

  1. Qual é a região crítica?

Bom, ainda não podemos determinar essa resposta, afinal para determinar a região crítica (subconjunto do espaço dos estados em que se rejeita a hipótese nula), precisamos de um procedimento de teste. Mas vamos imaginar que o espaço de estados é , pois vamos considerar apenas duas amostras, inicialmente (queremos visualizar S).

  1. Qual será nosso procedimento de teste?

Procedimento de teste é uma maneira de tomarmos uma decisão. Ele tem a forma: rejeitamos se isso acontecer.

Um exemplo bobo seria: Rejeitamos a hipótese nula se

O problema é que em geral esse tipo de procedimento não é interessante. Para isso estabelecemos uma estatística de teste e uma Região de Rejeição , tal que nosso procedimento seja:

Rejeitamos se .

Nesse caso vamos considerar e vamos rejeitar a hipótese se estiver muito longe de , isto é, se . Portanto definimor nossa Região de Rejeição como , o que reduz nosso problema a determinar .

Qual seria razoável? 4, 5, 1? Essa pergunta não vai ser respondida. Antes vamos visualizar como fica a região crítica (2). Rejeitamos a hipótese se

Assim:

```python C = [1, 10, 30] decision = lambda x1, x2, c: 1np.logical_or(x1 + x2 >= 2c, x1 + x2 <= -2*c) x1,x2 = np.meshgrid(np.arange(-50,50,0.5),np.arange(-50,50,0.5))

fig, ax = plt.subplots(1,3, figsize = (21, 7)) for i, c in enumerate(C): ax[i].contourf(x1,x2,decision(x1,x2, c), levels = [0, 0.5, 1], colors = ['#fdcdac', '#cbd5e8']) ax[i].set_xlabel(r'', fontsize = 20) ax[i].set_ylabel(r'', fontsize = 20) ax[i].set_title('Região Crítica quando c = {}'.format(c), fontsize = 20) ax[i].legend(handles = [mpatches.Patch(color='#fdcdac', label=r''), mpatches.Patch(color='#cbd5e8', label=r'')])

sample = gold_df.Price.diff().sample(n = 2)
X1, X2 = sample.iloc[0], sample.iloc[1]
ax[i].scatter(X1, X2, color = 'black')
ax[i].text(X1 + 1, X2 + 1, s = r'$(X_1, X_2)$', fontsize = 15)

```

png

  1. Como a função poder entra nessa história?

A função poder é uma função do parâmetro, no caso , e retorna a probabilidade de rejeitarmos a hipótese, considerando esse parâmetro. Isto é,

O que poderíamos fazer, então, é obter a distribuição conjunta de e integrar na região .

Vamos considerar dois casos separados:

A função poder se trata mais do teste que estamos usando do que os dados em si. Por isso, podemos comparar testes usando essa função poder. Então vamos ver nesse caso quem é a função poder! Vou calcular usando um método numérico para que peguem a ideia. Agora é possível fazer as contas, mas nem sempre é trivial. Assim teremos apenas aproximação da função poder.

```python C = [1, 10, 30] mu_v = np.arange(-100, 100, 1) n = 10000 power = np.zeros((len(C),len(mu_v)))

for i, c in enumerate(C): for j, mu in enumerate(mu_v): X1 = np.random.normal(loc = mu, scale = 73, size = n) X2 = np.random.normal(loc = mu, scale = 73, size = n) p = (sum(X1 + X2 >= 2c) + sum(X1 + X2 <= -2c))/n power[i,j] = p

plt.plot(mu_v, power[i,:], label = 'c = {}'.format(c))

plt.title('Função poder') plt.xlabel(r'') plt.ylabel('Prob') plt.legend() plt.show() ```

png

  1. Vamos definir agora?

Sim, vamos. Para isso vamos usar o ponto (4) e a definição de tamanho do teste. Uma forma possível de se fazer isso é a seguinte: limitamos o Erro I por e miniminizamos o Erro II, isso é minimizamos quando , ou melhor, maximizamos .

Para isso dizemos que o tamanho do teste é o máximo da função poder, quando . Nesse caso . Queremos, então que:

Precisamos então encontrar tal que seja maximado.

Observamos que, quando , . Logo

Para maximizar em , observamos que decresce com (os gráficos acima representam bem isso). Como queremos maximizar, gostaríamos de tomar o mínimo possível, restrito a

como vimos acima. Estamos lidando com uma função inversível, então

O melhor valor de que respeita essa condição e maximiza a relação é, portanto

python from scipy.stats import norm

Lembre que indica o máximo de Erro I que aceitamos.

python alpha0 = 0.05 c = np.sqrt(73)/np.sqrt(2)*norm.ppf(1 - alpha0/2) print(c)

11.841167465893536

É bem próximo do gráfico acima mostrado, quando testamos para .

python t = np.arange(-20,20,0.1) X = norm(loc = 0, scale = np.sqrt(73)/np.sqrt(2)) plt.plot(t, X.pdf(t)) plt.fill_between(t[(t < -c)], X.pdf(t[(t < -c)]), color = 'blue') plt.fill_between(t[(t > c)], X.pdf(t[(t > c)]), color = 'blue') plt.title('Distribuição Normal e Região de Rejeição') plt.show()

png

Por exemplo vamos tirar duas amostras de nossa distribuição

python X1, X2 = gold_df.Price.diff().sample(2) T = np.abs(X1 + X2)/2 T >= c

False
  1. Mas como escolher agora?

Agora entra o conceito mais complexo, o do p-valor. Ele está associado à ideia de escolher o menor possível, para que rejeitemos a hipótese nula. Isso significa o seguinte:

Queremos minimizar o Erro do Tipo I e rejeitar a Hipótese Nula com os dados que obtivemos. Se o p-valor for muito alto, significa que o Erro do Tipo I é grande se rejeitarmos a hipótese nula. Você apostaria que podemos rejeitar a hipótese nula nesse caso? Agora, se o p-valor for pequeno e rejeitarmos nossa hipótese nula, o erro do tipo I vai ser pequeno, então apostar que a hipótese nula deva ser rejeitada é mais confortável.

Assim não escolhemos , só observamos seu menor valor e vemos se faz sentido. Em geral se p-valor < 0.05, as pessoas rejeitam a hipótese nula.

No nosso caso calcular o p-valor é tranquilo. Para calcular o p-valor, precisamos dos dados. Queremos rejeitar a hipótese nula, isto é, queremos que que seja o menor possível, onde é o valor observado de . Vamos diminuindo e para cada podemos calcular e verificamos se . Podemos fazer isso até que , assim:

python p_value = 2*(1 - norm.cdf(np.sqrt(2)/np.sqrt(73)*T)) print(p_value)

0.8477386286989927

Como o p-valor é alto, não faz sentido rejeitar a hipótese nula.

Encerramos a atividade aqui!

Testes de Razão Verossimilhança

São testes baseados na verossimilhaça do modelo . Suponha que queremos testar a hipótese:

Vamos lembrar que a função de verossimilhança tende a ser mais alta próximo do valor verdadeiro do parâmetro. Com isso em mente, gostaríamos de saber se a verossimilhança é maior em ou em . Para isso, definimos a estatística de razão de verossimilhança: Observe que o denominador é o valor da função de verossimilhança no Estimador de Máxima Verossimilhança. Se o parâmetro verdadeiro estiver em , o númerador deve ser mais alto em , então a estatística se aproxima de 1. Baseado nisso, o teste de razão de verossimilhança é:

Rejeitamos se , para algum .

Teorema:

Seja aberto e suponha que seja , onde . Assuma que seja verdadeira e a função de verossimilhança satisfaça as condições para que o MLE seja assintoticamente normal e assintoticamente eficiente. Então: (converge em distribuição quando ).

A demonstração pode ser encontrada no StatLect

Testes não enviesados

Um teste é dito não enviesado se e

Não é muito utilizado dado seu difícil cálculo numérico e não traz resultados quem valem a pena.