Gen y Metástasis. Una genetista cree haber localizado un gen que controla la extensión o metástasis de cáncer de pecho. Analizó la presencia o ausencia del gen en células de 15 pacientes con metástasis y en 10 pacientes con el cáncer localizado. En las 15 primeras observó que en 5 de ellas el gen estaba presente, estando ausente en las 10 restantes. En el segundo grupo de 10 observó la presencia del gen en sólo una de las pacientes. ¿Es correcta su creencia? (Pawitan, 78, 284) > n <- 15 ### pacientes con metastasis > x <- 5 ### gen presente > m <- 10 ### pacientes sin metastasis > y <- 1 ### gen presente > px <- x/n ### proporción de gen presente con metástasis > py <- y/m ### proporción de gen presente sin metástasis > > > > > ### tgen: la tabla 2x2 ### tgen <- as.table( matrix(c(x, y, n-x, m-y), 2, 2, byrow=T) ) rownames(tgen) <- c("gen presente", "ausente") colnames(tgen) <- c("metástasis", "localizado") tgen gen presente ausente metástasis localizado 5 1 10 9 > ### test de Fisher de un lado para contrastar la homogeneidad ### > fisher.test( tgen, alternative="g" ) Fisher's Exact Test for Count Data data: tgen p-value = 0.1978 alternative hypothesis: true odds ratio is greater than 1 95 percent confidence interval: 0.4886701 Inf sample estimates: odds ratio 4.261461 Con los resultados obtenidos no es posible rechazar la hipótesis de homogeneidad (OR=1) en favor de la hipótesis de una mayor proporción en los casos con metástasis (OR>1). Lo que sigue no permite concluir nada diferente. Se trata solo de “jugar” con diferentes elementos de la estimación general de parámetros de un modelo. Reparametrización de la logverosimilitud (producto de dos binomiales) en términos de delta=log(OR) y tita=logODDS de py > > + + ### logverosimilitud de delta=log(OR) y tita=logODDS de py ### lv <- function(delta, tita) { tita*(x+y) + delta*x - n*log(1+exp(tita+delta)) - m*log(1+exp(tita)) } > > > > ### EMV´s directos de delta=log(OR), de la OR y de tita=logODDS de y d.emv <- log(x*(m-y) / (y*(n-x))) OR <- exp(d.emv) t.emv <- log( y/(m-y) ) > ### Las varianzas asintóticas de los EMV, calculables con metodo delta ### > var.t <- (1/y)+(1/(m-y)) > var.d <- (1/x)+(1/(n-x))+(1/y)+(1/(m-y)) 1 > se.t <- sqrt(var.t) ### errores estándar de los EMV > se.d <- sqrt(var.d) > se.OR <- se.d*exp(d.emv) > cbind(px, py, t.emv, se.t, d.emv, se.d, OR, se.OR) px py t.emv se.t d.emv se.d OR se.OR [1,] 0.3333333 0.1 -2.197225 1.054093 1.504077 1.187902 4.5 5.345559 > ### contour plot de la logverosimilitud de (delta, tita) ### > dd <- seq(-1, 5, length=200) > tt <- seq(-6, 0, length=200) > ### logveros normada en la malla de valores (dd, tt) ### > lv.ddtt <- outer(dd, tt, lv) - lv(d.emv, t.emv) > > > > alfa <- c( 0.1, 0.3, 0.5, 0.7, 0.9) niveles <- c( -qchisq(1-alfa, 2) / 2 ) etiq.niveles <- c("90", "70", "50", "30", "10") ### el contorno 90 es una RC del 90% basada en la verosimilitud ### > + + > > contour(dd, tt, lv.ddtt, levels=niveles, label=etiq.niveles, lwd=1.5, xlab="delta: log(OR)", ylab="tita: logODDS de py", main="logverosimilitud normada", cex.main=0.9) abline( v=0, lty=2 ) abline(h=t.emv, v=d.emv, lty=3) > ### obtencion de los EMV y su covarianza asintótica con nlm ### > ### función logveros (con signo “menos”) para minimizar con nlm > lvneg <- function(pp) { -lv(pp[1], pp[2]) } > pp <- c(0, 0) ### valores iniciales > emv.nlm <- nlm(lvneg, pp, hessian=T) > dt.emv <- emv.nlm$estimate ### vector de EMV de (delta, tita) > d2.emv <- dt.emv[1] ### coincide con d.emv > t2.emv <- dt.emv[2] ### coincide con t.emv > iobs <- emv.nlm$hessian ### Info. obs. (ya lleva el signo menos en lvneg) > dt.cov <- solve(iobs) > ### covarianzas asintóticas estimadas del EMV ### > dt.cov [,1] [,2] [1,] 1.410992 -1.111016 [2,] -1.111016 1.111025 > var.d2 <- dt.cov[1,1] ### varianzas asintóticas estimadas > var.t2 <- dt.cov[2,2] > se.d2 <- sqrt(var.d2) ### errores estándar > se.t2 <- sqrt(var.t2) > cbind( px, py, d2.emv, se.d2, t2.emv, se.t2 ) px py d2.emv se.d2 t2.emv se.t2 [1,] 0.3333333 0.1 1.504078 1.187852 -2.197227 1.054052 2 Se puede comprobar que los resultados obtenidos con la aplicación de nlm a la logverosimilitud son idénticos a los obtenidos anteriormente de forma directa. > > > > > > ### IC´s de Wald para delta, para tita alfa <- 0.1; confianza <- 1-alfa; zz <- qnorm(1-alfa/2) W.d.inf <- d2.emv - zz*se.d2; W.d.sup W.t.inf <- t2.emv - zz*se.t2; W.t.sup W.OR.inf <- exp(W.d.inf); W.OR.sup <- y para la OR ### <- d2.emv + zz*se.d2 <- t2.emv + zz*se.t2 exp(W.d.sup) > cbind( W.d.inf, W.d.sup, W.t.inf, W.t.sup, confianza ) W.d.inf W.d.sup W.t.inf W.t.sup confianza [1,] -0.4497635 3.45792 -3.930988 -0.463467 0.9 > cbind( OR, W.OR.inf, W.OR.sup, confianza ) OR W.OR.inf W.OR.sup confianza [1,] 4.5 0.637779 31.75087 0.9 > ### logverosimilitud perfil de delta ### > ### lv.t verosimilitud normada de tita para delta fijado ### > lv.t <- function(x) { lv(delta, x) - lv(d.emv, t.emv) } > tmax <- NULL ### puntos tita de máxima verosimilitud para cada delta ### > lv.perfil <- NULL ### valores de la logveros máxima para cada delta ### > + + + + + for( i in 1:length(dd) ) { delta <- dd[i] aux <- optimize( lv.t, lower=-6, upper=0, maximum=T ) tmax[i] <- aux$maximum lv.perfil[i] <- aux$objective } > ### anadimos la línea donde está definida la veros. perfil de delta ### > lines( dd, tmax, lty=2 ) > > > + > > ### gráfico con la logveros perfil normada de delta ### x11() plot( dd, lv.perfil, type="l", xlab="delta: log(OR)", lwd=2, main="logVerosimilitud Perfil normada de log(OR) e IC´s del 90%", cex.main=0.9 ) abline( v=0, lty=2 ) abline( v=d.emv, lty=3 ) > c.ic90 <- -qchisq(0.9, 1)/2 ### constante para obtener el IC verosperfil > abline( h=c.ic90, lty=3) > ### a1, a2, dd1 y dd2 son auxiliares para calcular ### > ### el punto aprox. de corte de c.ic90 con la logveros perfil ### > a1 <- abs(lv.perfil-c.ic90)[1:(length(dd)/2)] > a2 <- abs(lv.perfil-c.ic90)[(length(dd)/2):length(dd)] > dd1 <- dd[1:(length(dd)/2)] > dd2 <- dd[(length(dd)/2):length(dd)] > Vperfil.d.inf <- dd1[a1==min(a1)] ### extremos del IC veros perfil de delta > Vperfil.d.sup <- dd2[a2==min(a2)] 3 > abline( v=c(Vperfil.d.inf, Vperfil.d.sup), lty=3 ) > rug(c(W.d.inf, W.d.sup)) > ### estimación de delta=log(OR) ### > cbind( d.emv, se.d, Vperfil.d.inf, Vperfil.d.sup ) d.emv se.d Vperfil.d.inf Vperfil.d.sup confianza [1,] 1.504077 1.187902 -0.2462312 3.914573 0.9 > ### estimación de la OR basada en la verosimiltud perfil### > cbind( OR, exp(Vperfil.d.inf), exp(Vperfil.d.sup ) ) OR confianza [1,] 4.5 0.7817415 50.12766 0.9 > ### logverosimilitud condicional de delta=log(OR) ### > txy <- x+y > a <- c( 0:txy ) > dhg1 <- dhyper( x, n, m, txy ) ### del numerador de la prob. condicional > dhg2 <- dhyper( a, n, m, txy ) ### sumandos del denominador de la prob. Condicional > # dd <- seq( 1, 2, length=500 ) ### "afinando" en la estimación de ORc > lvc <- NULL > + + + + for( i in 1:length(dd) ) { ### probabilidad condicional hipergeometrica pxhg <- dhg1*exp(dd[i]*x) pxsumhg <- dhg2*exp(dd[i]*a) lvc[i] <- log( pxhg / sum(pxsumhg) ) } > lvc <- lvc - max(lvc) ### logveros condicional normada > lines( dd, lvc, lty=3 ) > dd[lvc==max(lvc)] ### Estimador condicional de delta [1] 1.442211 > ORc <- exp( dd[lvc==max(lvc)] ) ### OR condicional aproximada > ORc [1] 4.230038 ### 4.26 si usamos una malla más fina de valores dd > # dd[lv.perfil==max(lv.perfil)] ### EMV de delta aproximado 4 -3 -6 -5 -4 tita: logODDS de py -2 -1 0 logverosimilitud normada -1 0 1 2 3 4 5 -1.5 -2.0 -2.5 logVeros. Condicional (línea de trazos) -3.0 lv.perfil -1.0 -0.5 0.0 delta: log(OR) logVerosimilitud Perfil normada de log(OR) e IC´s del 90% -1 0 1 2 delta: log(OR) 3 4 5 5 ####################################################### El caso extremo y=0 > > > > > > n <- 15 ### pacientes con metastasis x <- 5 ### gen presente m <- 10 ### pacientes sin metastasis y <- 0 ### gen presente px <- x/n py <- y/m > > > > > ### tgen: la tabla 2x2 ### tgen <- as.table( matrix(c(x, y, n-x, m-y), 2, 2, byrow=T) ) rownames(tgen) <- c("gen presente", "ausente") colnames(tgen) <- c("metástasis", "localizado") tgen metástasis localizado gen presente 5 0 ausente 10 10 > ### test de Fisher de un lado para contrastar la homogeneidad ### > fisher.test( tgen, alternative="g" ) Fisher's Exact Test for Count Data data: tgen p-value = 0.05652 alternative hypothesis: true odds ratio is greater than 1 95 percent confidence interval: 0.9414015 Inf sample estimates: odds ratio Inf > > + + ### logverosimilitud de delta=log(OR) y tita=logODDS de py ### lv <- function(delta, tita) { tita*(x+y) + delta*x - n*log(1+exp(tita+delta)) - m*log(1+exp(tita)) } > ### contour plot de la logverosimilitud de (delta, tita) ### > dd <- seq(-1, 5, length=200) > tt <- seq(-6, 0, length=200) > ### logveros normada en la malla de valores (dd, tt) ### > lv.ddtt <- outer(dd, tt, lv) - lv(d.emv, t.emv) > > > > alfa <- c( 0.1, 0.3, 0.5, 0.7, 0.9) niveles <- c( -qchisq(1-alfa, 2) / 2 ) etiq.niveles <- c("90", "70", "50", "30", "10") ### el contorno 90 es una RC del 90% basada en la verosimilitud ### > contour(dd, tt, lv.ddtt, levels=niveles, label=etiq.niveles, lwd=1.5, + xlab="delta: log(OR)", ylab="tita: logODDS de py", + main="logverosimilitud normada (y=0)", cex.main=0.9) > ######################################## > ### logverosimilitud perfil de delta ### > ### lv.t verosimilitud normada de tita para delta fijado ### > lv.t <- function(x) { lv(delta, x) } > tmax <- NULL ### puntos tita de máxima verosimilitud para cada delta ### > lv.perfil <- NULL ### valores de la logveros máxima para cada delta ### > for( i in 1:length(dd) ) { + delta <- dd[i] 6 + + + + aux <- optimize( lv.t, lower=-6, upper=0, maximum=T ) tmax[i] <- aux$maximum lv.perfil[i] <- aux$objective } > ### anadimos la línea donde está definida la veros. perfil de delta ### > lines( dd, tmax, lty=2 ) > > > + ### gráfico con la logveros perfil normada de delta ### x11() plot( dd, lv.perfil-max(lv.perfil), type="l", xlab="delta: log(OR)", lwd=2, main="logVerosimilitud Perfil normada de log(OR) (y=0)", cex.main=0.9 ) > c.ic95 <- -qchisq(0.95, 1)/2 ### constante para obtener el IC verosperfil > abline( h=c.ic95, lty=3) > abline( v=0, lty=3 ) > ### gráfico con la veros perfil normada de delta ### > x11() > plot( dd, exp(lv.perfil)/exp(max(lv.perfil)), type="l", xlab="delta: log(OR)", lwd=2, + main="Verosimilitud Perfil normada de log(OR) (y=0)", cex.main=0.9 ) > c.ic95 <- exp(-qchisq(0.95, 1)/2) ### constante para obtener el IC verosperfil > abline( h=c.ic95, lty=3) > abline( v=0, lty=3 ) -3 -4 -5 -6 tita: logODDS de py -2 -1 0 logverosimilitud normada (y=0) -1 0 1 2 3 4 5 delta: log(OR) 7 -2 -3 -5 -4 lv.perfil - max(lv.perfil) -1 0 logVerosimilitud Perfil normada de log(OR) (y=0) -1 0 1 2 3 4 5 delta: log(OR) 0.6 0.4 0.2 0.0 exp(lv.perfil)/exp(max(lv.perfil)) 0.8 1.0 Verosimilitud Perfil normada de log(OR) (y=0) -1 0 1 2 3 4 5 delta: log(OR) 8 Aplicación de SAS options linesize = 80 pagesize = 500; proc format; value Gen 0='presente' 1='ausente'; proc format; value metas 0='metástasis' 1='localizado'; data A; do Gen = 0 to 1; do Metastasis = 0 to 1; input frecu @@; output; end; end; cards; 5 1 10 9 ; proc freq data=A; format Gen Gen. Metastasis metas.; weight frecu; tables Gen*Metastasis; exact chisq OR; title ¿gen y extensión de cáncer?; run; ¿gen y extensión de cáncer? Procedimiento FREQ Tabla de Gen por Metastasis Gen Metastasis Frecuencia‚ Porcentaje‚ Pct fila ‚ Pct col ‚metástas‚localiza‚ Total ‚is ‚do ‚ ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ presente ‚ 5 ‚ 1 ‚ 6 ‚ 20.00 ‚ 4.00 ‚ 24.00 ‚ 83.33 ‚ 16.67 ‚ ‚ 33.33 ‚ 10.00 ‚ ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ ausente ‚ 10 ‚ 9 ‚ 19 ‚ 40.00 ‚ 36.00 ‚ 76.00 ‚ 52.63 ‚ 47.37 ‚ ‚ 66.67 ‚ 90.00 ‚ ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ Total 15 10 25 60.00 40.00 100.00 Estadísticos para la tabla de Gen por Metastasis Estadístico DF Valor Prob ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Chi-cuadrado 1 1.7909 0.1808 Chi-cuadrado de ratio de verosimilitud 1 1.9569 0.1618 Chi-cuadrado adj. de continuidad 1 0.7401 0.3896 Chi-cuadrado Mantel-Haenszel 1 1.7193 0.1898 Coeficiente Phi 0.2677 Coeficiente de contingencia 0.2586 V de Cramer 0.2677 9 Warning: 50% de las celdas tienen un conteo menor que 5.; Puede que chi-cuadrado (Asintótico) no sea un test válido. Test chi-cuadrado de Pearson ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Chi-cuadrado 1.7909 DF 1 Pr asintótico > ChiSq 0.1808 Exacto Pr >= ChiSq 0.3449 Test chi-cuadrado de ratio de verosimilitud ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Chi-cuadrado 1.9569 DF 1 Pr asintótico > ChiSq 0.1618 Exacto Pr >= ChiSq 0.3449 Test chi-cuadrado de Mantel-Haenszel ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Chi-cuadrado 1.7193 DF 1 Pr asintótico > ChiSq 0.1898 Exacto Pr >= ChiSq 0.3449 Test exacto de Fisher ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Celda (1,1) Frecuencia (F) 5 Alineado a la izquierda Pr <= F 0.9717 Alineado a la derecha Pr >= F 0.1978 Tabla de probabilidad (P) De dos caras Pr <= P 0.1696 0.3449 Estimadores de riesgo relativo (fila1/fila2) Tipo de estudio Valor 95% Límites de confianza ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Control-caso (Ratio de probabilidad) 4.5000 0.4386 46.1696 Cohort (Riesgo Col1) 1.5833 0.9073 2.7630 Cohort (Riesgo Col2) 0.3519 0.0553 2.2397 Ratio de probabilidad (Estudio de control de caso) ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ Ratio de probabilidad 4.5000 Lím. de confianza asintóticos 95% Límite conf. inferior 95% Límite conf. superior Límites conf. exactos 95% Límite conf. inferior 95% Límite conf. superior 0.4386 46.1696 0.3687 236.0355 Tamaño de la muestra = 25 10