Processing math: 100%

Testes qui-quadrado

Uma tabela de contingência pode ser criada usando um DataFrame

Estes são os resultados de 120 lançamentos de um dado e uma moeda.

In [20]:
import pandas as pd
d = {'':['CARA', 'COROA'], 'UM':[10,8], 'DOIS':[9,16], 'TRÊS':[11,13], 'QUATRO':[12,7], 'CINCO':[6,7], 'SEIS':[5,16]}
df = pd.DataFrame(data=d)
df = df.set_index('')
df
Out[20]:
UM DOIS TRÊS QUATRO CINCO SEIS
CARA 10 9 11 12 6 5
COROA 8 16 13 7 7 16

Ao somar os elementos de cada linha e cada coulna obtemos os resultados dos lançamentos da moeda e dos lançamentos do dado, separadamente.

In [21]:
CARAS = sum(df.iloc[0,:].values) # soma da linha 1, as caras
COROAS = sum(df.iloc[1,:].values) # soma da linha 2, as coroas
moeda = [CARAS, COROAS]
moeda
Out[21]:
[53, 67]
In [22]:
UM = sum(df.iloc[:,0].values) # soma da coluna 1, os UM
DOIS = sum(df.iloc[:,1].values) # soma da coluna 2, os DOIS
TRES = sum(df.iloc[:,2].values) # soma da coluna 3, os TRÊS
QUATRO = sum(df.iloc[:,3].values) # soma da coluna 4, os QUATRO
CINCO = sum(df.iloc[:,4].values) # soma da coluna 5, os CINCO
SEIS = sum(df.iloc[:,5].values) # soma da coluna 6, os SEIS
dado = [UM, DOIS, TRES, QUATRO, CINCO, SEIS]
dado
Out[22]:
[18, 25, 24, 19, 13, 21]

O teste de aderência de Pearson pode ser implementado usando a função chisquare do módulo scipy.stats. A hipótese nula, por defeito, é a equiprobabilidade dos diferentes resultados possíveis.

In [23]:
from scipy.stats import chisquare
chi, p = chisquare(moeda)
chi, p
Out[23]:
(1.6333333333333333, 0.20124262095772028)
In [24]:
from scipy.stats import chisquare
chi, p = chisquare(dado)
chi, p
Out[24]:
(4.8, 0.4407729680866631)

Estes valores, os qui-quadrado os valores de prova p, mostram que moeda e dado são "honestos", ou seja, os possíveis resultados são equiprováveis.

O teste de independência de Pearson pode ser implementado usando a função chi2_contingency do módulo scipy.stats

In [25]:
from scipy.stats import chi2_contingency
chi2, p, dof, expected = chi2_contingency(df)
chi2, p, dof, expected
Out[25]:
(7.978772831608946,
 0.15740938513827626,
 5,
 array([[ 7.95      , 11.04166667, 10.6       ,  8.39166667,  5.74166667,
          9.275     ],
        [10.05      , 13.95833333, 13.4       , 10.60833333,  7.25833333,
         11.725     ]]))

Os valores obtidos mostram que o dado e a moeda podem ser considerados independentes