Carregamento de pacotes:
Neste exemplo é utilizado o pacote: vcdExtra. Para a confecção do documento, é necessário o pacote rmarkdown.
# vcdExtra -- para o Teste de Mantel Haenzel
if (!require('vcdExtra')) install.packages('vcdExtra'); library('vcdExtra')
Carregamento dos dados:
dados <- array(data = c(1339, 260, 88, 300, 55, 22),
dim = c(3, 2),
dimnames = list('Race' = c('White', 'Black', 'Others'),
'Belief' = c('Yes', 'No')))
dados
## Belief
## Race Yes No
## White 1339 300
## Black 260 55
## Others 88 22
Verificando as frequências marginais:
addmargins(dados)
## Belief
## Race Yes No Sum
## White 1339 300 1639
## Black 260 55 315
## Others 88 22 110
## Sum 1687 377 2064
Verificando as proporções ao longo das linhas:
prop.table(dados, margin = 1)
## Belief
## Race Yes No
## White 0.8169616 0.1830384
## Black 0.8253968 0.1746032
## Others 0.8000000 0.2000000
Algumas estatísticas para a tabela Bidimensional:
vcdExtra::CMHtest(dados)
## Cochran-Mantel-Haenszel Statistics for Race by Belief
##
## AltHypothesis Chisq Df Prob
## cor Nonzero correlation 0.017785 1 0.89391
## rmeans Row mean scores differ 0.359901 2 0.83531
## cmeans Col mean scores differ 0.017785 1 0.89391
## general General association 0.359901 2 0.83531
Convertendo para o formato data.frame para usar a função glm e definindo o último nível como nível de referência:
dados.df <- as.data.frame(as.table(dados))
dados.df$Race <- relevel(dados.df$Race, ref = 'Others')
dados.df$Belief <- relevel(dados.df$Belief, ref = 'No')
dados.df
## Race Belief Freq
## 1 White Yes 1339
## 2 Black Yes 260
## 3 Others Yes 88
## 4 White No 300
## 5 Black No 55
## 6 Others No 22
Construindo o modelo log-linear de independência da forma \(log(\mu_{ij}) = \lambda + \lambda_i^X + \lambda_j^Y \quad i = 1,2,3 \quad j = 1,2\), com \(\lambda\): efeito geral, \(\lambda_i^X\): efeito marginal da raça (1: White, 2: Black, 3: Others) e \(\lambda_j^Y\): efeito marginal da crença (1: Yes, 2: No), tem-se:
mod.ind <- glm(Freq ~ Race + Belief, data = dados.df, family = poisson(link = 'log'))
summary(mod.ind)
##
## Call:
## glm(formula = Freq ~ Race + Belief, family = poisson(link = "log"),
## data = dados.df)
##
## Deviance Residuals:
## 1 2 3 4 5 6
## -0.01717 0.15781 -0.20194 0.03631 -0.33688 0.41917
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.00032 0.10611 28.28 <2e-16 ***
## RaceWhite 2.70136 0.09849 27.43 <2e-16 ***
## RaceBlack 1.05209 0.11075 9.50 <2e-16 ***
## BeliefYes 1.49846 0.05697 26.30 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2849.21758 on 5 degrees of freedom
## Residual deviance: 0.35649 on 2 degrees of freedom
## AIC: 49.437
##
## Number of Fisher Scoring iterations: 3
coeficientes <- summary(mod.ind)$coef
O R utiliza restrições do tipo set-to-zero (codificação dummy), definindo por construção o nível de referência igual a zero e portanto, não mostrando seu valor junto aos coeficientes estimados.
Para o modelo log-linear de independência, com restrição set-to-zero no último nível (referência), os coeficientes estimados são \(\lambda^X_1\) = 2.7013612, \(\lambda^X_2\) = 1.0520923, \(\lambda^X_3\) = 0 (referência), \(\lambda^Y_1\) = 1.4984619 e \(\lambda^Y_2\) = 0 (referência).
Assim, a chance estimada de crença em vida após a morte é igual a \(e^{\lambda^Y_1} = e^{1.498} = 4.475\).
Como foi usado um modelo de independência, a razão de chance é igual a 1 para toda sub-tabela 2x2 das contagens estimadas:
estimado <- dados
estimado[,] <- mod.ind$fitted.values
estimado
## Belief
## Race Yes No
## White 1339.62839 299.37161
## Black 257.46366 57.53634
## Others 89.90795 20.09205
estimado[1,1]*estimado[2,2]/(estimado[2,1]*estimado[1,2])
## [1] 1
estimado[1,1]*estimado[3,2]/(estimado[3,1]*estimado[1,2])
## [1] 1
estimado[2,1]*estimado[3,2]/(estimado[3,1]*estimado[2,2])
## [1] 1
A estatística \(G^2\) é mostrada diretamente no resultado do modelo ajustado:
G2 <- mod.ind$deviance # estatística G2
G2
## [1] 0.3564851
G2.df <- mod.ind$df.residual # graus de liberdade
G2.df
## [1] 2
G2.pv <- 1 - pchisq(G2, G2.df) # p-valor
G2.pv
## [1] 0.8367395
G2/G2.df
## [1] 0.1782425
A estatística \(\chi^2\) pode ser obtida fazendo:
X2 <- sum(resid(mod.ind, type = "pearson")^2) # estatística X2
X2
## [1] 0.3600752
X2.df <- mod.ind$df.residual # graus de liberdade
X2.df
## [1] 2
X2.pv <- 1 - pchisq(X2, X2.df) # p-valor
X2.pv
## [1] 0.8352388
X2/X2.df
## [1] 0.1800376
Construindo o modelo log-linear saturado da forma \(log(\mu_{ij}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_{ij}^{XY} \quad i = 1,2,3 \quad j = 1,2\), com \(\lambda\): efeito geral, \(\lambda_i^X\): efeito marginal da raça (1: White, 2: Black, 3: Others), \(\lambda_j^Y\): efeito marginal da crença (1: Yes, 2: No) e \(\lambda_{ij}^{XY}\): parâmetros de associação que refletem o desvio de independência, tem-se:
mod.sat <- glm(Freq ~ Race*Belief, data = dados.df, family = poisson(link = 'log'))
summary(mod.sat)
##
## Call:
## glm(formula = Freq ~ Race * Belief, family = poisson(link = "log"),
## data = dados.df)
##
## Deviance Residuals:
## [1] 0 0 0 0 0 0
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.0910 0.2132 14.498 < 2e-16 ***
## RaceWhite 2.6127 0.2209 11.829 < 2e-16 ***
## RaceBlack 0.9163 0.2523 3.632 0.000281 ***
## BeliefYes 1.3863 0.2384 5.816 6.03e-09 ***
## RaceWhite:BeliefYes 0.1096 0.2468 0.444 0.656946
## RaceBlack:BeliefYes 0.1671 0.2808 0.595 0.551889
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.8492e+03 on 5 degrees of freedom
## Residual deviance: -9.4813e-14 on 0 degrees of freedom
## AIC: 53.081
##
## Number of Fisher Scoring iterations: 3
coeficientes <- summary(mod.sat)$coef
A razão de chances estimada entre crença e raça é igual a \(e^{\lambda^{XY}_{11}} = e^{0.1096} = 1.1158\) para brancos e outros e \(e^{\lambda^{XY}_{21}} = e^{0.1671} = 1.1818\).
Assim, a razão de chances estimada entre crença e raça é igual a \(e^{\lambda^{XY}_{11} - \lambda^{XY}_{21}} = e^{-0.0575} = 0.9442\) para brancos e negros.
Para o modelo saturado, as estatísticas \(\chi^2\) e \(G^2\) são nulas, com número de graus de liberdade igual a zero.
AGRESTI, ALAN. An Introduction to Categorical Data Analysis. John Wiley & Sons, second edition, 2007.
NOTAS DE AULA. Análise de Dados Categorizados. Curso de Graduação em Estatística, UnB, 2018.
R CORE TEAM. R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.