Os testes chi-quadrado

July 4, 2011
By

This post was kindly contributed by Ridículas - go there to comment and to read the full post.

Gráfico de barras representando as frequências absolutas das classes de aspecto de agregado em função da profundidade de coleta. Valores dentro do gráfico são resultados do teste de homogeneidade.

Os testes \chi^2 (qui-quadrado) a que me refiro são:

  • Teste de aderência: testa a hipótese da amostra ser proveniente de uma distribuição de probabilidade definida em H_0. Com essa distribuição definida em H_0 são obtidos as frequências esperadas (E);
  • Teste de homogeneidade: testa a hipótese H_0 de duas ou mais amostras serem provenientes de uma mesma distribuição de probabilidades. Os valores esperados são obtidos pelo produto da linha marginal e tamanho das amostras;
  • Teste de independência: testa a hipótese H_0 de que a distribuição conjunta é o produto das distribuições marginais, o que só ocorre quando existe independência entre as variáveis aleatórias. No caso de duas variáveis aleatórias organizadas numa tabela de dupla entrada, os valores esperados são obtidos como produto dos valores marginais.

Nos testes chi-quadrado o que muda é só a hipótese envolvida no calculo dos valores esperados. Para os três tipos de hipótese, a estatística do teste é

X^2 = \sum_{i=1}^{n} \displaystyle \frac{(O_i-E_i)^2}{E_i}

sendo que sob H_0 a variável aleatória X^2 \sim \chi^2_\nu em que \nu são os graus de liberdade.

Nesse post vou apresentar cada uma dos três tipos de teste de hipótese. Para uma melhor abordagem teórica do teste chi-quadrado consulte os livros de estatística básica como Estatítica Básica do Bussab e Morettin.

Embora alguns autores façam distinção entre o teste de homogeneidade e de independência, você vai perceber que são o mesmo teste para a mesma hipótese escrita de duas formas. Veja, se há independência entre as classificações então é esperado que os valores para a combinações sejam o produto das probabilidades marginais, pois P(A_i \cap B_i) = P(A_i)\cdot P(B_i) sob independência. Logo, se as probabilidades na linha marginal representam os as probabilidades nas linhas de cada amostra, então há homogeneidade. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# teste de aderência 1: frequencia de acidentes nos dias da semana
# hipótese H_0 é de as frequências são dadas por uma distribuição
# uniforme discreta com n=5, ou seja, p_i=5 para todo i={seg,ter,qua,qui,sex}
# dados do Bussab & Morettin - Estatística Básica - 6 edição, pg 404

Oi <- c(seg=32, ter=40, qua=20, qui=25, sex=33) # observados
Ei <- sum(Oi)*1/length(Oi)                      # esperados sob H_0
X2 <- sum((Oi-Ei)^2/Ei)                         # estatística do teste
nu <- length(Oi)-1                              # graus de liberdade
pchisq(X2, df=nu, lower.tail=FALSE)             # valor-p do teste

#-----------------------------------------------------------------------------
# usando a função chis.test()

chisq.test(Oi)

#-----------------------------------------------------------------------------
# teste de aderência 2: número de plantas por m² em uma floresta
# hipótese H_0 é de o número de plantas observados é Poisson(lambda)
# lambda precisa ser estimado e isso diminui um grau de liberdade

n <- 0:10                                       # número de plantas
Oi <- c(574,922,1172,917,609,324,150,64,19,4,0) # número observado
names(Oi) <- c(n[-11],">9")
lambda <- sum(Oi*n)/sum(Oi)                     # estimativa de lambda
pi <- dpois(n[-11], lambda=lambda)              # frequência sob H_0
pi <- c(pi, 1-sum(pi))
Ei <- sum(Oi)*pi                                # número esperado sob H_0
X2 <- sum((Oi-Ei)^2/Ei)                         # estatística do teste
nu <- length(Oi)-1-1                            # grau de liberdade
pchisq(X2, df=nu, lower.tail=FALSE)             # valor p do teste

#-----------------------------------------------------------------------------
# usando a função chis.test()

chisq.test(Oi, p=pi)

# os graus de liberdade não consideram a estimação de lambda
# prestar atenção quando usar a chisq.test() nestes casos

#-----------------------------------------------------------------------------
# teste de homogeneidade: testar se a distribuição do aspecto de agregados
# muda com a profundidade de amostragem
# os dados são contínuos e serão colocados em classes para aplicação do teste
# foram usadas as classes obtidas para construir um histograma

ag <- read.table("http://www.leg.ufpr.br/~walmes/cursoR/agreg.txt",
                 header=TRUE, sep="\t")
str(ag)
ht <- hist(ag$aspecto)
classes <- ht$breaks                                # classes de aspecto
cla <- cut(ag$asp, classes)                         # atribuição às classes
Oi <- table(ag$prof, cla)                           # observados
Ei <- outer(rowSums(Oi), colSums(Oi), "*")/sum(Oi)  # esperados sob H_0
X2 <- sum((Oi-Ei)^2/Ei)                             # estatística do teste
nu <- prod(dim(Ei)-1)                               # graus de liberdade
pchisq(X2, df=nu, lower.tail=FALSE) -> P; P         # valor p do teste

#-----------------------------------------------------------------------------
# usando a função chis.test()

chisq.test(Oi)

#-----------------------------------------------------------------------------
# gráfico

#png("f016.png", w=500, h=300)
par(mar=c(4.1,6.1,2.1,2.1))
col <- c("green3","green4")
barplot(Oi, beside=TRUE, horiz=TRUE, las=1, col=col,
        xlab="Frequência absoluta")
mtext(side=2, text="Classe de aspecto do agregado", line=5)
legend("bottomright", legend=c("0 - 5 cm","5 - 20 cm"), fill=col, bty="n")
text(30, 3, substitute(italic(X)^2==x~~~~~~italic(valor-p)==P,
                       list(x=round(X2,4), P=round(P,4))))
#dev.off()

#-----------------------------------------------------------------------------
# teste de independência: testar se há independência na classificação
# quanto ao grau de ingestão de alcool (0, <7, >7 copos por semana) e o
# desenvolvimento de doença cardíaca (sim, não)

Oi <- matrix(c(146,106,29,750,590,292), byrow=TRUE, # observados
             2, 3, dimnames=list(c("sim","não"), c(0,"<7",">7")))
Ei <- outer(rowSums(Oi), colSums(Oi), "*")/sum(Oi)  # esperados sob H_0
X2 <- sum((Oi-Ei)^2/Ei)                             # estatística do teste
nu <- prod(dim(Ei)-1)                               # graus de liberdade
pchisq(X2, df=nu, lower.tail=FALSE)                 # valor p do teste

#-----------------------------------------------------------------------------
# usando a função chis.test()

chisq.test(Oi)

#-----------------------------------------------------------------------------

Tags: , , , , , ,

Comments are closed.