Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Control de la calidad
Métodos de Remuestreo Bootstrap
Intervalos de conanza basados en remuestreos
Realizado por:
Isabel Zambrano
Mayra Recto
Jhon Ñacata
1. METODOS DE REMUESTREO BOOTSTRAP
Los métodos bootstrap son una clase de métodos Monte Carlo no paramétricos que
pretenden estimar la distribución de una población mediante remuestreo. Los métodos
de remuestreo tratan una muestra observada como una población nita, y generan
muestras aleatorias a partir de ella para estimar características poblacionales y hacer
inferencia sobre la población muestreada. A menudo estos métodos se usan cuando no
se conoce la distribución de la población objetivo, de modo que la muestra es la única
información disponible.
El término bootstrap puede referirse a bootstrap no paramétrico o bootstrap pa-
ramétrico. Los métodos de Monte Carlo que implican el muestreo a partir de una dis-
tribución de probabilidad completamente especicada, son conocidos como bootstrap
paramétrico. En el caso no paramétrico la distribución no se especica.
Algortimo de Bootstrap
Se genera un número B de muestras bootstrap x∗1 , x∗2 , ..., x∗B cada una de tamaño n.
Los tamaños típicos de B para errores estándar suelen estar entre 500 y 5000.
Para cada muestra bootstrap b = 1, ...B se calcula el estadístico s(x∗b ).
Por ejemplo, la mediana.
El estimador bootstrap del error estándar es la desviación estándar de las B muestras
1
bootstrap. v
u B
u 1 X
se
ˆ boot = t (s(x∗b ) − s(.))2
B − 1 b=1
donde
B
1 X
s(.) = s(x∗b )
B b=1
Ejemplo 1
data(islay,package = "boot")
plot(ecdf(islay$theta),main = "",
xlab = "Diferencia de Alturas")
qqnorm(islay$theta)
qqline(islay$theta,col ="blue")
0.4
0.2
0.0
Diferencia de Alturas
2
Normal Q−Q Plot
300
Sample Quantiles
200
100
50
0
−2 −1 0 1 2
Theoretical Quantiles
Las grácas resultantes son herramientas de diagnóstico útiles para observar cómo
afectan las observaciones individuales La salida bootstrap.
La gráca consistirá en un número de líneas de puntos horizontales que corresponden
a los cuantiles de La distribución centrada bootstrap. Para cada punto de datos los
cuantiles de la distribución bootstrap.
Los datos no parecen distribuirse como una normal por lo tanto si los datos obteni-
dos siguen una distribución de Poisson entonces las medidas de azimuts paleocorrientes
de la cuarcita Jura en la isla escocesa de islay siguen una distribución exponencial.
Ejemplo 2
Nos damos cuenta que las grácas anteriores se parecen a una exponencial. Supon-
gamos que la función de densidad es:
(
λe−λx , x ≥ 0
f (x, λ) =
0 x<0
3
n = length(islay$theta)
lambda = length(islay$theta)/sum(islay$theta)
plot(ecdf(islay$theta),
main = '',
xlab = "Medidas de Altura")
with(list(x=seq(0,500,10)),
lines(1-exp(-lambda*x)~x,
col='red'))
1.0
0.8
0.6
Fn(x)
0.4
0.2
0.0
Medidas de Altura
Código 3
n = length(islay$theta)
media = sum(islay$theta)/length(islay$theta)
alfa = 0.05
ic = sapply(c(1-alfa/2,alfa/2),
function(alfa){
(2*n*media)/qchisq(alfa,2*n)
}
)
4
Entonces el intervalo de conanza con la distribución exponencial es:
IC = [105,442; 269,03]
2. APROXIMACIÓN A LA NORMAL
confint(lm(theta~1,data=islay))
## 2.5 % 97.5 %
## (Intercept) 89.10935 229.7795
mediasdboot = with(islay,
replicate(5000,
{
guy=sample(theta,replace = TRUE)
c(media=mean(guy),sdev=sd(guy))
}
)
)
mean(mediasdboot["media",])+
c(1,-1)*qnorm(alfa/2)*sd(mediasdboot["media",])
qqnorm ( mediasdboot )
qqline ( mediasdboot )
5
Normal Q−Q Plot
250
200
Sample Quantiles
150
100
50
−4 −2 0 2 4
Theoretical Quantiles
Una manera de mejorar los intervalos asintóticos, cuando las muestras son pequeñas,
es usar intervalos t de Student. La idea aquí es sustituir los percentiles de la distribución
t por los percentiles de la distribución de los valores estudentizados Theta en la muestras
bootstrap. Es decir los valores denidos por :
θ̂∗ (b) − θ̂
t∗ (b) =
ŝe(θ̂∗ (b))
donde θ∗ y θ∗ (b) son los valores del estimador y valos estimado del error del estima-
dor en la b-ésima muestra de bootstrap respectivamente; θ̂ es el estimado en la muestra
original. ∗
Si se está tratando de estimar la media el error estàndar estimado sería s(θ √ ) ,
n
pero en el caso de otros estimadores tales como la mediana habría que aplicar otro
bootstrapping para estimar este error estándar.
Ejemplo. En nuestro ejemplo vamos a obtener intervalos ajustados teniendo en
cuenta que no sabemos la normalidad de los datos. A estos intervalos los llamamos
aproximación de bootstrap-t.
N=dim(islay)[1]
thetaHat=mean(islay[["theta"]])
bT=(mediasdboot["mean"]-thetaHat)/
6
(mediasdboot["sd"]/sqrt(N))
library(latticeExtra)
ecdfplot(bT,xlim=c(-3,3),xlab="t",
key=simpleKey(c("bootstrap-t",expression(t[11])),
points=FALSE,lines=FALSE, columns= 2))
layer(panel.curve(pt(x,N-1),col="red",lty=2,lwd=3))
Con està gráca podemos observar que necesitamos muchas muestras bootstrap para
obtener unos resultados ajustados.
3. Intervalos básicos
Los intervalos básicos son una opción para los intervalos bootstrap, la forma es-
tándar de estimar intervalos de conanza usando método de remuestreo bootstrap es
simplemente reemplazar el error estándar por su estimado bootstrap.
Si asumismos que θ̂ − θ tiene la misma distribución que θ̂∗ − θ, entonces el intervalo
básico se dene como
∗ ∗
ICbas = [2θ̂ − θ̂1− α ; 2θ̂ − θ̂ α ]
2 2
7
Corrigen el sesgo siempre que θ̂ − θ tenga la misma distribución que θ̂∗ − θ
En nuestro caso un intervalo básico bootstrap para la media de la muestra islay se
consiguió mediante el siguiente código en R.
level = 95
B = 100
data = islay$theta
alpha = 0.05
lq = qnorm(alpha / 2)
uq = qnorm(1 - 0.5 * alpha)
seb = bootstrap(data, B, mean)
seb1 = mean(seb$thetastar)
l.ic = 2 * mean(data) + lq * seb1
u.ic = 2 * mean(data) + uq * seb1
cat("El intervalo de confianza básico del", level,
"% para la mediaes:(", l.ic, ",", u.ic, ")\n")
Entre los intervalos bootstrap también podemos considerar otro tipo de intervalos
conocidos como los intervalos percentiles.
Para esto supongamos que se obtiene una muestra x∗ a partir de P̂ → x∗ y se calculan
luego los estadísticos θ̂∗ = s()x∗ , si denominamos Ĝ la función de desitribución acumu-
lada de θ̂∗ , entonces el intervalo percentil de nivel 1 − α se dene como los percentiles
α
2
y 1 − α2 de Ĝ:
α α
[θ̂ %low ; θ̂ %up ] = Ĝ−1 ; Ĝ−1 1 −
2 2
Dado que por denición Ĝ−1 (α) = θ̂(α)
∗
se puede reescribir al intervalo como
∗ ∗
[θ̂ %low ; θ̂ %up ] = θ̂( α ) ; θ̂1− ( α2 )
2
La expresión anterior se reere a una situación ideal donde hay innitas réplicas boots-
trap. En la práctica se toma un número nito B de ellas.
Se generan B conjuntos de datos bootstrap independientes x∗1 , x∗2 , ..., x∗B y se calculan
los respectivos estimadores θ̂∗ (b) = s(x∗b ), donde b=1,...,B.
Se denomina como θ̂B(α)
∗
el percentil α−ésimo de los valores θ̂∗ (b), es decir, el B.α−ésimo
valor en la lista ordenada de las B réplicas de θ̂∗ .
Por ejemplo, si B=2000 y α=0.05, entonces θ̂B(α) ∗
es el valor 100-ésimo en la lista or-
denada de réplicas. Del mismo modo, se razonaría con θ̂B(1−α)∗
, el percentil 1-α-ésimo
8
de los valores.
De este modo, el intervalo percentil 1-α se dene como
∗ ∗
[θ̂ %low ; θ̂ %up ] ≈ θ̂B ( α2 ) ; θ̂1−B ( α2 )
y la respuesta fue:
## 2.5% 97.5%
## 96.16528 222.61806
9
4.1. Lema del intervalo del percentil:
Supongamos que existe una función o transformación m del parámetro tal que
convierte en normal a la distribución de θ̂, es decir, φ̂ = m(θ̂)
φ̂ ∼ N (φ, c2 )
Los intervalos bootstrap-t y los intervalos tipo percentil pueden conducir a esti-
maciones del intervalo de conanza algo erráticas, especialmente el intervalo percentil
cuando el estimador es sesgado respecto al parámetro cuyo intervalo de conanza que-
remos aproximar. Para esto se puede considerar una versión mejorada del intervalos
percentil llamada BCa, abreviatura de sesgo-corregido.
En la determinación del intervalo BCa utilizaremos dos cantidades ẑ0 y â., la primera
se introduce para corregir el sesgo del estimador θ̂ y se dene como
10
Este representa el sesgo mediano de la estimación dada por las B réplicas bootstrap
del estimador.
Entonces se entiende como la discrepancia entre la mediana de dicha distribución de
frecuencias y θ̂, en unidades normales.
Obtenemos el valor de ẑ0 = 0, cuando la mitad de las observaciones exactamente son
menores que θ̂.
La segunda cantidad, â, denominada aceleración, corrige para el caso en que el error
estándar se(θ̂) no sea constante, y se dene en terminos de los valores jackknife, como
Pn ˆ − θˆ(.) )3
i=1 (θ(.)
â = hP i3
6 n ˆ − θˆ(.) )2 2
i=1 (θ(.)
θ̂(i) = s(x(i) )
n
1X
θ̂(.) = θ̂(i)
n i=1
El intervalo de sesgo-corregido y acelerado (intervalo BCa) de coeciente de con-
anza 1-α se dene igual que el intervalo percentil con unos valores particulares α1 y
α2
∗ ∗
[θ̂α1 ; θ̂α2 ]
tal que, !
ẑ0 + z1− α2
α1 = Φ ẑ0 +
1 − â(ẑ0 + z1 − α2 )
!
ẑ0 + z α2
α2 = Φ ẑ0 +
1 − â(ẑ0 + z α2 )
Siendo a α2 y z1− α2 los cuantiles habituales de la normal estándar y Φ la función de
distribución de una normal estándar.
Se puede observar que si ẑ0 = â = 0 queda
α α
α1 = Φ(z1 − )=
2 2
α
α2 = Φ(z α2 ) = 1 −
2
de forma que el intervalo BCa coincide con el intervalo percentil.
El valor de ẑ0 translada el intervalo a la derecha o a la izquierda y â hace que el intervalo
sea más ancho o más estrecho, en las aplicaciones de este intervalo se recomienda
utilizar, al menos B=1000 muestras bootstrap, al igual que en el intervalo percentil, el
BCa también adivina las transformaciones del parámetro
11
boot.BCa =
function (x, th0, th, stat, conf=0.95) {
x = as.matrix ( x)
n = nrow ( x) # observaciones en filas
N = 1:n
alfa = (1+c(-conf, conf))/2
zalfa = qnorm(alfa)
# Factor de correccion del sesgo
z0 = qnorm(sum(th<th0)/length(th))
# factor de aceleracion ( est. jackknife )
th.jack = numeric(n)
for (i in 1: n) {
J = N [1:( n -1)]
th.jack[i] = stat(x[-i,],J)
}
L = mean (th.jack)-th.jack
a = sum (L^3) /(6*sum (L^2)^(1.5))
# limites confianza BCa
adj.alfa = pnorm (z0+(z0+ zalfa )/(1- a*(z0+zalfa)))
limits = quantile (th, adj.alfa, type =6)
return ( list ( " est " = th0 , " BCa "= limits ))
}
data(breslow , package = "boot")
n = nrow(breslow)
B = 2000
x = cbind (breslow$ns,breslow$y)
theta.b = numeric(B)
theta.hat = mean (breslow$ns)/mean(breslow$y)
for (b in 1:B) {
i = sample (1:n, size =n, replace = TRUE)
y = breslow $ns[i]
z = breslow $y[i]
theta.b[b] = mean (y)/mean (z)
}
estadis = function ( dat , index ) {
mean(dat[index, 1])/mean(dat[index, 2])}
boot.BCa (x , th0 = theta.hat , th = theta.b , stat = estadis )
## $` est `
## [1] 194.5923
##
## $` BCa `
## 4.21903% 98.77752%
## 71.0363 517.4478
12
library(bootstrap)
xdata = matrix (rnorm(30),ncol =2)
n = 15
theta = function(ind,xdata){
cor(xdata[ind,1],xdata[ind,2])}
bcanon(1:n, 100, theta, xdata, alpha =c(0.025,0.975))$confpoints
boot.ci(eso,index=2)
13
## Level Percentile BCa
## 95% ( 13.1, 368.6 ) ( 33.9, 471.3 )
## Calculations and Intervals on Original Scale
## Warning : BCa Intervals used Extreme Quantiles
## Some BCa intervals may be unstable
d=data.frame(x =1:20,y=runif(20))
m1=lm(y~x,data=d)
lmcoef = function(data,i){
d = data [i,]
d.reg = lm(y~x,d)
c(coef(d.reg))}
m1
##
## Call:
## lm(formula = y ~ x, data = d)
##
## Coefficients:
## (Intercept) x
## 0.481026 0.002981
lmboot=boot(d,lmcoef,R =1000)
boot.ci(lmboot,index=2)
14
6. CONCLUSIONES:
15