1 Gen y Metástasis. Una genetista cree haber localizado un gen que

Anuncio
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
Descargar