Análise de tabelas 2 x 2


<?xml version="1.0" encoding="ISO-8859-1"?>
<Rscript>
<titulo>Análise de tabelas 2 x 2</titulo>
<descricao>
Cálculo de percentagens, risco relativo, odds ratio e qui-quadrado e gráficos para tabelas 2x2.
</descricao>
<autor>Ernani B Bandarra e Oswaldo G Cruz</autor>
<email>Bandarra@datasus.gov.br / oswaldo@fiocruz.br</email>
<versao>1.0</versao>
<parametro></parametro>
<parametro2></parametro2>
<colsel></colsel>
<colsel2></colsel2>
<script>
if (version$minor > "8.1") { 
	library(stats)
	library(graphics)
      
}

tabular <- function(x,  conf=0.95) {
	tmp <- list()
	
	if (dim(x)[1]!=2 || dim(x)[2] !=2) {
		stop(" x tem de ser Matrix 2x2 ")
		}	
	
	total <- sum(x)
	rowsum <- apply(x,1,sum)
	colsum <- apply(x,2,sum)
	pcttotal <- x/total
	pctlinha <- sweep(x,1,rowsum,"/")
	pctcoluna <- sweep(x,2,colsum,"/")
	experado <- (matrix(rowsum) %*% t(matrix(colsum))) / total
	dimnames(experado) <- dimnames(x)
	
	
	or <- x[1,1] * x[2,2] / ( x[2,1] * x[1,2] )
	ASE.or <- sqrt(sum(1/x))
	IC.or <- exp(log(or) + c(-1,1) * qnorm(0.5*(1+conf)) *ASE.or )
	
	p1 <- x[1,1]/sum(x[1,]) 
	p0 <- x[2,1]/sum(x[2,])

	rr <- p1/p0
	diff = (p1-p0)*100

	ASE.rr <- sqrt( (1-p1)/sum(x[1,]*p1) + (1-p0)/(sum(x[2,]*p0) )) 

	IC.rr <- exp(log(rr) + c(-1,1) * qnorm(0.5*(1+conf)) *ASE.rr )
	
	
	x2 <- chisq.test(x)
	
	
	tmp <- list(or=or,ASE.or=ASE.or,intervalo.or=IC.or,
	            rr=rr,ASE.rr=ASE.rr,intervalo.rr=IC.rr,diff.rr=diff,
	            x2.quad=x2$statistic,x2.pval=x2$p.value,x2.gl=x2$parameter,
	            x2.metodo=x2$method,conf=conf,
	            tab=x,pcttotal=pcttotal,pctlinha=pctlinha,pctcoluna=pctcoluna,experado=experado)
		
	class(tmp) <- "tabela"
	tmp
}

plot.tabela <- function(obj,cor=c("red","orange","green","yellow"),borda=F) {

	x <- obj$tab
	a <- rep(NULL,4)
	cborda <- rep("black",4)
			
	if (borda==F) cborda <- cor
	
	
	a<- c(x[1,1],x[1,2],x[2,2],x[2,1])
	b <- sqrt(a)
	z <- sum(b) / 2 
	old.par <- par(no.readonly = TRUE)
	par(pty="s")
	plot(c(1,2*z),c(1,2*z), type = "n", xlab=names(x)[1], ylab=rownames(x)[1])
	
	polygon(c(z-b[1],z,z,z-b[1]), c(z+b[1],z+b[1],z,z), col=cor[1],  border = cborda[1])
	polygon(c(z+b[2],z,z,z+b[2]), c(z+b[2],z+b[2],z,z), col=cor[2],  border = cborda[2])
	polygon(c(z+b[3],z,z,z+b[3]), c(z-b[3],z-b[3],z,z), col=cor[3],  border = cborda[3])
	polygon(c(z-b[4],z,z,z-b[4]), c(z-b[4],z-b[4],z,z), col=cor[4],  border = cborda[4])
	title(paste(titulo,"\n",subtitulo))
	par(old.par)
}

print.tabela  <- function(x,digitos=4) {
	cat ("\n\n  Resultados para a tabela ",titulo,"\n\n")
#	cat (titulo,"\n")
	cat (subtitulo,"\n")
	cat ("\nTabela \n\n")
	print(x$tab) 
	cat ("\nPercentagem Total \n\n")
	print(x$pcttotal,digits=digitos)
	cat ("\nPercentagem na Linha \n\n")
	print(x$pctlinha,digits=digitos)
	cat ("\nPercentagem Coluna \n\n")
	print(x$pctcoluna,digits=digitos)
	cat ("\nValor Esperado \n\n")
	print(x$experado,digits=digitos)
	
	cat ("\n\nRisco Relativo  \n\n")
	cat ("\n valor do Risco Relativo =", x$rr,"\n")
	cat ("\n Intervalo de Confiança (", x$conf,"%) \t", x$intervalo.rr[1],"   a   ",x$intervalo.rr[2], "\n", sep="" )
	cat ("\n Diferença de Risco     =", x$diff.rr,"%\n")
	
	cat ("\n\nOdds Ratio  \n\n")
	cat ("\n valor do Odds Ratio =", x$or,"\n")
	cat ("\n Intervalo de Confiança (",x$conf,"%) \t",x$intervalo.or[1],"   a   ",x$intervalo.or[2], "\n", sep="" )
	
	cat ("\n\nQui Quadrado  \n\n")
	cat(" Qui Quadrado       = ",x$x2.quad,"\n")
	cat(" Valor p            = ",x$x2.pval,"\n")
	cat(" Graus de liberdade = ",x$x2.gl,"\n")
	cat(" Método             = ",x$x2.metodo,"\n")
 	cat("\n\n")
	
	
}

tabela = tabela[1:2]	
saida <- tabular(tabela)
grafico.tabwin()
plot(saida)
saida
</script>
<exemplo>

</exemplo>
</Rscript>