Início > testes > Os testes chi-quadrado

Os testes chi-quadrado

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 cálculo 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)

#-----------------------------------------------------------------------------
Anúncios
  1. Cesar Rabak
    11/07/2011 às 10:05

    Walmes,

    Após essa magnífica exposição, tenho uma ridícula sugestão que espero seja aceita como contribuição para deixar (especialmente) o gráfico com apresentação mais “em português”.

    No início do script coloque:
    options(OutDec=”,”)

    Aí a maioria dos gráficos¹ do R e as respostas no console usarão a vírgula para a marca de raíz, fazendo com que os números percam o “sotaque” americano tanto nas respostas às funções quanto nas escalas.

    Outra questão, é o uso da expressão “valor p”, tenho visto em geral a tradução do /p-value/ para “p-valor” em textos em português. Você se baseou em algum glossário mais “autorizado” para usar essa forma?

    []s

    Cesar Rabak

    [1] de vez em quando eu trombo com uns que os autores forçaram formatações e seus objetos não honram essa variável de ambiente do R, mas na minha experiência são apenas “uma meia dúzia de três ou quatro” que não chega a tirar mérito da opção…

    • Walmes Zeviani
      11/07/2011 às 11:28

      Cesar, obrigado pelas dicas. Eu já conhecia o options(OutDec=”,”), uso nos gráficos para artigos, posters, seminários, e acabei me esquecendo de usar no blog. Vou lembrar disso para os próximos posts. O nome “valor-p” é usado no livro do Bussab e Moretin, acho que é mais português que “p-valor”. Obrigado pelas sugestões. Caso tenha sugestão de tópicos para o blog, estamos receptivos à orientações e contribuições. Walmes.

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: