Está en la página 1de 16

Escuela Politécnica Nacional

Control de la calidad
Métodos de Remuestreo Bootstrap
Intervalos de conanza basados en remuestreos

Basado en el trabajo de:


B.Efron, R. Tibshinari(1993). An Introduction to the
bootstrap
O. Kirchkamp(2017). Resampling methods.

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.

Esquema del Bootstrap

Supongamos que se observa una muestra x = x1 , x2 , ..., xn sobre la que se calcu-


la un cierto estadístico s(x). Por ejemplo, x es el grupo control de observaciones y
s(x) es la media muestral. En el caso del bootstrap, se dene una muestra bootstrap
x∗ = (x∗1 , x∗2 , ..., x∗n ) que se obtiene muestreando n veces con reemplazamiento a partir
de los datos originales (x1 , x2 , ..., xn ) Por ejemplo si n = 6 una posible muestra boots-
trap podría ser x∗ = (x5 , x5 , x4 , x7 , x3 , x1 ).

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

El marco de datos islay tiene 18 las y 1 columnas. Se tomaron medidas de azimuts


paleocorrientes de la cuarcita Jura en la isla escocesa de islay. Este marco de datos
contiene la siguiente columna: theta El ángulo del azimut en grados Este de Norte.
Esto se hizo con el siguiente código en R:

data(islay,package = "boot")
plot(ecdf(islay$theta),main = "",
xlab = "Diferencia de Alturas")
qqnorm(islay$theta)
qqline(islay$theta,col ="blue")

Utilizamos la función qqnorm es una función genérica cuyo método predeterminado


produce una gráca QQ normal de los valores en y, qqline agrega una línea a una
gráca "teórica", por defecto normal, cuantil-cuantil que pasa a través de los cuantiles
de probs, por defecto el primer y tercer cuartiles.
1.0
0.8
0.6
Fn(x)

0.4
0.2
0.0

0 100 200 300 400

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

Para estimar λ se puede usar el estimador de màxima verosimilitud (MLE):


n 1
λ̂ = P =
i xi x̄
Ahora vamos a ver como se comportan los datos con la función de densidad:
Código 2

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

0 100 200 300 400

Medidas de Altura

Al asumir una distribución expoencial, se puede calcular el intervalo de conanza


exacto para el parámetro con:
 
x̄2n x̄2n
IC 1 =  2 ; 2 
λ χ2n,1− α χ2n, α
2 2

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

Sabemos que podemos aproximar a la normal cuando la muestra es grande. Así la


media muestral se distribuye asintóticamente como una normal según el TCL(Teorema
Central del Límite)
Aproximación normal basada en estimadores paramétricos de : Asumimos norma-
lidad asintótica y calculamos el intervalo de conanza para el parametro.

confint(lm(theta~1,data=islay))

## 2.5 % 97.5 %
## (Intercept) 89.10935 229.7795

Aproximación basada en estimadores bootstrap de µ, σ


Comprobamos el ajuste de la distribuciòn de la media a la normal. Con lo que nos
damos cuenta que tampoco funciona bien es decir como una normal. Por lo tanto vamos
haber la gráca que indica que los valores no siguen una distribución normal. Con el
siguiente código vemos la gráca de una QQnormal de los valores:

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",])

## [1] 95.32132 220.98085

Comprobemos que el ajuste de la distribución de la media a la normal tampoco


funciona bien.

qqnorm ( mediasdboot )
qqline ( mediasdboot )

5
Normal Q−Q Plot
250
200
Sample Quantiles

150
100
50

−4 −2 0 2 4

Theoretical Quantiles

Intervalos t de Student con Bootstrap

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))

Y la gráca de bootstrap -t es:

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

. Algunas propiedades de estos intervalos son:


No son invariantes mediantes transformaciones.

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")

El intervalo de conanza básico del 95 % para la media es: (13.65716 , 624.1206).


Este intervalo se consiguió haciendo uso de 100 medias bootstrap y nos dice que la
media de los datos del remuestreo bootstrap está entre los dos valores puestos ante-
riormente.

4. Intervalos tipo percentil

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 )

Si la distribución de θ̂∗ es aproximadamente normal, entonces los intervalos percentil


y normal estándar coinciden. En nuestro caso en particular con la data islay el intervalo
quantil fue hallado con el siguiente código

data(islay, package = "boot")


alfa = 0.05
meansdboot = with ( islay ,
replicate (5000 ,
c( mean = mean ( sample ( theta ,
replace = TRUE )
),
sd=sd( sample ( theta , replace = TRUE))
)
)
)

quantile ( meansdboot ["mean",], c( alfa /2, 1- alfa / 2))

y la respuesta fue:

## 2.5% 97.5%
## 96.16528 222.61806

Estos valores representan al percentil 2.5 % y al 97.5 % de la distribución del esti-


mador por bootstrapping.
Bajo este enfoque se construyó una distribución a posteriori del percentil 2.5 o del 97.5
dados los datos proporcional al producto de una distribución a priori del percentil 2.5
utilizando una función de verosimilitud estimada vía bootstrap de los propios datos.
A partir de la distribuición a posteriori de cada percentil, se obtiene una estimación
puntual y un intervalo de conanza para el mismo. El enfoque bayesiano puede resultar
particularmente útil cuando se tienen tamaños de muestra pequeños.

