Capítulo 2 - Delineamentos amostrais e modelos associados
2.1 Gráficos de colunas múltiplas e segmentadas - Figura 2.1
options(OutDec=",") # opção: valores numéricos com vírgulas
par(mfrow=c(1,2))
data<-cbind(E=c(75,45)/120, NE=c(21,56)/77)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","white"), ylim=range(c(0,1.19)), names.arg = c("Sim","Não"),
xlab="Exposição ao fator", ylab="Proporções amostrais",
legend.text = c("Doentes", "Sadios"),
args.legend = list(x = "topleft", bty="n", cex=1))
abline(h=0)
text(bp, c(0.64,0.38,0.28,0.73), round(data,3), cex=1, pos=3)
title("(a)")
mydata<-data.frame(row.names=c("Sim","Não"), Doentes=c(0.625,0.273), Sadios=c(0.375,0.727))
x <- barplot(t(as.matrix(mydata)), col=c("gray", "white"),
legend=TRUE, xlim=c(0,2.8), args.legend=list(x="topleft", bty="n", cex=1),
ylab="Proporções amostrais", xlab="Exposição ao fator", ylim=range(c(0,1.19)))
text(x, mydata$Doentes-0.15, labels=mydata$Doentes, col="black")
text(x, mydata$Doentes+0.20, labels=1-(mydata$Doentes))
abline(h=0)
title("(b)")
# Comandos p/ salvar a figura em extensão .eps e em escala de cinza
dev.copy2eps(file="Figura21.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
# Nota: há outras extensões disponíveis: png, tiff, jpeg, bmp etc.)
2.2 Gráficos de barras múltiplas e segmentadas - Figura 2.2
options(OutDec=",")
par(mfrow=c(1,2))
data<-cbind(E = c(75, 45)/120, NE = c(21, 56)/77)
bp<- barplot(height = data, beside = T, h = T,
col = c("gray","white"), xlim=range(c(0,1)),
names.arg = c("A", "B"), ylab="Tratamentos", xlab="Proporções amostrais",
legend.text = c("Curado", "Não curado"),
args.legend = list(x = "topright", bty="n", cex=1.2))
abline(v=0)
text(c(0.63,0.38,0.28,0.735), bp, round(data, 3), cex=1, pos=2)
title("(a)")
data<-cbind(C = c(75, 21)/96, CO = c(45, 56)/101)
bp<-barplot(height = data, beside = F, h = T,
col = c("gray", "white"), xlim=range(c(0,1.43)),
names.arg = c("Casos", "Controles"), ylab="Grupos",
xlab="Proporções amostrais",
legend.text = c("Expostos", "Não expostos"), width=1,
args.legend = list(x = "topright", bty="n", cex=1.2))
abline(v=0)
mydata <- data.frame(row.names=c("C","Co"), E=c(0.781,0.445), NE=c(0.219,0.555))
text(mydata$E-0.10, bp, labels=mydata$E, col="black")
text(c(mydata$E[1]+0.12, mydata$E[2]+0.45), bp, labels=1-(mydata$E))
title("(b)")
dev.copy2eps(file="Figura22.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
2.3 Gráficos de colunas e de setores - Figura 2.3
options(OutDec=",")
par(mfrow=c(1,2))
b<-c(75/197,45/197,21/197,56/197)
bp<-barplot(b, col= gray.colors(4), space=0, ylim=c(0,1), ylab="Proporções amostrais",
legend.text = c("Expostos e doentes", "Expostos e sadios", "Não expostos e doentes",
"Não expostos e sadios"), width = 1, args.legend = list(x = "topleft", bty="n", cex=1.2))
title("(a)")
text(bp, b, round(b,3), cex=1, pos=3)
abline(h=0)
slices<-c(0.381,0.228,0.107,0.284)
pielabels<-c("Expostos e \n doentes =","Expostos e \n sadios =",
"Não expostos e \n doentes =","Não expostos e \n sadios =")
pct<-slices*100
lbls<-paste(pielabels,pct)
lbls<-paste(lbls,"%", sep="")
pie(slices,labels = lbls, col=gray.colors(4), cex=1.2)
title("(b)")
dev.copy2eps(file="Figura23.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
2.4 Gráficos quadrúplo e mosaico - Figura 2.4
options(OutDec=",")
par(mfrow=c(1,2))
dados<-matrix(c(75,21,45,56), nc=2)
rownames(dados) <- c("exposto","não exposto")
colnames(dados) <- c("doente","sadio")
dados
fourfoldplot(dados, col=gray.colors(2), margin=2, conf.level=0)
title("(a)")
dados<-matrix(c(13,29,7,7,21,7), nc=3)
rownames(dados) <- c("Ativo","Placebo")
colnames(dados) <- c("Nenhuma","Alguma","Acentuada")
dados
mosaicplot(dados,main="", xlab="Tratamento", ylab="Melhora do paciente", col=gray.colors(3))
title("(b)")
dev.copy2eps(file="Figura24.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
Capítulo 3 - Tabelas de contingência 2 × 2
3.1 Teste exato de Fisher (Tabela 3.2)
dados<-matrix(c(2,18,6,14), nc=2)
dados
fisher.test(dados)
3.2 Exemplo sobre avaliação de medicamento (Tabela 3.4)
# Gráfico de colunas múltiplas dos dados
options(OutDec=",")
par(mfrow=c(1,1))
data<-cbind(N = c(40, 20)/60, P = c(16, 48)/64)
bp<- barplot(height = data,
beside = TRUE,
col = c("gray","white"), ylim=range(c(0,1)),
names.arg = c("Novo", "Placebo"), xlab="Medicamentos", ylab="Proporções amostrais",
legend.text = c("Melhora: sim", "Melhora: não"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(0.67,0.33,0.25,0.75), round(data, 2), cex=1.2, pos=3)
# Teste qui-quadrado de Pearson
dados<-matrix(c(40,16,20,48), nc=2)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
# Diferença entre proporções e IC(d)_95%
dados<-matrix(c(40,16,20,48), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
d<-p11-p21
vd<-((p11*(1-p11))/(sum(dados[1,])-1)) + ((p21*(1-p21))/(sum(dados[2,])-1))
dvd<-sqrt(vd)
z<-qnorm(0.975)
li<- d - (z*dvd)
ls<- d + (z*dvd)
cbind(d,li,ls)
# Risco relativo (RR) e IC(RR)_95%
dados<-matrix(c(40,16,20,48), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
RR<-p11/p21
vf1<-((1-p11)/(sum(dados[1,])*p11)) + ((1-p21)/(sum(dados[2,])*p21))
dpf1<-sqrt(vf1)
z<-qnorm(0.975)
li<-exp(log(RR) - z*dpf1)
ls<-exp(log(RR) + z*dpf1)
cbind(RR,li,ls)
# Razão de chances (OR) e IC(OR)_95%
dados<-matrix(c(40,16,20,48), nc=2)
dados
OR<-(dados[1,1]*dados[2,2])/(dados[1,2]*dados[2,1])
vf<-(1/dados[1,1])+(1/dados[1,2])+(1/dados[2,1]+(1/dados[2,2]))
dpf<-sqrt(vf)
z<-qnorm(0.975)
li<-exp(log(OR) - z*dpf)
ls<-exp(log(OR) + z*dpf)
cbind(OR,li,ls)
3.3 Exemplo sobre armadilhas de insetos (Figura 3.1)
options(OutDec=",")
par(mfrow=c(1,1))
data<-cbind(AM = c(246, 17)/263, AL = c(458, 32)/490)
bp<- barplot(height = data,
beside = TRUE,
col = c("gray","white"), ylim=range(c(0,1.0)),
names.arg = c("Alaranjada", "Amarela"), xlab="Cor das armadilhas", ylab="Proporções amostrais",
legend.text = c("Insetos machos", "Insetos fêmeas"),
args.legend = list(x = "topright", bty="n", cex=1.2))
abline(h=0)
text(bp, c(246/263,17/263,458/490,32/490), round(data, 4), cex=1.2, pos=3)
# Teste qui-quadrado de Pearson
dados<-matrix(c(246,458,17,32), nc=2)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
# Razão de chances (OR) e IC(OR)_95%
dados<-matrix(c(246,458,17,32), nc=2)
dados
OR<-(dados[1,1]*dados[2,2])/(dados[1,2]*dados[2,1])
vf<-(1/dados[1,1])+(1/dados[1,2])+(1/dados[2,1]+(1/dados[2,2]))
dpf<-sqrt(vf)
z<-qnorm(0.975)
li<-exp(log(OR) - z*dpf)
ls<-exp(log(OR) + z*dpf)
cbind(OR,li,ls)
3.4 Exemplo sobre tabagismo e câncer de pulmão (Tabela 3.5)
# Gráfico de colunas múltiplas dos dados
options(OutDec=",")
par(mfrow=c(1,1))
data<-cbind(S = c(75, 45)/120, N = c(21, 56)/77)
bp<- barplot(height = data,
beside = TRUE,
col = c("gray","white"), ylim=range(c(0,1)),
names.arg = c("Sim", "Não"), xlab="Fumante", ylab="Proporções amostrais",
legend.text = c("Câncer de pulmão: sim", "Câncer de pulmão: não"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(75/120,45/120,21/77,56/77), round(data, 2), cex=1.2, pos=3)
# Teste qui-quadrado de Pearson
dados<-matrix(c(75,21,45,56), nc=2)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
# Diferença entre proporções e IC(d)_95%
dados<-matrix(c(75,21,45,56), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
d<-p11-p21
vd<-((p11*(1-p11))/(sum(dados[1,])-1)) + ((p21*(1-p21))/(sum(dados[2,])-1))
dvd<-sqrt(vd)
z<-qnorm(0.975)
li<- d - (z*dvd)
ls<- d + (z*dvd)
cbind(d,li,ls)
# Risco relativo (RR) e IC(RR)_95%
dados<-matrix(c(75,21,45,56), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
RR<-p11/p21
vf1<-((1-p11)/(sum(dados[1,])*p11)) + ((1-p21)/(sum(dados[2,])*p21))
dpf1<-sqrt(vf1)
z<-qnorm(0.975)
li<-exp(log(RR) - z*dpf1)
ls<-exp(log(RR) + z*dpf1)
cbind(RR,li,ls)
# Razão de chances (OR) e IC(OR)_95%
dados<-matrix(c(75,21,45,56), nc=2)
dados
OR<-(dados[1,1]*dados[2,2])/(dados[1,2]*dados[2,1])
vf<-(1/dados[1,1])+(1/dados[1,2])+(1/dados[2,1]+(1/dados[2,2]))
dpf<-sqrt(vf)
z<-qnorm(0.975)
li<-exp(log(OR) - z*dpf)
ls<-exp(log(OR) + z*dpf)
cbind(OR,li,ls)
3.5 Exemplo sobre doenças respiratórias em crianças (Figura 3.2)
# Gráficos de colunas múltiplas e de setores (pizza)
options(OutDec=",")
par(mfrow=c(1,2))
b<-c(0.329,0.379,0.116,0.176)
bp<-barplot(b, col= gray.colors(4), space=0, ylim=c(0,1), ylab="Proporções amostrais",
legend.text = c("Feminino com sintomas", "Masculino com sintomas",
"Feminino sem sintomas", "Masculino sem sintomas"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
text(bp, b, round(b, 3), cex=1, pos=3)
abline(h=0)
slices<-c(0.329,0.379,0.116,0.176)
pielabels<-c("Feminino com \n sintomas =", "Masculino com \n sintomas =",
"\n Feminino sem \n sintomas =", "Masculino sem \n sintomas =")
pct<-slices*100
lbls<-paste(pielabels, pct)
lbls<-paste(lbls,"%", sep="")
pie(slices, labels = lbls, col=gray.colors(4), cex=1.2)
# Teste qui-quadrado de Pearson
dados<-matrix(c(355,410,125,190), nc=2)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
# Razão de chances (OR) e IC(OR)_95%
dados<-matrix(c(355,410,125,190), nc=2)
dados
OR<-(dados[1,1]*dados[2,2])/(dados[1,2]*dados[2,1])
vf<-(1/dados[1,1])+(1/dados[1,2])+(1/dados[2,1]+(1/dados[2,2]))
dpf<-sqrt(vf)
z<-qnorm(0.975)
li<-exp(log(OR) - z*dpf)
ls<-exp(log(OR) + z*dpf)
cbind(OR,li,ls)
3.6 Exemplo sobre medicamentos para infecções graves (Figura 3.3)
# Gráfico de colunas múltiplas dos dados
options(OutDec=",")
par(mfrow=c(1,1))
data<-cbind(E = c(29, 16)/45, NE = c(14, 31)/45)
bp<- barplot(height = data,
beside = TRUE,
col = c("gray","white"), ylim=range(c(0,1)),
names.arg = c("Novo", "Padrão"), xlab="Medicamentos", ylab="Proporções amostrais",
legend.text = c("Resposta favorável", "Resposta não favorável"),
args.legend=list(x="topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(0.645,0.355,0.311,0.689), round(data,3), cex=1.2, pos=3)
# Teste qui-quadrado de Pearson
dados<-matrix(c(29,14,16,31), nc=2)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
# Diferença entre proporções e IC(d)_95%
dados<-matrix(c(29,14,16,31), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
d<-p11-p21
vd<-((p11*(1-p11))/(sum(dados[1,])-1)) + ((p21*(1-p21))/(sum(dados[2,])-1))
dvd<-sqrt(vd)
z<-qnorm(0.975)
li<- d - (z*dvd)
ls<- d + (z*dvd)
cbind(d,li,ls)
# Risco relativo (RR) e IC(RR)_95%
dados<-matrix(c(29,14,16,31), nc=2)
dados
p11<-(dados[1,1]/(sum(dados[1,])))
p21<-(dados[2,1]/(sum(dados[2,])))
RR<-p11/p21
vf1<-((1-p11)/(sum(dados[1,])*p11)) + ((1-p21)/(sum(dados[2,])*p21))
dpf1<-sqrt(vf1)
z<-qnorm(0.975)
li<-exp(log(RR) - z*dpf1)
ls<-exp(log(RR) + z*dpf1)
cbind(RR,li,ls)
# Razão de chances (OR) e IC(OR)_95%
dados<-matrix(c(29,14,16,31), nc=2)
dados
OR<-(dados[1,1]*dados[2,2])/(dados[1,2]*dados[2,1])
vf<-(1/dados[1,1])+(1/dados[1,2])+(1/dados[2,1]+(1/dados[2,2]))
dpf<-sqrt(vf)
z<-qnorm(0.975)
li<-exp(log(OR) - z*dpf)
ls<-exp(log(OR) + z*dpf)
cbind(OR,li,ls)
Instalar o package epiR (http://www.r-project.org/)
Consultar o manual epiR.pdf para mais detalhes
require(epiR)
dados<-matrix(c(40,16,20,48), nc=2)
epi.2by2(dados, method="cohort.count", conf.level=0.95, units=1)
dados<-matrix(c(40,20,16,48), nc=2)
epi.2by2(dados, method="case.control", conf.level=0.95, units=1)
dados<-matrix(c(40,16,20,48), nc=2)
epi.2by2(dados, method="cross.sectional", conf.level=0.95, units=1)
Capítulo 4 - Tabelas de contingência s × r
4.1 Ensaio clínico sobre artrite reumatoide - Figura 4.1
# Gráfico de colunas múltiplas dos dados
options(OutDec=",")
par(mfrow=c(1,1))
data<-cbind(A = c(13,7,21)/41, P = c(29,7,7)/43)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(3), ylim=range(c(0,1.19)),
names.arg = c("Ativo", "Placebo"), xlab="Tratamento", ylab="Proporções amostrais",
legend.text = c("Nenhuma melhora", "Alguma melhora", "Melhora acentuada"),
args.legend = list(x = "topleft", bty="n", cex=1))
abline(h=0)
text(bp, c(0.317,0.171,0.512,0.674,0.163,0.163), round(data, 3), cex=1, pos=3)
# Estatística QS em Tabela 2 x 3 (Y ordinal e ni+ fixos)
dados<-matrix(c(13,29,7,7,21,7), nc=3)
dados
escore<-c(0,1,2)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs = ((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1
p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
4.2 Estudo sobre uso de tabaco por adolescentes - Figura 4.2
# Gráfico de colunas múltiplas dos dados
par(mfrow=c(1,2))
b<-c(70,202,218,33,40,11)/574
bp<-barplot(b, col= gray.colors(6), space=0, ylim=c(0,1), ylab="Proporções amostrais",
legend.text = c("Consciência mínima e não usa tabaco",
"Consciência moderada e não usa tabaco",
"Consciência substancial e não usa tabaco",
"Consciência mínima e usa tabaco",
"Consciência moderada e usa tabaco",
"Consciência substancial e usa tabaco"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
title("(a)")
text(bp, b, round(b, 3), cex=1, pos=3)
abline(h=0)
# Gráfico de colunas condicional às marginais-linha
data<-cbind(Min = c(70, 33)/103, Mod = c(202,40)/242, Sub = c(218,11)/229)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(2), ylim=range(c(0,1.19)),
names.arg = c("Mínima", "Moderada", "Substancial"),
xlab="Consciência do risco", ylab="Proporções amostrais",
legend.text = c("Uso de tabaco: não", "Uso de tabaco: sim"),
args.legend = list(x = "topleft", bty="n", cex=1))
title("(b)")
abline(h=0)
text(bp, c(0.68,0.32,0.835,0.165,0.952,0.048), round(data, 3), cex=1, pos=3)
# Estatística QCs em Tabela 3 x 2 (X e Y ordinais e n fixo)
x<-c(rep(1,103), rep(2,242), rep(3,229))
y<-c(rep(0,70), rep(1,33), rep(0,202), rep(1,40), rep(0,218), rep(1,11))
rac<-cor(y,x)
n<-length(x)
QCS<-(n-1)*rac^2
p<-1-pchisq(QCS,1)
cbind(rac,QCS,p)
4.3 Estudo sobre afiliações político-partidárias (Tabela 4.4 - X e Y nominais)
dados<-matrix(c(221,200,208,160,291,106,360,160,316,140,311,97), nc=4)
dados
Qp<-chisq.test(dados, correct=F)
Qp
Qp$observed
Qp$expected
4.4 Estudo sobre medicamentos para cefaleia (Tabela 4.5 - Y ordinal e ni+ fixos)
dados<-matrix(c(6,1,2,9,4,5,6,6,6,3,6,8,1,8,6), nc=5)
dados
escore<-c(0,1,2,3,4)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
fb3<-(sum(dados[3,]*escore))/sum(dados[3,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3]),sum(dados[,4]),sum(dados[,5])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
sf<-sum(sum(dados[1,])*((fb1-mua)^2),sum(dados[2,])*((fb2-mua)^2),sum(dados[3,])*((fb3-mua)^2))
Qs<-((sum(dados)-1)*sf)/(sum(dados)*va)
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,fb3,Qs,gl,p)
# padrão versus novo
dados<-matrix(c(1,2,4,5,6,6,6,8,8,6), nc=5)
dados
escore<-c(0,1,2,3,4)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3]),sum(dados[,4]),sum(dados[,5])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs<-((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1
p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
# placebo versus novo
dados<-matrix(c(6,2,9,5,6,6,3,8,1,6), nc=5)
dados
escore<-c(0,1,2,3,4)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3]),sum(dados[,4]),sum(dados[,5])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs<-((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
# placebo versus padrão
dados<-matrix(c(6,1,9,4,6,6,3,6,1,8), nc=5)
dados
escore<-c(0,1,2,3,4)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3]),sum(dados[,4]),sum(dados[,5])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs<-((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
4.5 Estudo sobre produtos de limpeza - Tabela 4.6 (X e Y ordinais e ni+ fixos)
x<-c(rep(1,46),rep(2,53),rep(3,67))
y<-c(rep(1,27),rep(2,14),rep(3,5),rep(1,10),rep(2,17),rep(3,26),rep(1,5),rep(2,12),rep(3,50))
rac<-cor(y,x)
n<-length(x)
QCS<-(n-1)*rac^2
p<-1-pchisq(QCS,1)
cbind(rac,QCS,p)
dados<-matrix(c(27,10,5,14,17,12,5,26,50), nc=3)
dados
escore<-c(1,2,3)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
fb3<-(sum(dados[3,]*escore))/sum(dados[3,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
sf<-sum(sum(dados[1,])*((fb1-mua)^2),sum(dados[2,])*((fb2-mua)^2),sum(dados[3,])*((fb3-mua)^2))
Qs<-((sum(dados)-1)*sf)/(sum(dados)*va)
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,fb3,Qs,gl,p)
# água versus água + dose única
dados<-matrix(c(27,10,14,17,5,26), nc=3)
dados
escore<-c(1,2,3)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs <- ((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
# água versus água + dose dupla
dados<-matrix(c(27,5,14,12,5,50), nc=3)
dados
escore<-c(1,2,3)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs <- ((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
# água + dose única versus água + dose dupla
dados<-matrix(c(10,5,17,12,26,50), nc=3)
dados
escore<-c(1,2,3)
fb1<-(sum(dados[1,]*escore))/sum(dados[1,])
fb2<-(sum(dados[2,]*escore))/sum(dados[2,])
esp<-(c(sum(dados[,1]),sum(dados[,2]),sum(dados[,3])))/sum(dados)
mua<-sum(escore*esp)
va<-sum((escore-mua)^2*esp)
vbf1<-((sum(dados) - sum(dados[1,]))/(sum(dados[1,])*(sum(dados)-1)))*va
Qs <- ((fb1-mua)^2)/vbf1
gl<-nrow(dados)-1; p<-1-pchisq(Qs,gl)
cbind(fb1,fb2,Qs,gl,p)
4.6 Estudo sobre anúncio publicitário de veículos - Tabela 4.7
dados<-matrix(c(4,0,5,0,3,5,0,3,2,2,4,2), nc=4)
dados
fisher.test(dados)
Capítulo 5 - Análise estratificada
5.1 Ensaio clínico multicentros - Tabela 5.2 (Estatística QMH)
tab<-array(c(29,14,16,31,37,24,8,21), dim=c(2,2,2))
mantelhaen.test(tab, correct=F)
Nota: QMH não é apropriado se as razões de chances não estiverem na mesma direção.
# Teste de Breslow-Day para testar H0: homogeneidade das razões de chances
source("https://docs.ufpr.br/~giolo/LivroADC/Funcoes/breslowday.test.R.txt")
tab<-array(c(29,14,16,31,37,24,8,21), dim=c(2,2,2))
breslowday.test(tab)
5.2 Ensaio clínico duplo cego - Tabela 5.5 (Estatística QSMH)
dados<-matrix(c(6,19,7,9,5,7,2,1,16,6,5,1), nc=3)
dados
escore<-c(0,1,2)
fb11<-(sum(dados[1,]*escore))/sum(dados[1,])
fb21<-(sum(dados[3,]*escore))/sum(dados[3,])
fb12<-(sum(dados[2,]*escore))/sum(dados[2,])
fb22<-(sum(dados[4,]*escore))/sum(dados[4,])
fm1<-sum(c(sum(dados[1,]),sum(dados[3,]))*c(fb11,fb21))
esp1<-(c(sum(dados[1:2,1]),sum(dados[1:2,2]),sum(dados[1:2,3])))/sum(dados[1:2,])
mu1<-sum(escore*esp1)
esp2<-(c(sum(dados[3:4,1]),sum(dados[3:4,2]),sum(dados[3:4,3])))/sum(dados[3:4,])
mu2<-sum(escore*esp2)
mu<-sum(c(sum(dados[1,]),sum(dados[3,]))*c(mu1,mu2))
v1<- sum(((escore-mu1)^2)*esp1)
v2<- sum(((escore-mu2)^2)*esp2)
vfma<-(sum(dados[1,])*sum(dados[2,])*v1)/(sum(dados[1:2,])-1)
vfmb<-(sum(dados[3,])*sum(dados[4,])*v2)/(sum(dados[3:4,])-1)
vfm<- sum(c(vfma,vfmb))
QSMH<-((fm1-mu)^2)/vfm; p<-1-pchisq(QSMH,1)
round(c(QSMH,p),digits=5)
c(fb11,fb21,fb12,fb22)
Capítulo 6 - Tabelas com dados relacionados
6.1 Teste de McNemar aplicado aos dados dispostos na Tabela 6.1
dados<-matrix(c(20,10,5,10), nc=2)
mcnemar.test(dados,correct=F)
6.2 Nomograma de Fagan
# https://achekroud.github.io/nomogrammer_vignette.html
source("https://raw.githubusercontent.com/achekroud/nomogrammer/master/nomogrammer.r")
library(ggplot2) # instalar
library(scales) # instalar
nomogrammer(Prevalence = .371, Sens=0.846, Spec=0.909)
scen1<-nomogrammer(Prevalence = .371, Sens=0.846, Spec=0.909)
nomogrammer(Prevalence = .371, Sens=0.846, Spec=0.909) + ggtitle("Cenário 1") +
scale_color_manual(values=c("darkgray", "black"))
nomogrammer(Prevalence = .055, Sens=0.846, Spec=0.901) + ggtitle("Cenário 2") +
scale_color_manual(values=c("darkgray", "black"))
* Nota: nomogramas e os IC a seguir também podem ser obtidos em http://araw.mede.uic.edu/cgi-bin/testcalc.pl
6.2.1 Intervalos de confiança - Cenário 1
# IC(LR+)_95% = exp{log(LR+) +/- sqrt(var(LR+))}
a1 <- 0.846 # sensibilidade
a2 <- 0.909 # especificidade
LRp <- a1/(1-a2) # LRp = LR+
v1<-((1-a1)/(65*a1))+((a2)/(110*(1-a2))) # var(LR+) = [(1-a1)/n1+*a1] + [(a2)/(n2+*(1-a2)]
sv1<- sqrt(v1)
ln <-log(LRp)
Lrs<-exp(ln + 1.96*sv1)
Lri<-exp(ln - 1.96*sv1)
cbind(LRp,Lri,Lrs) # (LRp, IC(LR+)) = (LR+, Li(LR+); Ls(LR+))
# IC(p2)_95% = (c2i/(1+c2i); c2s/(1+c2s))
p1<-65/175 # p1 = prevalência
c1<-(p1/(1-p1))
c2<-c1*LRp
p2<-c2/(1+c2) # estimativa pontual de p2 = probabilidade a posteriori
c2i<-c1*Lri
Li<-c2i/(1+c2i)
c2s<-c1*Lrs
Ls<- c2s/(1+c2s)
cbind(p2,Li,Ls) # (p2, IC(p2)) = (p2, Li, Ls)
# IC(LR-)_95% = exp{log(LR-) +/- sqrt(var(LR-))}
a1 <- 0.846 # sensibilidade
a2 <- 0.909 # especificidade
LRm <- (1-a1)/a2 # LRm = LR-
v1<-((a1)/(65*(1-a1)))+((1-a2)/(110*a2)) # var(LR-) = [(a1)/n1+*(1-a1)] + [(1-a2)/(n2+*a2]
sv1<- sqrt(v1)
ln <-log(LRm)
Lrs<-exp(ln + 1.96*sv1)
Lri<-exp(ln - 1.96*sv1)
cbind(LRm,Lri,Lrs) # (LRm, IC(LR-)) = (LR-, Li(LR-); Ls(LR-))
# IC(p2)_95% = (c2i/(1+c2i); c2s/(1+c2s))
p1<-65/175 # p1 = prevalência
c1<-p1/(1-p1)
c2<-c1*LRm
p2<-c2/(1+c2) # estimativa pontual de p2 = probabilidade a posteriori
c2i<-c1*Lri
Li<-c2i/(1+c2i)
c2s<-c1*Lrs
Ls<- c2s/(1+c2s)
cbind(p2,Li,Ls) # (p2, IC(p2)) = (p2, Li, Ls)
# Nota: em http://araw.mede.uic.edu/cgi-bin/testcalc.pl os IC's são fornecidos diretamente nas saídas
6.3 Estatística capa aplicada aos dados dispostos na Tabela 6.4
require(vcd) # instalar o package vcd (http://www.r-project.org)
x<-c(38,5,0,1,33,11,3,0,10,14,5,6,3,7,3,10)
x<-matrix(x,4,4)
Kappa(x)
summary(Kappa(x))
confint(Kappa(x))
confint(Kappa(x), level=0.90)
6.4 Gráfico de concordância (agreement plot)
require(vcd)
x<-c(38,5,0,1,33,11,3,0,10,14,5,6,3,7,3,10)
x<-matrix(x,4,4)
rownames(x) <- c("1","2","3","4")
colnames(x) <- c("1","2","3","4")
x
agreementplot(x, xlab = "Estágios: neurologista 1",
ylab = "Estágios: neurologista 2",
line_col="gray")
Capítulo 7 - Regressão binomial
7.1 Estudo sobre doença coronária versus idade (dados na Tabela 7.1)
resim<-c(1,2,3,5,6,5,13,8)
resnao<-c(9,13,9,10,7,3,4,2)
idade<-c(25,32,38,43,47,53,57,65)
dados<-as.data.frame(cbind(resim,resnao,idade))
dados
attach(dados)
theta<-resim/(resim+resnao)
plot(idade, theta, ylim=range(0,0.9), xlab="Idade", ylab="E(Y|x)", pch=16)
ajust<-glm(cbind(resim,resnao)~idade, family=binomial(link="logit"), data=dados)
ajust
anova(ajust, test="Chisq")
summary(ajust)
cbind(ajust$fitted.values, ajust$y)
ajust$residuals
dev<-residuals(ajust, type='deviance')
dev
QL<-sum(dev^2)
p1<-1-pchisq(QL,6)
cbind(QL,p1)
rpears<-residuals(ajust, type='pearson')
rpears
QP<-sum(rpears^2)
p2<-1-pchisq(QP,6)
cbind(QP,p2)
theta<-resim/(resim+resnao)
plot(idade, theta, ylim=range(0,0.9), xlab="Idade", ylab="E(Y|x)", pch=16)
idade<-20:70
modajust<-(exp(-5.123+0.1058*idade))/(1+exp(-5.123+0.1058*idade))
lines(idade, modajust)
par(mfrow=c(1,2))
plot(rpears, ylab="Resíduos Pearson", pch=16, ylim=c(-2,2))
abline(h=0, lty=3)
plot(dev, ylab="Resíduos deviance", pch=16, ylim=c(-2,2))
abline(h=0, lty=3)
par(mfrow=c(1,1))
ntot<-c(10,15,12,15,13,8,17,10)
fit.model<-ajust
source("http://www.ime.usp.br/~giapaula/envelr_bino")
rm(list=ls())
dados1<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/coronaria.txt",h=T)
attach(dados1) # (dados1 = indivíduos por linha)
# > install.packages("Epi", dependencies=TRUE)
require(Epi)
ROC(form=y~idade, plot="ROC")
7.2 Estudo sobre doença coronária versus sexo e ECG (Tabela 7.7)
resim<-c(4,8,9,21); resnao<-c(11,10,9,6)
sexo<-c(0,0,1,1); ecg<-c(0,1,0,1)
dados<-as.data.frame(cbind(resim, resnao, sexo, ecg))
attach(dados)
ajust1<- glm(cbind(resim,resnao)~sexo+ecg+sexo*ecg, family=binomial(link="logit"), data=dados)
summary(ajust1)
anova(ajust1, test="Chisq")
ajust<-glm(cbind(resim, resnao)~sexo+ecg, family=binomial(link="logit"), data=dados)
summary(ajust)
anova(ajust, test="Chisq")
cbind(ajust$y, ajust$fitted.values, ajust$residuals)
dev<-residuals(ajust, type='deviance'); dev
QL<-sum(dev^2); p1<-1-pchisq(QL,1); cbind(QL,p1)
rpears<-residuals(ajust, type='pearson'); rpears
QP<-sum(rpears^2); p2<-1-pchisq(QP,1); cbind(QP,p2)
7.3 Estudo sobre infecções urinárias (Tabela 7.12)
rm(list=ls())
resim<-c(78,101,68,40,54,34)
resnao<-c(28,11,46,5,5,6)
diag<-c(1,1,1,0,0,0)
trat<-c(1,2,3,1,2,3)
dados<-as.data.frame(cbind(resim, resnao, diag, trat))
attach(dados)
ajust1<-glm(cbind(resim,resnao)~diag+relevel(factor(trat),3)+diag*(relevel(factor(trat),3)),
family=binomial(link="logit"), data=dados)
summary(ajust1)
anova(ajust1, test="Chisq")
ajust2<-glm(cbind(resim,resnao)~diag+relevel(factor(trat),3), family=binomial(link="logit"),
data=dados)
summary(ajust2)
anova(ajust2, test="Chisq")
cbind(ajust2$fitted.values, ajust2$y)
dev<-residuals(ajust2, type='deviance'); dev
QL<-sum(dev^2)
p1<-1-pchisq(QL,2)
cbind(QL,p1)
rpears<-residuals(ajust2, type='pearson'); rpears
QP<-sum(rpears^2)
p2<-1-pchisq(QP,2)
cbind(QP,p2)
par(mfrow=c(1,2))
plot(dev, pch=16, ylim=c(-3,3), ylab="Resíduos deviance")
abline(h=0, lty=3)
plot(rpears, pch=16, ylim=c(-3,3), ylab="Resíduos Pearson")
abline(h=0, lty=3)
par(mfrow=c(1,1))
ntot<-c(106,112,114,45,59,40)
fit.model<-ajust2
source("http://www.ime.usp.br/~giapaula/envelr_bino")
dados1<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/infec.txt",h=T)
# dados1 = arquivo indivíduo por linha (476 x 3)
attach(dados1)
require(Epi)
ROC(form=y~factor(x1)+relevel(factor(x2),3), plot="ROC")
7.4 Estudo sobre bronquite (Tabela 7.18)
brc<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/bronquite.txt",h=T)
attach(brc)
brc
ajust<-glm(cbind(sim, nao)~smk+ses+idade+smk*ses+smk*idade+ses*idade+smk*ses*idade,
family=binomial, data=brc)
anova(ajust, test="Chisq")
ajust<-glm(cbind(sim, nao)~smk+ses+idade+smk*ses+smk*idade+ses*idade, family=binomial, data=brc)
anova(ajust, test="Chisq")
ajust<-glm(cbind(sim, nao)~smk+ses+idade+smk*ses+smk*idade, family=binomial, data=brc)
anova(ajust, test="Chisq")
ajust<-glm(cbind(sim, nao)~smk+ses+idade+smk*idade, family=binomial, data=brc)
anova(ajust, test="Chisq")
ajust<-glm(cbind(sim, nao)~smk+ses+idade+smk*ses+smk*idade, family=binomial, data=brc)
anova(ajust, test="Chisq")
summary(ajust)
cbind(ajust$fitted.values, ajust$y)
dev<-residuals(ajust, type='deviance')
dev
QL<-sum(dev^2)
p1<-1-pchisq(QL,6)
cbind(QL,p1)
rpears<-residuals(ajust, type='pearson')
rpears
QP<-sum(rpears^2)
p2<-1-pchisq(QP,6)
cbind(QP,p2)
par(mfrow=c(1,2))
plot(rpears, pch=16, ylim=c(-0.5,0.5), ylab="Residuos de Pearson")
abline(h=0, lty=3)
plot(dev, pch=16, ylim=c(-0.5,0.5), ylab="Residuos deviance")
abline(h=0, lty=3)
par(mfrow=c(1,1))
ntot<-c(111,134,95,124,173,148,143,112)
fit.model<-ajust
source("http://www.ime.usp.br/~giapaula/envelr_bino")
brc1<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/bronquite1.txt",h=T)
# brc1 = arquivo com 1 indivíduo por linha (1040 x 4)
attach(brc1)
require(Epi)
ROC(form=y~x1+x2+x3+x1*x2+x1*x3, plot="ROC")
# Procedimentos de seleção de variáveis: forward, backward e stepwise
modp<-glm(as.matrix(brc[,c(1,2)])~smk+ses+idade+smk*ses+smk*idade+ses*idade+smk*ses*idade,
family=binomial, data=brc)
mod0<-glm(as.matrix(brc[,c(1,2)])~1, family=binomial, data=brc)
step(mod0, ~smk+ses+idade+smk*ses+smk*idade+ses*idade+smk*ses*idade, direction=c("forward"))
step(modp, ~smk+ses+idade+smk*ses+smk*idade+ses*idade+smk*ses*idade, direction=c("backward"))
step(mod0, ~smk+ses+idade+smk*ses+smk*idade+ses*idade+smk*ses*idade, direction=c("both"))
7.5 Outro estudo sobre doença coronária (Tabela 7.22)
dados<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/chd4.txt",h=T)
dados<-as.data.frame(dados)
attach(dados); head(dados)
ajust1<-glm(cbind(dcnao,dcsim)~sexo+ecg+idade+sexo*ecg+sexo*idade+ecg*idade+sexo*ecg*idade,
family=binomial(link="logit"), data=dados)
summary(ajust1)
anova(ajust1, test="Chisq")
ajust2<-glm(cbind(dcnao,dcsim)~sexo+ecg+idade, family=binomial, data=dados)
summary(ajust2)
anova(ajust2, test="Chisq")
cbind(sexo, ecg, idade, ajust2$fitted.values)
dev<-residuals(ajust2, type='deviance'); dev
rpears<-residuals(ajust2, type='pearson'); rpears
par(mfrow=c(1,2))
plot(rpears, pch=16, ylab="Resíduos de Pearson")
plot(dev, pch=16, ylab="Resíduos deviance")
# Estatística QHL
dados1<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/chd4a.txt", h=T)
attach(dados1)
dados1
ajust2a<-glm(dc~sexo+ecg+idade, family=binomial(link="logit"), data=dados1)
summary(ajust2a)
anova(ajust2a, test="Chisq")
source("https://docs.ufpr.br/~giolo/LivroADC/Funcoes/gof_bino.txt")
gof.bino(ajust2a, grupos=10)
# ou source("http://www.poleto.com/funcoes/gof.bino.txt")
# Autor da função gof.bino: Poleto, F.Z. (http://www.poleto.com)
# QQ-plot com envelope simulado
fit.model<-ajust2a
attach(dados1)
source("https://docs.ufpr.br/~giolo/LivroADC/Funcoes/envel_bino.txt")
# ou > source("http://www.ime.usp.br/~giapaula/envel_bino")
# Nota: use o código envelr.bino.txt para dados com repetições
# Curva ROC
# Opção 1: Instalar o package ROCR (http://www.r-project.org/)
require(ROCR)
pred <- prediction(ajust2a$fitted.values,dc); pred
perf <- performance(pred,"tpr","fpr")
perf # tpr = sensibilidade e fpr = 1 - especificidade
plot(perf); abline(c(0,0),c(1,1),lty=3)
points(0.324,0.756, pch=20, col=2)
area <- performance(pred,"auc"); area
# Opção 2: Instalar o package Epi (http://www.r-project.org/)
ajust2a<-glm(dc~sexo+ecg+idade, family=binomial(link="logit"), data=dados1)
summary(ajust2a)
require(Epi)
ROC(form=dc~sexo+ecg+idade, plot="ROC")
7.6 Modelos para dados binários: links alternativos (Tabela 7.28)
# Ajuste de 4 modelos aos dados de um bioensaio
resim<-c(0,1,4,15,28,29)
resnao<-c(30,29,26,15,2,1)
lnd<-c(0,9.21,16.12,18.42,20.72,23.02)
dados<-as.data.frame(cbind(resim,resnao,lnd))
dados
attach(dados)
ajuste1<-glm(cbind(resim,resnao)~lnd, family=binomial(link="logit"), data=dados)
ajuste1
anova(ajuste1, test="Chisq")
summary(ajuste1)
ajuste2<-glm(cbind(resim,resnao)~lnd, family=binomial(link="probit"), data=dados)
ajuste2
anova(ajuste2, test="Chisq")
summary(ajuste2)
ajuste3<-glm(cbind(resim,resnao)~lnd, family=binomial(link="cloglog"), data=dados)
ajuste3
anova(ajuste3, test="Chisq")
summary(ajuste3)
ajuste4<-glm(cbind(resim,resnao)~lnd, family=binomial(link="cauchit"), data=dados)
ajuste4
anova(ajuste4, test="Chisq")
summary(ajuste4)
# QQ-plot com envelope simulado
par(mfrow=c(1,4))
ntot<-c(30,30,30,30,30,30)
fit.model<-ajuste1
source("http://www.ime.usp.br/~giapaula/envelr_bino")
fit.model<-ajuste2
source("http://www.ime.usp.br/~giapaula/envelr_bino")
fit.model<-ajuste3
source("http://www.ime.usp.br/~giapaula/envelr_bino")
fit.model<-ajuste4
source("http://www.ime.usp.br/~giapaula/envelr_bino")
# ou source("https://docs.ufpr.br/~giolo/LivroADC/Funcoes/envelr_bino.txt")
# Gráfico com as curvas associadas aos modelos ajustados
x<-seq(0,25,0.1)
m1<-exp(-12.863+0.708*x)/(1+exp(-12.863+0.708*x))
m2<-pnorm(-6.244+0.347*x)
m3<-1-exp(-exp(-8.143+0.422*x))
m4<-0.5+(atan(-26.678+1.451*x)/pi) # ou pcauchy(-26.678+1.451*x)
par(mfrow=c(1,1))
plot(lnd,resim/(resim+resnao), pch=16, ylab="Proporção de mortes",
xlab="Ln(diluições)", xlim=c(0,28), ylim=c(0,1.05))
lines(x, m1, lty=2, lwd=2, col=2)
lines(x, m2, lty=3, lwd=2, col=4)
lines(x, m3, lty=6, lwd=2, col=3)
lines(x, m4, lty=1, lwd=2, col=1)
legend(1,0.8, lty=c(2,3,6,1), col=c(2,4,3,1), lwd=2, c("logístico","probito","clog-log","Cauchy"),
bty="n")
lines(c(18.386,18.386),c(0,0.50), lty=3)
lines(c(0,18.386),c(0.50,0.50), lty=3)
legend(17.7,0.55,c("(18.386, 0.5)"), bty="n", cex=0.8)
Capítulo 8 - Regressão multinomial
8.1 Estudo sobre aprendizado (Tabela 8.1) - Modelo logitos categoria de referência (MLCR)
# 8.1.1 Representação gráfica dos dados
par(mfrow=c(1,3))
data<-cbind(P = c(10,17,26)/53, I = c(5,12,50)/67)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","lightgray","white"), ylim=range(c(0,1)),
names.arg = c("Padrão", "Integral"), xlab="Escola 1", ylab="Proporções amostrais",
legend.text = c("Individual", "Grupo", "Sala de aula"),
args.legend = list(x = "topleft", bty="n", cex=1.4))
abline(h=0)
text(bp, c(0.189,0.320,0.491,0.075,0.179,0.746), round(data,3), cex=1.4, pos=3)
data<-cbind(P = c(21,17,26)/64, I = c(16,12,36)/64)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","lightgray","white"), ylim=range(c(0,1)),
names.arg = c("Padrão", "Integral"), xlab="Escola 2", ylab="Proporções amostrais",
legend.text = c("Individual", "Grupo", "Sala de aula"),
args.legend = list(x = "topleft", bty="n", cex=1.4))
abline(h=0)
text(bp, c(0.328,0.266,0.406,0.250,0.187,0.563), round(data,3), cex=1.4, pos=3)
data<-cbind(P = c(15,15,16)/46, I = c(12,12,20)/44)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","lightgray","white"), ylim=range(c(0,1)),
names.arg = c("Padrão", "Integral"), xlab="Escola 3", ylab="Proporções amostrais",
legend.text = c("Individual", "Grupo", "Sala de aula"),
args.legend = list(x = "topleft", bty="n", cex=1.4))
abline(h=0)
text(bp, c(0.326,0.326,0.348,0.273,0.273,0.454), round(data,3), cex=1.4, pos=3)
# 8.1.2 Ajuste dos modelos
# Nota: Instalar o pacote VGAM (http://www.r-project.org/)
require(VGAM)
dados<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/escolas.txt", h=T)
mlcr0<-vglm(cbind(ind,grupo,sala)~1, multinomial, dados)
mlcr0
mlcr1<-vglm(cbind(ind,grupo,sala)~factor(escola), multinomial, dados)
mlcr1
mlcr2<-vglm(cbind(ind,grupo,sala)~factor(escola)+factor(periodo), multinomial, dados)
mlcr2
mlcr3<-vglm(cbind(ind,grupo,sala)~factor(escola)+factor(periodo)+factor(escola)*factor(periodo),
multinomial, dados)
mlcr3
AIC(mlcr0)
AIC(mlcr1)
AIC(mlcr2)
AIC(mlcr3)
# Nota: (a) modelo com interação = modelo saturado, logo deviance residual = 0
# (b) função anova não está disponível em vglm( ); construir a partir das saídas.
deviance(mlcr2)
df.residual(mlcr2)
summary(mlcr2)
coef(mlcr2, matrix=TRUE)
mlcr2@y
fitted(mlcr2)
mlcr2@y - fitted(mlcr2)
par(mfrow=c(1,2))
rp<-resid(mlcr2, type = "pearson")
plot(rp[,1], pch=16, ylim=c(-3,3), xlab="Índice", ylab="Resíduos de Pearson")
title("Logito 1")
abline(h=0, lty=3)
plot(rp[,2], pch=20, ylim=c(-3,3), xlab="Índice", ylab="Resíduos de Pearson")
abline(h=0, lty=3)
title("Logito 2")
8.2 Estudo sobre artrite (Tabela 8.6) - Modelo logitos cumulativos (MLC)
# 8.2.1 Representação gráfica dos dados
par(mfrow=c(1,2))
data<-cbind(P = c(16,5,6)/27, I = c(6,7,19)/32)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","lightgray", "white"), ylim=range(c(0,1.1)),
names.arg = c("Tratamento A", "Placebo"), xlab="Feminino", ylab="proporções amostrais",
legend.text = c("Acentuada", "Alguma", "Nenhuma"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp,c(16/27, 5/27, 6/27, 6/32, 7/32, 19/32), round(data,3), cex=1.2, pos=3)
data<-cbind(P = c(5,2,7)/14, I = c(1,1,9)/11)
bp<- barplot(height = data, beside = TRUE,
col = c("gray","lightgray", "white"), ylim=range(c(0,1.1)),
names.arg = c("Tratamento A", "Placebo"), xlab="Masculino", ylab="proporções amostrais",
legend.text = c("Acentuada", "Alguma", "Nenhuma"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp,c(5/14, 2/14, 7/14, 1/11, 1/11, 9/11), round(data,3), cex=1.2, pos=3)
# 8.2.2 Ajuste e seleção de modelos
# (a) Suposição de chances proporcionais: observação das estimativas
require(VGAM)
dados<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/artrite.txt", h=T)
mlc<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=FALSE,reverse=FALSE), dados)
mop<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=TRUE, reverse=FALSE), dados)
coef(mlc, matrix = TRUE)
coef(mop, matrix = TRUE)
# Nota: inclua a opção link para utilizar outra função de ligação (que não a logito). Isto é,
# cumulative(parallel = T, reverse = F, link = "probit")
# (b) Suposição de chances proporcionais: teste da razão de verossimilhanças
## Modelo com X1 e X2 (sexo e tratamento)
mop<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=T,reverse=F), dados)
mlc<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=F,reverse=F), dados)
TRV<- 2*(logLik(mlc)-logLik(mop))
gl <- length(coef(mlc))-length(coef(mop)); p<-1-pchisq(TRV,gl)
cbind(TRV, gl, p)
## ou equivalentemente
TRV<- deviance(mop)-deviance(mlc)
gl <- df.residual(mop)-df.residual(mlc)
p <- 1-pchisq(TRV,gl)
cbind(TRV, gl, p)
# Modelo com X1 (sexo)
mop<-vglm(cbind(ac,alg,nenh)~factor(sexo), cumulative(parallel=T,reverse=F), dados)
mlc<-vglm(cbind(ac,alg,nenh)~factor(sexo), cumulative(parallel=F,reverse=F), dados)
TRV<-2*(logLik(mlc)-logLik(mop)); gl<-length(coef(mlc))-length(coef(mop))
p<-1-pchisq(TRV,gl)
cbind(TRV, gl, p)
# Modelo com X2 (tratamento)
mop<-vglm(cbind(ac,alg,nenh)~factor(trat), cumulative(parallel=T,reverse=F), dados)
mlc<-vglm(cbind(ac,alg,nenh)~factor(trat), cumulative(parallel=F,reverse=F), dados)
TRV<-2*(logLik(mlc)-logLik(mop)); gl<-length(coef(mlc))-length(coef(mop))
p<-1-pchisq(TRV,gl)
cbind(TRV, gl, p)
#### Escolha: MOP ####
mop0<-vglm(cbind(ac,alg,nenh)~1, cumulative(parallel=T,reverse=F), dados)
mop0
mop1<-vglm(cbind(ac,alg,nenh)~factor(sexo), cumulative(parallel=T,reverse=F), dados)
mop1
mop2<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=T,reverse=F), dados)
mop2
mop3<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat)+factor(sexo)*factor(trat),
cumulative(parallel=T,reverse=F), dados)
mop3
AIC(mop0)
AIC(mop1)
AIC(mop2)
AIC(mop3)
TRV<- deviance(mop2)-deviance(mop3)
gl <- df.residual(mop2)-df.residual(mop3)
p <- 1-pchisq(TRV,gl)
cbind(TRV, gl, p)
TRV<- deviance(mop0)-deviance(mop1)
gl <- df.residual(mop0)-df.residual(mop1)
p <- 1-pchisq(TRV,gl)
cbind(TRV, gl, p)
TRV<- deviance(mop1)-deviance(mop2)
gl <- df.residual(mop1)-df.residual(mop2)
p <- 1-pchisq(TRV,gl)
cbind(TRV, gl, p)
# 8.2.3 MOP selecionado: com X1 e X2
mop2<-vglm(cbind(ac,alg,nenh)~factor(sexo)+factor(trat), cumulative(parallel=T,reverse=F), dados)
summary(mop2)
coef(mop2,matrix = TRUE)
mop2@y
fitted(mop2)
mop2@y - fitted(mop2)
QL<-deviance(mop2); QL
1-pchisq(QL,4)
rp<-residuals(mop2, type="pearson")
Qp<-sum(rp[,1]^2) + sum(rp[,2]^2)
Qp
1-pchisq(Qp,4)
rp<-resid(mop2, type = "pearson")
plot(1:4,rp[,1], pch=20, ylim=c(-3,3), xlim=c(1,8), xlab="Índice", ylab="Resíduos de Pearson")
points(5:8, rp[,2], pch=20)
abline(h=0, lty=3)
8.3 Estudo sobre tratamentos para artrite (Tabela 8.12) - Modelo logitos categorias adjacentes (MLCA)
# Representação gráfica dos dados
par(mfrow=c(1,2))
data<-cbind(M = c(25,30,46,27)/128, F = c(7,15,35,13)/70)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(4), ylim=range(c(0,1)),
names.arg = c("Masculino", "Feminino"), xlab="Tratamento A", ylab="Proporções amostrais",
legend.text = c("Remissão total", "Remissão parcial", "Nenhuma mudança", "Progressão da doença"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(25/128,30/128,46/128,27/128, 7/70,15/70,35/70,13/70), round(data, 3),cex=1.2, pos=3)
data<-cbind(M = c(20,19,44,42)/125, F = c(8,10,21,36)/75)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(4), ylim=range(c(0,1)),
names.arg = c("Masculino", "Feminino"), xlab="Tratamento B", ylab="Proporções amostrais",
legend.text = c("Remissão total", "Remissão parcial", "Nenhuma mudança", "Progressão da doença"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(20/125, 19/125, 44/125, 42/125, 8/75, 10/75,21/75,36/75), round(data, 3), cex=1.2, pos=3)
dev.copy2eps(file="Figura85.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
# Ajuste e seleção de modelos
require(VGAM)
dados<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/trat_ar.txt", h=T)
attach(dados)
dados
mca1<-vglm(cbind(rt,rp,nm,pd)~ factor(trat)+factor(sexo), family=acat(reverse=T,parallel=T), dados)
mca2<-vglm(cbind(rt,rp,nm,pd)~ factor(trat)+factor(sexo), family=acat(reverse=T,parallel=F), dados)
coef(mca1, matrix = TRUE)
coef(mca2, matrix = TRUE)
TRV<- deviance(mca1)-deviance(mca2)
gl <- df.residual(mca1)-df.residual(mca2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# Modelo com X1 (tratamento)
mca1<-vglm(cbind(rt,rp,nm,pd)~factor(trat), acat(parallel=T,reverse=T), dados)
mca2<-vglm(cbind(rt,rp,nm,pd)~factor(trat), acat(parallel=F,reverse=T), dados)
TRV<- deviance(mca1)-deviance(mca2)
gl <- df.residual(mca1)-df.residual(mca2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# Modelo com X2 (sexo)
mca1<-vglm(cbind(rt,rp,nm,pd)~factor(sexo), acat(parallel=T,reverse=T), dados)
mca2<-vglm(cbind(rt,rp,nm,pd)~factor(sexo), acat(parallel=F,reverse=T), dados)
TRV<- deviance(mca1)-deviance(mca2)
gl <- df.residual(mca1)-df.residual(mca2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# MLCA com chances proporcionais parciais (X2 com chances proporcionais e X1 não)
mca0<-vglm(cbind(rt,rp,nm,pd)~1, acat(parallel=F~factor(trat),reverse=T), dados)
AIC(mca0)
mca0
mca1<-vglm(cbind(rt,rp,nm,pd)~factor(trat), acat(parallel=F~factor(trat),reverse=T), dados)
mca1
AIC(mca1)
mca2<-vglm(cbind(rt,rp,nm,pd)~factor(trat)+factor(sexo), acat(parallel=F~factor(trat),reverse=T), dados)
AIC(mca2)
mca2
mca3<-vglm(cbind(rt,rp,nm,pd)~factor(trat)+factor(sexo)+factor(trat)*factor(sexo),
acat(parallel= F~factor(trat),reverse=T), dados)
AIC(mca3)
mca3
# Selecionado: MLCA com chances proporcionais parciais (X2 com chances proporcionais e X1 não)
summary(mca2)
coef(mca2,matrix = TRUE)
mca2@y
fitted(mca2)
mca2@y - fitted(mca2)
rp<-resid(mca2, type = "pearson")
Qp<-sum(rp[,1]^2) + sum(rp[,2]^2)+ sum(rp[,3]^2)
cbind(Qp,1-pchisq(Qp,5))
QL<-deviance(mca2)
cbind(QL,1-pchisq(QL,5))
par(mfrow=c(1,2))
rb<- mca2@y - fitted(mca2)
plot(rb[1,],ylim=c(-0.4,0.4),xlim=c(1,16),xlab="Índice",ylab="Probabilidade observada - predita",pch=16)
points(5:8, rb[2,], pch=16); points(9:12,rb[3,], pch=16)
points(13:16, rb[4,], pch=16)
abline(h=0, lty=3)
title("(a)")
rp<-resid(mca2, type = "pearson")
plot(1:4,rp[,1], pch=16, ylim=c(-3,3),xlim=c(1,12), xlab="Índice", ylab="Resíduos de Pearson")
points(5:8, rp[,2], pch=16)
points(9:12, rp[,3], pch=16)
abline(h=0, lty=3)
title("(b)")
8.4 Estudo sobre métodos de analgesia (Tabela 8.17) - Modelo logitos razão contínua (MLRC)
# Representação gráfica dos dados
par(mfrow=c(1,2))
data<-cbind(A = c(9,19,21,81,537)/667, B = c(17,33,37,134,445)/666)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(5), ylim=range(c(0,1)),
names.arg = c("Método A", "Método B"), xlab="Feminino", ylab="Proporções amostrais",
legend.text = c("Intolerável", "Intensa", "Moderada", "Fraca", "Ausente"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(9/667,19/667,21/667,81/667,537/667, 17/666,33/666,37/666,134/666,445/666),
round(data, 3), cex=1, pos=3)
data<-cbind(M = c(6,9,13,53,586)/667, F = c(12,16,25,86,528)/667)
bp<- barplot(height = data,
beside = TRUE,
col=gray.colors(5), ylim=range(c(0,1)),
names.arg = c("Método A", "Método B"), xlab="Masculino", ylab="Proporções amostrais",
legend.text = c("Intolerável", "Intensa", "Moderada", "Fraca", "Ausente"),
args.legend = list(x = "topleft", bty="n", cex=1.2))
abline(h=0)
text(bp, c(6/667,9/667,13/667,53/667,586/667, 12/667,16/667,25/667,86/667,528/667),
round(data, 3), cex=1, pos=3)
dev.copy2eps(file="Figura87g.eps", horizontal=FALSE, pointsize=12, family="Helvetica", colormodel="gray")
# Ajuste e seleção de modelos
require(VGAM)
dados<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/analgesia.txt", h=T)
attach(dados)
dados
mrc1<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo)+factor(met), family=cratio(reverse=F,parallel=T), dados)
mrc2<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo)+factor(met), family=cratio(reverse=F,parallel=F), dados)
coef(mrc1, matrix = TRUE)
coef(mrc2, matrix = TRUE)
TRV<- deviance(mrc1)-deviance(mrc2)
gl <- df.residual(mrc1)-df.residual(mrc2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# Modelo com X1 (sexo)
mrc1<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo), cratio(parallel=T,reverse=F), dados)
mrc2<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo), cratio(parallel=F,reverse=F), dados)
TRV<- deviance(mrc1)-deviance(mrc2)
gl <- df.residual(mrc1)-df.residual(mrc2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# Modelo com X2 (métodos de analgesia)
mrc1<-vglm(cbind(y1,y2,y3,y4,y5)~factor(met), cratio(parallel=T,reverse=F), dados)
mrc2<-vglm(cbind(y1,y2,y3,y4,y5)~factor(met), cratio(parallel=F,reverse=F), dados)
TRV<- deviance(mrc1)-deviance(mrc2)
gl <- df.residual(mrc1)-df.residual(mrc2)
p <- 1-pchisq(TRV,gl); cbind(TRV, gl, p)
# Modelo com X1 e X2 com chances proporcionais de ambas
mrc0<-vglm(cbind(y1,y2,y3,y4,y5)~1, cratio(parallel=T,reverse=F), dados)
mrc0
mrc1<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo),cratio(parallel=T,reverse=F), dados)
mrc1
mrc2<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo)+factor(met), cratio(parallel=T,reverse=F), dados)
mrc2
mrc3<-vglm(cbind(y1,y2,y3,y4,y5)~factor(sexo)+factor(met)+factor(sexo)*factor(met),
cratio(parallel=T,reverse=F), dados)
mrc3
AIC(mrc0)
AIC(mrc1)
AIC(mrc2)
AIC(mrc3)
# Selecionado: modelo com X1 e X2 com chances proporcionais de ambas
summary(mrc2)
coef(mrc2,matrix = TRUE)
mrc2@y
fitted(mrc2)
mrc2@y - fitted(mrc2)
rp<-resid(mrc2, type = "pearson")
Qp<-sum(rp^2)
cbind(Qp,1-pchisq(Qp,10))
QL<-deviance(mrc2)
cbind(QL,1-pchisq(QL,10))
par(mfrow=c(1,2))
rb<- mrc2@y - fitted(mrc2)
plot(1:5,rb[1,], pch=20, ylim=c(-0.05,0.05), xlim=c(1,20), xlab="Índice",
ylab="Probabilidade observada - predita")
points(6:10, rb[2,], pch=20)
points(11:15, rb[3,], pch=20)
points(16:20, rb[4,], pch=20)
abline(h=0, lty=3)
title("(a)")
rp<-resid(mrc2, type = "pearson")
plot(1:4,rp[1,], pch=20, ylim=c(-3,3),xlim=c(1,16), xlab="Índice", ylab="Resíduos de Pearson")
points(5:8, rp[2,], pch=20)
points(9:12, rp[3,], pch=20)
points(13:16,rp[4,], pch=20)
abline(h=0, lty=3)
title("(b)")
Capítulo 9 - Regressão logística condicional
9.1 Ensaio clínico multicentros (arquivo de dados: skin.txt)
rm(list=ls())
skin<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/skin.txt", h=T)
attach(skin)
require(survival)
model1<-clogit(melhora~trat+sexo+idade+grauini+strata(clinica))
model1
summary(model1)
par(mfrow=c(1,1))
plot(model1$residuals, pch=16)
model2<-clogit(melhora~trat+grauini+strata(clinica))
model2
summary(model2)
plot(model2$residuals, pch=16, ylab="residuos", xlab="i")
# ou equivalentemente
time<-rep(1,158)
model2<-coxph(Surv(time,melhora)~trat+grauini+strata(clinica), method="exact")
summary(model2)
anova(model2)
9.2 Estudo cruzado de dois períodos (arquivo de dados: cross4.txt)
cross<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/cross4.txt", h=T)
attach(cross)
require(survival)
model1<-clogit(resp~periodo+drogaA+drogaB+gpidade+resA+resB+strata(obs), data=cross)
model1
summary(model1)
plot(model1$residuals, pch=16)
model2<-clogit(resp~periodo+drogaA+drogaB+gpidade+strata(obs), data=cross)
model2
summary(model2)
plot(model2$residuals, pch=16)
model3<-clogit(resp~periodo+drogaA+drogaB+strata(obs), data=cross)
model3
summary(model3)
# Testando H0: gama_1 = gama_2
model3$var
vardif<-model3$var[2,2] + model3$var[3,3] - 2*(model3$var[2,3])
teste<-((1.408-0.296)/sqrt(vardif))^2
p<-1-pchisq(teste,1)
cbind(teste, p)
9.3 Estudo caso-controle (arquivo de dados: match.txt)
match<-read.table("https://docs.ufpr.br/~giolo/LivroADC/Dados/match.txt", h=T)
attach(match)
require(survival)
model1<-clogit(cc~hvb+est+hip+strata(par), data=match)
model1
model2<-clogit(cc~hvb+est+strata(par), data=match)
model2
summary(model2)
plot(model2$residuals, pch=16)