1 Método de scoring. Ejercicio trivial para la obtención del EMV de p

Anuncio
Método de scoring. Ejercicio trivial para la obtención del EMV de p en una binomial,
observados a=57 éxitos y b=482 fallos.
> a <- 57
> b <- 482
EMV de p
> pe <- a/(a + b)
Logverosimilitud de p:
> logL <- function( p ) { a*log( p ) + b*log( 1-p ) }
Score de p:
> dlogL <- function( p ) { a/p - b/(1-p) } ### función score
> d2logL <- function( p ) { -a/p^2 - b/(1-p)^2 }
Información observada:
> Iobs <- function( p ) { -d2logL( p ) }
Error estándar del EMV de p:
> se.pe <- sqrt( 1 / Iobs( pe ) )
> options( digits=4 )
> cbind(pe, se.pe)
pe
se.pe
[1,] 0.1058 0.01325
Algoritmo SCORING (Newton) para calcular el EMV de p:
>
>
>
>
>
>
>
p0 <- 0.03 ### valor inicial
iter <- 0 ### número de iteraciones
toler <- 1 ### tolerancia
pemv <- NULL ### p estimado solución de ecuación de verosimilitud
pemv[1] <- p0
se.pemv <- NULL ### se del emv de p
se.pemv[1] <- sqrt( -1/d2logL(pemv[1]) )
>
+
+
+
+
+
while( (toler > 0.000001) && (iter < 100) ) {
iter <- iter + 1
pemv[iter+1] <- pemv[iter] - dlogL(pemv[iter]) / d2logL(pemv[iter])
se.pemv[iter+1] <- sqrt( -1/d2logL(pemv[iter+1]) )
toler <- abs( pemv[iter+1] - pemv[iter] )
}
> cbind( pemv, se.pemv )
pemv se.pemv
[1,] 0.03000 0.003958
[2,] 0.05198 0.006799
[3,] 0.07916 0.010173
[4,] 0.09951 0.012548
[5,] 0.10542 0.013209
[6,] 0.10575 0.013246
[7,] 0.10575 0.013246
1
Gráfico para explicar el método de Newton:
>
pp <- seq(0.025, 0.13, length=100)
> x11()
> j <- iter+1
> plot(pp, dlogL(pp), type = "l", lwd=2, main="algoritmo de Scoring",
cex.main=0.9,
+ xlab="p: probabilidad de fallo en un solo uso", ylab="dlogL: score de p" )
> text(0.028, 50, labels="p0")
> text( pemv[j]+0.005, 50, labels="pEMV" )
> abline( h=0 )
> points(pemv[1:j], dlogL(pemv[1:j]))
> points(pemv[1:j], rep(0, j))
> ddlpt <- d2logL(pemv[1:j])
> for(i in 2:4) {
+ abline( ( - pemv[i] * dlogL( pemv[i - 1]) ) / (pemv[i - 1] - pemv[i]),
+ dlogL( pemv[i - 1] ) / (pemv[i - 1] - pemv[i]) )
+ }
> segments( pemv[1:j], 0, pemv[1:j], dlogL(pemv[1:j]), lty=3 )
1000
500
0
dlogL: score de p
1500
algoritmo de Scoring
p0
pEMV
0.04
0.06
0.08
0.10
0.12
p: probabilidad de fallo en un solo uso
2
>
>
>
>
###
###
###
###
PUROMICINA De M. M. y V.
Velocidad de una reacción enzimática donde el substrato
###
ha sido tratado con diferentes dosis de puromycina
###
Modelo Michaelis-Menton: E(Y|x) = b1*x/(b2+x); Y = E(Y|x) + e ###
> cp <- c( 0.02, 0.06, 0.11, 0.22, 0.56, 1.10 ) ### concentracion de puromycina
> v1 <- c( 47, 97, 123, 152, 191, 200 ) ### velocidad de reaccion bajo cp
> v2 <- c( 76, 107, 139, 159, 201, 207 ) ### velocidad de reaccion bajo cp
> x <- rep( cp, 2 )
> y <- c( v1, v2 )
> n <- length(x)
>
>
>
>
>
#######################################################
### Modelo Michaelis-Menten: y = E(Y|x)+e con E(Y|x) = b1*x/(b2+x)
### En x=0 la media es 0. La media es creciente en x.
### La media tiende a b1 si x tiende a infinito.
### b2 es el valor de x para una media igual de b1/2.
>
>
>
>
### Ajuste directo mediante linealización
b10 <- 200
### valores de inicio
x0 <- 0.2; y0 <- 150;
b20 <- b10*x0/y0 - x0
> b0 <- c(b10,b20)
> b0
[1] 200.00000000
0.06666667
>
>
>
>
###
fxb
d1
d2
función media y sus derivadas
<- function(b){ b[1]*x/(b[2]+x) }
<- function(b) { x/(b[2]+x) }
<- function(b) { -d1(b)*b[1]/(b[2]+x) }
> bb1 <- NULL
> bb2 <- NULL
> bb1[1] <- b10; bb2[1] <- b20;
> i <- 0
> toler <- 1
>
+
+
+
+
+
+
+
+
+
+
>
### iteraciones
### tolerancia
while( (toler > 0.00001) && (i < 100) ){
i <- i+1
bb0 <- c(bb1[i], bb2[i])
fxbb0 <- fxb(bb0)
dd1 <- d1(bb0)
dd2 <- d2(bb0)
DD <- cbind( dd1, dd2 )
bbb <- c(bb1[i],bb2[i]) + solve(t(DD)%*%DD)%*%t(DD)%*%(y-fxbb0)
bb1[i+1] <- bbb[1]; bb2[i+1] <- bbb[2];
toler <- max(abs(bb1[i+1]-bb1[i]), abs(bb2[i+1]-bb2[i]))
}
cbind(bb1,bb2) ### betas estimados en el proceso iterativo
bb1
bb2
[1,] 200.0000 0.06666667
[2,] 212.8231 0.06416042
[3,] 212.6862 0.06412506
[4,] 212.6840 0.06412165
[5,] 212.6838 0.06412132
[6,] 212.6837 0.06412129
[7,] 212.6837 0.06412128
3
> ### betas estimados
> b1 <- bb1[length(bb1)]; b2 <- bb2[length(bb2)]
> cbind( b1, b2 )
b1
b2
[1,] 212.6837 0.06412128
> ### s2: varianza residual ¡NO EMV!
> s2 <- sum( (y - fxb(c(b1,b2)))^2 )/(n-2)
> sqrt(s2) ### error estándar residual
[1] 10.93366
> ###Covarianza asintótica de betas (errores normales)
> vbetas <- s2*solve(t(DD)%*%DD)
> round( vbetas, 6 )
dd1
dd2
dd1 48.262966 0.044015
dd2 0.044015 0.000069
>
>
>
>
### errores estándar de betas y su correlación
se.b1 <- as.numeric( sqrt(diag(vbetas))[1] )
se.b2 <- as.numeric( sqrt(diag(vbetas))[2] )
cor.b1.b2 <- as.numeric( vbetas[1,2]/(se.b1*se.b2) )
> cbind( b1, se.b1, b2, se.b2, cor.b1.b2 )
b1
se.b1
b2
se.b2 cor.b1.b2
[1,] 212.6837 6.947155 0.06412128 0.00828095 0.7650837
4
Descargar