Para mejorar los intervalos de conanza es necesario realizar a veces transformacio-


nes distintas a la clásica del logaritmo. Así el método del percentil permite incorporar
de manera automática dicho tipo de transformaciones. El lema a continuación forma-
liza el hecho de que el método del percentil siempre descubre cual es la transformación
correcta.

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 )

con una desviación estándar de c.


Entonces el intervalo del percentil basado en θ̂ se obtiene como la transformación inversa
h i
m−1 (φ̂ − z1−α .c); m−1 (φ̂ − zα .c)

Supongamos un ejemplo donde se genera una muestra de tamaño 10 de una distribu-


ción normal estándar, el parámetro de interés que se trata de estimar es θ = eµ donde
µ es la media poblacional, el verdadero valor de θ es e0 = 1 y el estimador muestral es
θ̂ = ex̄ .
Si se generan varias muestras bootstrap θ̂∗ se obtiene una distribución bastante asimé-
trica y los intervalos percentil al 95 % resultan ser

[θ̂ %low ; θ̂ %up ] = [0,75; 2,07]

Si se calculan los intervalos estándar normales basados en un error estándar se ˆ =


0,34, se obtiene 1,25 ± 1,96,0,34 = [0,59; 1,92] que son muy diferentes a los anteriores
intervalos.
Sin embargo esta aproximación no buena dado que la distribución del estadístico
no es normal, si se toma la transformación logaritmo sobre los datos y se considera
el parámetro φ = log(θ) entonces se obtiene un intervalo estándar normal igual a [-
0.28;0.73].
La distribución de los datos transformados es más simétrica y el intervalo estándar
normal es más ajustado, si se toma el antilogaritmo de los extremos de este intervalo,
se obtiene [0.76;2.08] que es casi idéntico al obtenido mediante el percentil bootstrap.
Es decir, el intervalo percentil encuentra de manera automática la transformación ade-
cuada para los datos.

5. Intervalo de sesgo-corregido y acelerado BCa

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

θ̂∗ (b) < θ̂


!
ẑ0 = Φ
B

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 (θ(.)

Donde θ̂(i) es la i-ésima réplica jackknife del estimador tal que

θ̂(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

Con la librería boostrap:

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

## alpha bca point


## [1,] 0.025 -0.6501087
## [2,] 0.975 0.7125510

Ahora con la librería boot


x = c(10, 27, 30, 40, 46, 51, 52, 104, 146)
library ( boot )
mean.boot = function(x,ind){
return( c(mean(x[ind]),var(x[ind])/length(ind)))
}
eso = boot(x,mean.boot,1000)
boot.ci(eso,index=1)

## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS


## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = eso, index = 1)
##
## Intervals :
## Level Normal Basic
## 95% (28.28, 82.84 ) (27.67, 80.55 )
##
## Level Percentile BCa
## 95% (31.89, 84.77 ) (33.10, 89.09 )
## Calculations and Intervals on Original Scale

boot.ci(eso,index=2)

## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS


## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = eso, index = 2)
##
## Intervals :
## Level Normal Basic
## 95% ( 34.0, 411.8 ) ( 32.4, 387.8 )
##

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

Con la librería boot y regresión

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

Se obtienen los resultados

lmboot=boot(d,lmcoef,R =1000)
boot.ci(lmboot,index=2)

## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS


## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = lmboot, index = 2)
##
## Intervals :
## Level Normal Basic
## 95% (-0.0259, 0.0351 ) (-0.0232, 0.0399 )
##
## Level Percentile BCa
## 95% (-0.0340, 0.0292 ) (-0.0287, 0.0312 )
## Calculations and Intervals on Original Scale

14
6. CONCLUSIONES:

La técnica bootstrap proporciona estimaciones del error estadistico, imponiendo


escasas restricciones sobre las variables aleatorias analizadas y estableciéndose como
un procedimiento de caracter general, independientemente del estadístico considerado.
La técnica bootstrap se propone como un procedimiento general para estimar el error
estadistico en cualquiera de sus formas, aunque esta amplia aplicabilidad conlleva que
existan técnicas que, bajo determinadas condiciones, mejoran las estimaciones del error
estadistico. La breve investigación realizada es un ejemplo de este hecho, pues como
hemos podido comprobar, para el estadístico media, existen intervalos de conanza
elaborados mediante la distribución t, que reproducen con mayor precisión la tasa de
error nominal.
La técnica bootstrap si bien permite encontrar una estimación puntual su mayor
utilidad se centra en generar intervalos de conanza como medida de incertidumbre de
la estimación realizada. La estimación de los intervalos de conanza por el método del
percentil es utilizado con mucha frecuencia cuando no hay otro método disponible en
cambio el método BCa no es utilizado con tanta frecuencia aunque de cierta forma sea
mejor ya que este corrige las probabilidades del método percentil teniendo en cuenta el
sesgo y la variabilidad de las réplicas bootstrap con dos coecientes, esto lo podemos
ver en los intervalos hallados en este trabajo para las datas ya mencionadas.

15

También podría gustarte