Sei sulla pagina 1di 31

PC 3 / Examen parcial 3.

Remuestreo, suavizamiento y
regresin no paramtrica
Equipo 4
Chal Mendoza Beatriz Adriana; Gonzalez Vivanco Diego Maximilian ; Moranchel Gonzlez
Jos Manuel; Paredes Salcedo Alejandro Armando; Solis Alonso Csar Jonathan
24 de mayo, 2017

Contents
Ejercicio 1. (Wasserman) 1

Ejercicio 2. (Efron-Tibshirani) 4

Ejercicio 3. 10

Ejercicio 4 18

Ejercicio 5 23

Ejercicio 1. (Wasserman)
Sea X1 , . . . , Xn t3 , donde n = 25. Sea = T (F ) = (q0.75 q0.25 )/1.34, donde qp denota al cuantil p de la
distribucin. Mediante simulacin compara la cobertura y la amplitud de los siguientes intervalos:
a) Intervalo normal con error estndar de bootstrap,

b) Intervalo normal con error estndar de jackknife,

c) Intervalo percentil (bootstrap), y

d) Intervalo pivotal.
Observacin: usaremos un nivel de confianza del 95% para realizar el ejercicio.
Para el inciso a) hacemos lo siguiente:
set.seed(4)

#Primero simulamos una muestra de la distribucin requerida y calculamos el funcional T(F)

X<-rt(25, df=3)
q2<-quantile (X, 0.75)
q1<-quantile (X, 0.25)
T<-(q2-q1)/1.34

print('Valor estimado del funcional T(F)')

## [1] "Valor estimado del funcional T(F)"

1
T

## 75%
## 0.9850076
#Hacemos una funcin que calcule el error estndar bootstrap

se_boot <- function(B){


b <- c()
for(i in 1:B){
muestra <- sample(X, size = 25, replace = T)
b[i] <- (quantile(muestra,0.75)-quantile(muestra,0.25))/1.34
}
s <- sd(b)
print('error estndar bootstrap')
return(s)
}

seb<-se_boot(10000)

## [1] "error estndar bootstrap"


seb

## [1] 0.3662721
#Intervalo normal

in1<-T-((-qnorm(0.05/2))*seb)
in2<-T+((-qnorm(0.05/2))*seb)

#intervalo de confianza bootstrap normal


print('intervalo de confianza bootstrap normal')

## [1] "intervalo de confianza bootstrap normal"


c(in1,in2)

## 75% 75%
## 0.2671275 1.7028877
Observando el valor de T(F) podemos comprobar que, efectivamente, el funcional cae dentro dl intervalo
de confianza calculado. Este intervalo tiene una amplitud de 1.4357602. Posteriormente analizarmos su
cobertura con respecto a los dems intervalos.
Para el inciso b) hacemos:
set.seed(4)

#Calculamos el estimador Jackknife del error estndar:

#Primero se calculan las rplicas jackknife

funcionT<-function(X){
funcional<- (quantile(X,0.75)-quantile(X,0.25))/1.34
return(funcional)
}

T_jk <- c()

2
for(i in 1:25){
T_jk[i] <- funcionT(X[-i])
}

#Procedemos a calcular el estimador:

med_jack <- mean(T_jk)

print('error estndar jackknife')

## [1] "error estndar jackknife"


sd_CV_jack <- ((25-1)/25)*sum((T_jk-med_jack)^2)
sd_CV_jack

## [1] 0.1816855
jin1<- T-((-qnorm(0.05/2))*sd_CV_jack)
jin2<- T+((-qnorm(0.05/2))*sd_CV_jack)

#intervalo de confianza bootstrap normal


print('intervalo de confianza jackknife normal')

## [1] "intervalo de confianza jackknife normal"


c(jin1,jin2)

## 75% 75%
## 0.6289105 1.3411046
El interavlo de confianza jackknife normal para el funcional T tiene una amplitud de 0.7121941.
Para el inciso c) hacemos lo siguiente:
set.seed(4)

#Primero calulamos 1000 rplicas bootstrap y en cada una de ellas calculamos el estadstico:

muest_boot <- function(B){


b <- c()
for(i in 1:B){
muestra <- sample(X, size = 25, replace = T)
b[i] <- (quantile(muestra,0.75)-quantile(muestra,0.25))/1.34
}
return (b)
}

#Ahora calculamos los cuantiles para el intervalo percentil:

perc1<- quantile(muest_boot(1000),0.05/2)
perc2<- quantile(muest_boot(1000), 1-(0.05/2))

#Intervalo de confianza percentil bootstrap:

print('intervalo de confianza bootstrap percentil')

## [1] "intervalo de confianza bootstrap percentil"

3
c(perc1,perc2)

## 2.5% 97.5%
## 0.3718419 1.8687270
El intervalo calculado con el mtodo percentil tiene una aplitud de 1.49688451.
Para el inciso d) hacemos:
set.seed(4)

#Utilizamos los datos obtenidos en los incisos anteriores:

piv1<-2*T-perc2
piv2<-2*T-perc1

print('intervalo de confianza bootstrap pivotal')

## [1] "intervalo de confianza bootstrap pivotal"


c(piv1,piv2)

## 75% 75%
## 0.1012882 1.5981733
El intervalo de confianza pivotal con bootstrap tiene una amplitud de 1.4968851.
Comparando la amplitud de los intervalos de confianza encontrados con distintos mtodos para el funcional
T(F), y dndonos cuenta de que, en efecto, el valor del estimador de ese funcional con el estimador plug-in,
es decir, el funcional evaluado en una muestra aleatoria y usando su funcin de distribucin emprica, que en
este ejercicio no fue realmente necesaria, ya que realizamos la muestra de la poblacin con una distribucin
conocida, nos damos cuenta de que,cae dentro de todos los intervalos de confianza estimados con diversos
mtodos.
Sin embargo, comparando la amplitud de los diversos intervalos, podemos darnos una idea de que tan buena
es su cobertura; en otras palabras, podemos ver que tanto espacio hay en el que podra caer el funcional,
aumentando o disminuyendo as su precisin. Podemos darnos cuenta que la menor amplitud la presenta el
interavalo normal con error estndar jackknife, mientras que los otros tres presentan amplitudes muy cercanas,
y en el caso de los incisos c) y d) son iguales.
Por lo tanto, el intervalo ms preciso se presenta con la estimacin jackkinfe, basando tambin esta conclusin
en el nmero de muestras bootstrap que tomamos.

Ejercicio 2. (Efron-Tibshirani)
Simula 100 muestras X1 , . . . , X2 0 de una poblacin N (, 1) con = 1.
a) Para cada muestra, calcula los estimadores bootstrap y jakknife de la varianza para = X y calcula la
media y desviacin estndar de las 100 rplicas de la media.
b) Repite a) para el estadstico = X 2 y compara los resultados. Explica y analiza lo que encontraste.
Para el inciso a)
Para bootstrap:
set.seed(4)

#Calculamos las 100 muestras de tamao 20:


normal<- c()

4
suppressWarnings(for(i in 1:2000){
normal[i]<- rnorm(20,1,1)
})
Efron<- suppressWarnings(matrix(normal, nrow=100,byrow=T))
#Calculamos la varianza de la media de las rplicas bootstrap de cada muestra:

b<- c()
v<- c()
var_boot_muest<- function(B){
for(j in 1:100){
for (i in 1:B){
muestra<- sample(Efron[j,], size=20, replace=T)
b[i]<- mean(muestra)
}
v[j]<- var(b)
}
return(v)
}

print('varianzas bootstrap de cada muestra')

## [1] "varianzas bootstrap de cada muestra"


var_boot_muest(1000)

## [1] 0.06695147 0.04606977 0.03240614 0.03941582 0.03377500 0.04161371


## [7] 0.05143192 0.03142413 0.03597677 0.05543752 0.09047644 0.05537956
## [13] 0.05723328 0.06495838 0.03823666 0.06898646 0.05522935 0.02866208
## [19] 0.06125840 0.03914680 0.03882039 0.05611219 0.07136991 0.03432802
## [25] 0.03837622 0.06458117 0.03247140 0.04430490 0.04240328 0.05182044
## [31] 0.02803172 0.07268856 0.04866339 0.06103671 0.07169162 0.03373673
## [37] 0.04935694 0.06581793 0.05546887 0.04321058 0.04901350 0.03915823
## [43] 0.04635722 0.06399802 0.02478992 0.05594939 0.09128404 0.05526086
## [49] 0.04540254 0.03559045 0.02562342 0.05337970 0.03925923 0.04225994
## [55] 0.03856599 0.07519297 0.05189949 0.03178409 0.05277579 0.05623884
## [61] 0.06806038 0.05414422 0.03488179 0.09096371 0.03101046 0.04597967
## [67] 0.09102302 0.04859063 0.03350285 0.04428141 0.04980362 0.04405997
## [73] 0.06121122 0.03375234 0.05021092 0.03348516 0.01677532 0.06594382
## [79] 0.05928025 0.02631788 0.02356109 0.04197354 0.06383719 0.05264809
## [85] 0.05694431 0.04530818 0.05897239 0.04366112 0.04275456 0.05581663
## [91] 0.05415049 0.06090231 0.02725794 0.06193781 0.03029356 0.03491726
## [97] 0.05252500 0.03728356 0.03137403 0.06735139
#Para calcular la media y la desvacin estndar de las varianzas de la media de las rplicas bootstrap

print('media de las varianzas de las rplicas bootstrap de la media')

## [1] "media de las varianzas de las rplicas bootstrap de la media"


mean(var_boot_muest(1000))

## [1] 0.0488608

5
print('desviacin estndar de las varianzas de las rplicas bootstrap de la media')

## [1] "desviacin estndar de las varianzas de las rplicas bootstrap de la media"


sd(var_boot_muest(1000))

## [1] 0.01566121
Para Jacknife:
set.seed(4)

#Calculamos la varianza de la media de las rplicas jackknife de cada muestra:

varbe<-c()
varrep<- c()
varbet<- c()

var_jackk<- function(n){

for (i in 1:100){
for(j in 1:n){
for(k in 1:n){
varrep[k]<- Efron[i,-j]
}
varbe[j]<- mean(varrep)
}
varbet[i]<- var(varbe)
}
return(varbet)
}
#guardamos en la variable las 100 varianzas

var_jackk_mues<- suppressWarnings(var_jackk(20))
print('varianzas jackknife de cada muestra')

## [1] "varianzas jackknife de cada muestra"


var_jackk_mues

## [1] 8.765676e-02 1.789975e-02 8.341214e-03 2.940683e-02 3.667875e-02


## [6] 2.069241e-03 4.475130e-02 5.031320e-03 7.498057e-02 8.712755e-02
## [11] 1.081516e-01 2.885442e-01 4.264712e-02 1.356651e-02 1.169565e-01
## [16] 2.586593e-01 2.875977e-02 1.998565e-02 2.768302e-03 7.062362e-07
## [21] 1.018694e-01 1.678022e-01 3.704118e-02 6.474336e-05 8.209976e-02
## [26] 2.606375e-01 5.097599e-02 3.782116e-01 8.128177e-04 5.361261e-02
## [31] 5.631843e-02 1.715632e-01 8.073735e-02 3.885486e-02 7.841436e-02
## [36] 2.108022e-03 1.207591e-01 1.470769e-01 1.082937e+00 6.639510e-03
## [41] 3.886597e-02 1.648769e-03 3.347915e-02 9.204795e-02 8.651762e-02
## [46] 2.743677e-05 7.405057e-02 8.469831e-02 8.111932e-02 3.717251e-03
## [51] 9.863508e-02 9.687943e-02 7.930944e-02 5.215307e-03 1.146577e-01
## [56] 4.261033e-02 1.010507e-02 2.621530e-02 8.430396e-02 1.424823e-03
## [61] 1.843886e-01 6.121037e-02 6.128628e-02 1.698204e-02 1.620263e-03
## [66] 9.509048e-04 4.222091e-03 4.241906e-02 1.998449e-01 3.663678e-03
## [71] 1.242769e-03 2.481982e-01 7.481125e-02 1.038457e-01 5.292335e-05
## [76] 1.249632e-01 3.079917e-02 9.694883e-03 2.738831e-02 1.781533e-02

6
## [81] 3.044500e-03 3.562339e-03 1.167097e-01 6.147269e-01 4.172113e-01
## [86] 8.141387e-02 1.141713e-01 9.057402e-02 1.815676e-03 4.628865e-02
## [91] 1.594688e-02 2.801590e-04 1.090563e-01 1.030823e+00 1.689821e-02
## [96] 4.442971e-02 8.539547e-02 3.235251e-03 2.315154e-02 2.390071e-01
#Calculamos la media de las varianzas de las medias de las replicas
print('media de la varianza de las rplicas jackknife de la media')

## [1] "media de la varianza de las rplicas jackknife de la media"


suppressWarnings(mean(var_jackk_mues))

## [1] 0.0952119
#Calculamos de manera analoga para la desviacion estandar
print('desviacin estndar de la media de las rplicas jackknife de la media')

## [1] "desviacin estndar de la media de las rplicas jackknife de la media"


suppressWarnings(sd(var_jackk_mues))

## [1] 0.1687642
Podemos concluir de nuestros resultados lo siguiente: las varianzas que nos arroj el mtodo jackknife fueron
mucho menores que las arrojadas con bootstrap, sin embargo su desviacin estndar es mayor. Contrastaremos
y compararemosesto con el estimador del inciso b).
Para el inciso b)
Para Bootstrap:
set.seed(4)

#Calculamos la varianza de la media al cuadrado de las rplicas bootstrap de cada muestra:

b<- c()
v<- c()
var_boot_muest1<- function(B){
for(j in 1:100){
for (i in 1:B){
muestra<- sample(Efron[j,], size=20, replace=T)
b[i]<- (mean(muestra))^2
}
v[j]<- var(b)
}
return(v)
}

print('varianzas bootstrap de cada muestra')

## [1] "varianzas bootstrap de cada muestra"


var_boot_muest1(1000)

## [1] 0.415052750 0.090356007 0.092584214 0.289148624 0.236476899


## [6] 0.152687069 0.146040994 0.166516638 0.066901438 0.277619397
## [11] 0.438511385 0.297736887 0.093891347 0.303384711 0.185259395
## [16] 0.351718284 0.137883565 0.079343391 0.249565091 0.141988180

7
## [21] 0.142530924 0.345916609 0.153189597 0.096409278 0.177185134
## [26] 0.213243584 0.173783967 0.181074428 0.284914647 0.162644044
## [31] 0.077389712 0.168782462 0.239677562 0.246736307 0.422304622
## [36] 0.157295237 0.229736868 0.264359661 0.222963173 0.104493669
## [41] 0.592907152 0.092900938 0.144714102 0.322013102 0.105293319
## [46] 0.191934940 0.179227375 0.242091560 0.317732124 0.193446017
## [51] 0.087461069 0.360592456 0.153619593 0.135800582 0.242212209
## [56] 0.536960519 0.389104794 0.221170155 0.123228789 0.075552859
## [61] 0.263572060 0.390879868 0.179500048 0.164345710 0.082657253
## [66] 0.131837369 0.291547816 0.196430471 0.116497066 0.452082958
## [71] 0.185166057 0.099847423 0.333761626 0.140167137 0.190343233
## [76] 0.144332845 0.097380878 0.084465663 0.078304914 0.092546629
## [81] 0.109395976 0.351118937 0.159572056 0.151191925 0.185227702
## [86] 0.274630475 0.189232192 0.078532607 0.226428832 0.194515189
## [91] 0.173994487 0.324054490 0.201843744 0.422466926 0.127235020
## [96] 0.086779038 0.192853272 0.008919078 0.208269722 0.308519728
#Para calcular la media y la desvacin estndar de las varianzas de la media al cuadrado de las rplicas

print('media de las varianzas de las rplicas bootstrap de la media')

## [1] "media de las varianzas de las rplicas bootstrap de la media"


mean(var_boot_muest1(1000))

## [1] 0.2061436
print('desviacin estndar de las varianzas de las rplicas bootstrap de la media')

## [1] "desviacin estndar de las varianzas de las rplicas bootstrap de la media"


sd(var_boot_muest1(1000))

## [1] 0.1066353
Para Jackkinfe:
set.seed(4)

#Calculamos la varianza de la media al cuadrado de las rplicas jackknife de cada muestra:

varbe<-c()
varrep<- c()
varbet<- c()

var_jackk1<- function(n){

for (i in 1:100){
for(j in 1:n){
for(k in 1:n){
varrep[k]<- Efron[i,-j]
}
varbe[j]<- (mean(varrep))^2
}
varbet[i]<- var(varbe)
}
return(varbet)

8
}
#guardamos en la variable las 100 varianzas

var_jackk_mues1<- suppressWarnings(var_jackk1(20))
print('varianzas jackknife de cada muestra')

## [1] "varianzas jackknife de cada muestra"


var_jackk_mues1

## [1] 1.237655e+00 9.809122e-04 1.120919e-02 4.970380e-02 3.643742e-01


## [6] 7.088388e-04 2.510904e-01 1.090502e-02 1.564930e-02 7.947932e-01
## [11] 1.447875e-02 7.515336e+00 6.383113e-02 1.011664e-01 4.522715e-01
## [16] 1.418651e-01 2.364056e-01 2.300446e-02 1.441398e-03 3.206889e-06
## [21] 1.828834e-01 1.257778e+00 8.833683e-02 1.672866e-04 4.787344e-04
## [26] 2.474428e+00 3.537216e-02 7.659544e-01 1.120365e-02 7.251765e-01
## [31] 5.263756e-02 3.374991e+00 3.910808e-01 5.437153e-04 3.432537e-01
## [36] 3.196961e-02 4.951123e-01 4.104585e-03 6.587103e+00 1.611500e-02
## [41] 5.811633e-05 5.045806e-03 3.804326e-01 3.695055e-01 2.301848e-01
## [46] 1.766968e-08 5.407517e-01 1.696219e-02 2.505349e-01 3.767263e-02
## [51] 5.191027e-01 8.886607e-01 1.609585e-01 7.132095e-03 8.161083e-01
## [56] 6.071014e-02 4.743041e-02 8.561352e-02 1.589943e+00 7.487062e-04
## [61] 1.775595e+00 1.282210e+00 3.359080e-01 7.968675e-02 2.372819e-03
## [66] 4.014126e-03 8.890364e-02 2.186957e-01 6.762575e-01 3.964529e-02
## [71] 1.430799e-02 2.464319e-02 3.888885e-01 7.587596e-01 3.311048e-07
## [76] 1.539486e-01 1.256730e-01 4.639518e-02 3.459409e-02 2.666125e-02
## [81] 4.501003e-02 5.644591e-03 1.044209e+00 8.212433e-02 6.327106e+00
## [86] 7.788181e-01 1.676090e-01 2.757005e-02 3.123280e-03 1.073473e-01
## [91] 7.255252e-03 2.321147e-03 3.874694e-01 8.749675e-03 4.640801e-02
## [96] 6.615653e-01 2.082343e-01 2.347699e-04 1.166234e-01 6.681263e-02
#Calculamos la media de las varianzas de las medias de las replicas
print('media de la varianza de las rplicas jackknife de la media')

## [1] "media de la varianza de las rplicas jackknife de la media"


suppressWarnings(mean(var_jackk_mues1))

## [1] 0.5030452
#Calculamos de manera analoga para la desviacion estandar
print('desviacin estndar de la media de las rplicas jackknife de la media')

## [1] "desviacin estndar de la media de las rplicas jackknife de la media"


suppressWarnings(sd(var_jackk_mues1))

## [1] 1.237497
Podemos observar que nuevamente las varianzas calculadas con jackknife son menores que las calculadas con
bootstrap, pero nuevamente su desviacin estndar mayor, de manera significativa.
Ambas pruebas nos ayudan a estimar la varianza del estimador sealado con respecto al valor real de la
media (o del cuadrado de la media), para cada una de las muestras que fueron simuladas provenientes de la
distribucin indicada. Es decir, ambos mtodos estiman que tan preciso es un estimador con respecto al valor
real de lo que estima.
Podemos observar que cuando usamos los estimadores jacknife de la varianza, nos arroja varianzas menores
con respecto al valor real de la media o del cuadrado de la media. Sin embargo, el vector de estas varianzas

9
tiende a tener una mayor desviacin en su conjunto, que el calculado con los estimadores bootstrap.
Tambin podemos concluir que el estimador de la media tiene una varianza promedio menor para las muestras,
que el estimador del cuadrado de la media. Esto puede llevarnos a pensar que X es un estimador ms preciso
para el valor real de la media.

Ejercicio 3.
Considera la densidad Bart Simpson:
4
1 1 X
f (x) = (x; 0, 1) + (x; (j/2) 1, 1/10),
2 10 j=0

donde (x, , ) es la densidad Normal con media y desviacin estndar .


Para tamaos de muestra 25, 50, 100 y 1000, realiza lo siguiente:
a) Simula 800 muestras y para cada una de ellas estima por Kernel la densidad. Utiliza dos opciones de
Kernel y el ancho de banda que R calcula por Default.
b) Para cada Kernel que usaste, realiza una grfica donde muestres bandas calculadas con el mximo y el
mnimo de las 800 densidades estimadas, as como la densidad real de la que provienen los datos y un
rug de los puntos observados.
c) Compara los resultados y analiza la influencia del Kernel utilizado y del tamao de muestra en las
bandas obtenidas. Comenta tus resultados.
Incisos a) y b)
set.seed(4)

library(ftnonpar)
for(i in 1:4){
n<- 25*i
if(n==75) {
n=100
}
if(n==100){
n=1000
}
m<- 800
muest_bart<- c()
mu_bart<- c()
anchos_bart<- c()
anc_bart<- c()
l<- n*m

muest_bart<- rclaw(l)

mu_bart<- matrix(muest_bart, ncol=n,byrow=T)

for(j in 1:m){
anchos_bart[j]<- density(mu_bart[j,],from=-3,to=3,kernel=c("gaussian"))$bw
}
max_bart<- max(anchos_bart)
min_bart<- min(anchos_bart)

10
for(j in 1:m){
anc_bart<- density(mu_bart[j,],from=-3,to=3,kernel=c("gaussian"))$bw
if (anc_bart==max_bart){
dmax<- density(mu_bart[j,],from=-3,to=3,kernel=c("gaussian"))
}
}

for(j in 1:m){
anc_bart<- density(mu_bart[j,],from=-3,to=3,kernel=c("gaussian"))$bw
if (anc_bart==min_bart){
dmin<- density(mu_bart[j,],from=-3,to=3,kernel=c("gaussian"))
}
}

plot(dmax,ylim=c(0,1),main = "Estimacin de la densidad",col="green")


curve(dclaw(x), add = TRUE, col = "tomato")
lines(dmin, col= "blue")
legend(x=1,y=1,legend=c("Densidad Bart", "Densidad minima", "Densidad mxima"),lty=c(1,1,1),col=c("tomat

Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 25 Bandwidth = 0.5669

11
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 50 Bandwidth = 0.5085

12
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 1000 Bandwidth = 0.2102

13
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 1000 Bandwidth = 0.2099

set.seed(4)

library(ftnonpar)
for(i in 1:4){
n<- 25*i
if(n==75) {
n=100
}
if(n==100){
n=1000
}
m<- 800
muest_bart<- c()
mu_bart<- c()
anchos_bart<- c()
anc_bart<- c()
l<- n*m

muest_bart<- rclaw(l)

mu_bart<- matrix(muest_bart, ncol=n,byrow=T)

for(j in 1:m){
anchos_bart[j]<- density(mu_bart[j,],from=-3,to=3,kernel=c("epanechnikov"))$bw
}
max_bart<- max(anchos_bart)

14
min_bart<- min(anchos_bart)

for(j in 1:m){
anc_bart<- density(mu_bart[j,],from=-3,to=3,kernel=c("epanechnikov"))$bw
if (anc_bart==max_bart){
dmax<- density(mu_bart[j,],from=-3,to=3,kernel=c("epanechnikov"))
}
}

for(j in 1:m){
anc_bart<- density(mu_bart[j,],from=-3,to=3,kernel=c("epanechnikov"))$bw
if (anc_bart==min_bart){
dmin<- density(mu_bart[j,],from=-3,to=3,kernel=c("epanechnikov"))
}
}

plot(dmax,ylim=c(0,1),main = "Estimacin de la densidad",col="green")


curve(dclaw(x), add = TRUE, col = "tomato")
lines(dmin, col= "blue")
legend(x=1,y=1,legend=c("Densidad Bart", "Densidad minima", "Densidad mxima"),lty=c(1,1,1),col=c("tomat

Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 25 Bandwidth = 0.5669

15
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 50 Bandwidth = 0.5085

16
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 1000 Bandwidth = 0.2102

17
Estimacin de la densidad
1.0

Densidad Bart
Densidad minima
0.8

Densidad mxima
0.6
Density

0.4
0.2
0.0

3 2 1 0 1 2 3

N = 1000 Bandwidth = 0.2099

Inciso c): Como era de esperarse, la estimacin de la densidad se va haciendo ms precisa mientras el
tamao de la muestra crece, lo cual se puede observar con las curvas azules y verdes, las cuales tambin van
acercndose ms a medida que crece el tamao de la muestra.
Sin embargo, la influencia del kernel utilizado si tiene repercusiones, aunque sean mnimas, al momento de
estimar la densidad de la funcin, ya que el segundo kernel utilizado, el epanechnikov, a nuestro parecer, tiene
una ligera precisin que mejora la estimacin de la densidad real, su curvatura es ms redonda y esto hace
que la densidad se guarde bien dentro de la densidad estimada.

Ejercicio 4
La funcin ksmooth sirve para plantear una regresin no paramtrica por kernel con el estimador de Nadaraya-
Watson. El conjunto de datos cars corresponde a datos tomados en 1920 de la velocidad del auto (xi ) y la
distancia necesaria para detenerlo por completo a esa velocidad (yi ). A partir del siguiente cdigo, responde
lo que se pide.
with(cars, {
plot(speed, dist)
lines(ksmooth(speed, dist, "normal", bandwidth = 2), col = 2, lwd = 2)
lines(ksmooth(speed, dist, "normal", bandwidth = 5), col = 3, lwd = 2)
})

18
100 120
80
dist

60
40
20
0

5 10 15 20 25

speed

a) Explica cmo funciona la funcin ksmooth y cul es la diferencia entre las dos curvas ajustadas.
b) Evala el ajuste de ambas curvas (proponer grficas, estadsticos) y compara en base a tus resultados
cul de las dos ajusta mejor a los datos. Puedes proponer otra curva ajustada por el mismo mtodo si
crees que es mejor que las dos mostradas.
c) Evala el poder predictivo de cada uno de los modelos. Parte la muestra en dos y ajusta con 25
datos tomados al azar del total (cars). Ajustars ambas curvas P con el mismo conjunto de datos.
r
Posteriormente, calcula la suma de cuadrados del error de prediccin i=1 (m(xi ) yi )2 para los r = 25
datos que no tomaste en cuenta para el ajuste y a partir de ello concluye qu modelo tiene mejor poder
predictivo.
Inciso a):
La funcion ksmooth, como dice el planteamineto del problema, nos ayuda a encontrar una curva de regresin
por kernel por estimacn de Nadaraya-Watson. Esta funcin tiene como argumentos los valores en x y sus
respectivos valores observados en y, estima el kernel mediante nicamente dos maneras, normal o box, y
se puede fijar asimismo el ancho de banda h con el que se estimar la regresin. Esto ltimo es justamente lo
que diferenca a una curva de la otra.
La curva de color rojo ajusta los datos con un ancho de banda menor que el de la curva verde, lo que hace
que su estimacin sea un poco ms ruidosa, y la curva verde, al tener un ancho de banda mayor, hace que
su recta de regresin sea suave, pero subestima los datos.
Inciso b):
A simple vista podemos observar que la curva roja nos arroja un mejor ajuste de los datos, sin embargo,
utilizaremos al error cuadrtico medio de ambas curvas para ver cul es el menor:

19
set.seed(4)

rojo1<-ksmooth(cars[,1],cars[,2], "normal", bandwidth=2, n.points = 50)$y

error1 <- c()


for(i in 1:50){
error1[i] <- c((rojo1[i]-cars[i,2])^2)
}
errorrojo<-sum(error1)
print('error cuadrtico de la curva roja')

## [1] "error cuadrtico de la curva roja"


errorrojo

## [1] 8808.628
verde1<-ksmooth(cars[,1],cars[,2], "normal", bandwidth=5, n.points = 50)$y

error2 <- c()


for(i in 1:50){
error2[i] <- c((verde1[i]-cars[i,2])^2)
}
errorverde<-sum(error2)
print('error cuadrtico de la curva verde')

## [1] "error cuadrtico de la curva verde"


errorverde

## [1] 9728.964
Con estos resultados, que pudieran saltar, ya que son errores cuadrticos muy grandes, que tienen su razn
de ser, ya que las cantidades en y se miden en kilmetros y hay datos muy separados unos de otros, podemos
observar que, efectivamente, la curva roja tiene un error cuadrtico menor, lo que nos dice que la curva est
menor alejada, en conjunto, de los datos reales. Por lo que la curva roja, al tener un ancho de banda mayor,
se ajusta mejor a los datos observados.
Ahora, ajustamos una curva con un ancho de banda menor, que reemos que ajusta mejor a los datos. Esta
curva estar representada en color azul.
set.seed(4)
with(cars, {
plot(speed, dist)
lines(ksmooth(speed, dist, "normal", bandwidth = 2), col = "red", lwd = 2)
lines(ksmooth(speed, dist, "normal", bandwidth = 5), col = "green", lwd = 2)
lines(ksmooth(speed, dist, "normal",bandwidth = 1), col = "blue", lwd = 2)

legend(x=5,y=100,legend=c("Ancho de banda 5", "Ancho de banda 2", "Ancho de banda 1"),lty=c(1,1,1),col


})

20
100 120

Ancho de banda 5
80

Ancho de banda 2
Ancho de banda 1
dist

60
40
20
0

5 10 15 20 25

speed

Inciso c):
set.seed(4)

#Hacemos la muestra aleatoria de datos

muestracarr<-list(c(),c())
carrito<-sample(1:50,25)
d<-sort(carrito)

for(i in 1:25){
muestracarr[[1]][i]<-cars[d[i],1]
muestracarr[[2]][i]<-cars[d[i],2]
}

#Graficamos las curvas de regresin para esta muestra

with(cars, {
plot(muestracarr[[1]], muestracarr[[2]])
lines(ksmooth(muestracarr[[1]], muestracarr[[2]], "normal", bandwidth = 2), col = 2, lwd = 2)
lines(ksmooth(muestracarr[[1]], muestracarr[[2]], "normal", bandwidth = 5), col = 3, lwd = 2)
})

21
80
muestracarr[[2]]

60
40
20
0

5 10 15 20

muestracarr[[1]]

set.seed(4)

#Obtenemos los datos que no usamos


carrito1<-cars[-carrito,]

#Obtenemos su errores cuadrticos medios

carris1<-ksmooth(carrito1[,1],carrito1[,2], "normal", bandwidth=2, n.points = 25)$y

error3 <- c()


for(i in 1:25){
error3[i] <- c((carris1[i]-carrito1[[2]][i])^2)
}
errorcarojo<-sum(error3)
print('error cuadrtico de la curva roja')

## [1] "error cuadrtico de la curva roja"


errorcarojo

## [1] 5702.97
carrito1<-cars[-carrito,]

#Obtenemos su errores cuadrticos medios

carris2<-ksmooth(carrito1[,1],carrito1[,2], "normal", bandwidth=5, n.points = 25)$y

22
error4 <- c()
for(i in 1:25){
error4[i] <- c((carris2[i]-carrito1[[2]][i])^2)
}
errorcaverde<-sum(error4)
print('error cuadrtico de la curva verde')

## [1] "error cuadrtico de la curva verde"


errorcaverde

## [1] 5006.003
Podemos observar que, en este caso, el error cuadrtico medio de la curva verde es menor, sin embargo, este
clculo fue para los datos que no estbamos tomando en cuenta para la curva de regresin. Es por ello que
concluimos que la curva roja, con un menor ancho de banda, es la que tiene mejor poder predictivo.

Ejercicio 5
Considera los siguientes datos
x <- seq(0.1, 3, by = 0.1)
y <- c(0.364, 0.6091, 1.0645, 1.441, 1.2857, 1.0492, 1.3081, 0.8637, 0.7529, 0.6188, -0.0023, -0.0487, 0
plot(x, y)
1.5
1.0
0.5
y

0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

a) Ajusta un spline cbico a los datos. Puedes proponer libremente el nmero de nodos y su localizacin.

23
b) Ajusta una curva de regresin con el estimador de Nadaraya-Watson.
c) Grafica ambas curvas junto con los puntos y compara su desempeo para explicar a los datos calculando
la suma de cuadrados del error de cada uno de los modelos. Anota tus conclusiones.
Solucin del inciso a):
Ajustamos primero un modelo cbico:
set.seed(4)

#Ajustamos un modelo cbico:


X <- cbind(rep(1,30),x )
X2 <- cbind(X,x^2,x^3)
beta2<-solve(t(X2)%*%X2,t(X2)%*%y)
yhat2 <- X2%*%beta2

plot(x, y, xlab="", ylab="", col="red", main="Ajuste de un Modelo Lineal")


lines(x,yhat2,col="green",lwd=2 )

Ajuste de un Modelo Lineal


1.5
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

Ahora ajustamos un modelo lineal (cbico) a trozos, continuo en los 2 nodos que elegimos:
set.seed(4)
#Matriz de diseo, tomando en cuenta que tenemos 30 datos

X2 <- matrix(0,30,12)
X2[1:10 ,1] = 1; X2[1:10 ,2] = x[1:10]
X2[1:10,3] = x[1:10]^2 ; X2[1:10,4] = x[1:10]^3
X2[11:18 ,5] = 1; X2[11:18 ,6] = x[11:18]

24
X2[11:18 ,7] = x[11:18]^2; X2[11:18 ,8] = x[11:18]^3
X2[19:30 ,9] = 1; X2[19:30 ,10] = x[19:30]
X2[19:30 ,11] = x[19:30]^2; X2[19:30 ,12] = x[19:30]^3

b2.est<-solve(t(X2)%*%X2,t(X2)%*%y) #Coeficientes Estimados

#Para la continuidad en los nodos

K2 <- matrix(0,12,2)
K2[1:8,1] <- c(1,1,1,1,-1,-1,-1,-1)
K2[5:12,2] <- c(1,1.8,3.24,5.832,-1,-1.8,-3.24,-5.832)
b2r.est <- b2.est-solve(t(X2)%*%X2)%*%K2%*%solve( t(K2)%*%solve(t(X2)%*%X2)%*%K2 )%*%t(K2)%*%b2.est

plot(x, y, xlab="", ylab="", main="Ajuste de Modelos Cbicos a trozos, continuo en los nodos", col="red"
abline(v=c(1,1.8), col=gray(0.8))

# Agregar las lineas estimadas

#primer cuadrante
xa2 <- c(x[1:10] ,1); Xa2 = cbind(rep(1,11),xa2,xa2^2,xa2^3)
ya.est2 <- Xa2%*%b2r.est[1:4]
lines(xa2,ya.est2, col="blue", lwd=2)
#segundo cuadrante
xb2 <- c(1,x[11:18],1.8); Xb2 <- cbind(rep(1,times=10),xb2,xb2^2,xb2^3)
yb.est2 <- Xb2%*%b2r.est[5:8]
lines(xb2, yb.est2, col="blue", lwd=2)
#tercer cuadrante
xc2 <- c(1.8,x[19:30]); Xc2 <- cbind(rep(1,times=13),xc2,xc2^2,xc2^3)
yc.est2 <- Xc2%*%b2r.est[9:12]
lines(xc2, yc.est2, col="blue", lwd=2)

25
Ajuste de Modelos Cbicos a trozos, continuo en los nodos
1.5
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

A continuacin se proceder a ajustar el modelo con primeras y segundas derivadas continuas en los nodos:
set.seed(4)

K3 <- matrix(0,12,4)
K3[1:8,1] <- c(rep(1,4),-rep(1,4))
K3[5:12,2] <- c(1, 1.8, 3.24, 5.832, -1, -1.8, -3.24, -5.832)
K3[2:8,3] <- c(1:3,0,-(1:3))
K3[6:12,4] <- c(1,3.6,9.72,0,-1,-3.6,-9.72)

b3r.est <- b2.est-solve(t(X2)%*%X2)%*%K3%*%solve( t(K3)%*%solve(t(X2)%*%X2)%*%K3 )%*%t(K3)%*%b2.est

plot(x, y, xlab="", ylab="", col="red", main="Ajuste con continuidad en primeras derivadas")


abline(v=c(1,1.8), col=gray(0.8))
# Agregar las lineas estimadas
#primer cuadrante
xa3<- c(x[1:10] ,1); Xa3 = cbind(rep(1,11),xa3,xa3^2,xa3^3)
ya.est3 <- Xa3%*%b3r.est[1:4]
lines(xa3,ya.est3, col="blue", lwd=2)
#segundo cuadrante
xb3 <- c(1,x[11:18] ,1.8); Xb3 <- cbind(rep(1,times=10),xb3,xb3^2,xb3^3)
yb.est3 <- Xb3%*%b3r.est[5:8]
lines(xb3, yb.est3, col="blue", lwd=2)
#tercer cuadrante
xc3 <- c(1.8,x[19:30]); Xc3 <- cbind(rep(1,times=13),xc3,xc3^2,xc3^3)
yc.est3 <- Xc3%*%b3r.est[9:12]

26
lines(xc3, yc.est3, col="blue", lwd=2)

Ajuste con continuidad en primeras derivadas


1.5
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

Procedemos ahora a agregar la condicin de segundas derivadas continuas en los nodos, para lograr una
mayor suavidad.
set.seed(4)
k5 <- c(0,0,2,6,0,0,-2,-6,0,0,0,0)
k6 <- c(0,0,0,0,0,0,2,10.8,0,0,-2,-10.8)
K4 <- cbind(K3,k5,k6)

b4r.est <- b2.est-solve(t(X2)%*%X2)%*%K4%*%solve(t(K4)%*%solve(t(X2)%*%X2)%*%K4)%*%t(K4)%*%b2.est


plot(x, y, xlab="", ylab="", col="red", main="Spline Cbico con dos nodos y segundas derivadas continuas
abline(v=c(1,1.8), col=gray(0.8))

# Agregar las lineas estimadas

#primer cuadrante
xa4 <- c(x[1:10] ,1); Xa4 = cbind(rep(1,11),xa4,xa4^2,xa4^3)
ya.est4 <- Xa4%*%b4r.est[1:4]
lines(xa4,ya.est4, col="blue", lwd=2)
#segundo cuadrante
xb4 <- c(1,x[11:18] ,1.8); Xb4 <- cbind(rep(1,times=10),xb4,xb4^2,xb4^3)
yb.est4 <- Xb4%*%b4r.est[5:8]
lines(xb4, yb.est4, col="blue", lwd=2)

27
#tercer cuadrante
xc4 <- c(1.8,x[19:30]); Xc4 <- cbind(rep(1,times=13),xc4,xc4^2,xc4^3)
yc.est4 <- Xc4%*%b4r.est[9:12]
lines(xc4, yc.est4, col="blue", lwd=2)

Spline Cbico con dos nodos y segundas derivadas continuas


1.5
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

Para el inciso b)
Ajustamos una curva de regresin con el estimador de Nadarya-Watson, como se vio en el ejercicio anterior:
plot(x, y, xlab="", ylab="", main="Ajuste de Nadaraya-Watson")
lines(ksmooth(x,y, kernel="normal"), col="tomato")

28
Ajuste de NadarayaWatson
1.5
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

Para el inciso c) hacemos:


set.seed(4)
plot(x, y, xlab="", ylab="", main="Spline Cbico con dos nodos y segundas derivadas continuas")
abline(v=c(1,1.8), col=gray(0.8))

# Agregar las lineas estimadas

#primer cuadrante
xa4 <- c(x[1:10] ,1); Xa4 = cbind(rep(1,11),xa4,xa4^2,xa4^3)
ya.est4 <- Xa4%*%b4r.est[1:4]
lines(xa4,ya.est4, col="blue", lwd=2)
#segundo cuadrante
xb4 <- c(1,x[11:18] ,1.8); Xb4 <- cbind(rep(1,times=10),xb4,xb4^2,xb4^3)
yb.est4 <- Xb4%*%b4r.est[5:8]
lines(xb4, yb.est4, col="blue", lwd=2)
#tercer cuadrante
xc4 <- c(1.8,x[19:30]); Xc4 <- cbind(rep(1,times=13),xc4,xc4^2,xc4^3)
yc.est4 <- Xc4%*%b4r.est[9:12]
lines(xc4, yc.est4, col="blue", lwd=2)

lines(ksmooth(x,y, kernel="normal"), col="tomato", lwd=2)

legend(x=2,y=1.5,legend=c("Ajuste de a)", "Ajuste de N-W"),lty=c(1,1),col=c("blue", "tomato"),bg="white"

29
Spline Cbico con dos nodos y segundas derivadas continuas
1.5

Ajuste de a)
Ajuste de NW
1.0
0.5
0.0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

Calculamos el error cuadrtico medio:


set.seed(4)

#Para la curva calculada con un spline cbico

xa4_1 <- c(x[1:10]); Xa4_1 = cbind(rep(1,10),xa4_1,xa4_1^2,xa4_1^3)


ya.est4_1 <- Xa4_1%*%b4r.est[1:4]

xb4_1 <- c(x[11:18]); Xb4_1 <- cbind(rep(1,times=8),xb4_1,xb4_1^2,xb4_1^3)


yb.est4_1 <- Xb4_1%*%b4r.est[5:8]

xc4_1 <- c(x[19:30]); Xc4_1 <- cbind(rep(1,times=12),xc4_1,xc4_1^2,xc4_1^3)


yc.est4_1 <- Xc4_1%*%b4r.est[9:12]

errorspline<-sum((ya.est4_1-y[1:10])^2)+sum((yb.est4_1-y[11:18])^2)+sum((yc.est4_1-y[19:30])^2)
print('el error cuadrtico medio del modelo de regresin con un spline cbico es')

## [1] "el error cuadrtico medio del modelo de regresin con un spline cbico es"
errorspline

## [1] 1.36996
#Para la curva de Nadaraya Watson

30
madariaga<-ksmooth(x,y, "normal", n.points = 30)$y

error <- c()


for(i in 1:30){
error[i] <- c((madariaga[i]-y[i])^2)
}

errordos<- (sum(error))
print('el error cuadrtico medio del modelo de regresin por estimador de Nadaraya-Watson es')

## [1] "el error cuadrtico medio del modelo de regresin por estimador de Nadaraya-Watson es"
errordos

## [1] 1.534767
Podemos concluir de los valores de los errores cuadrticos medios de ambas curvas, que la curva que
construimos a travs de un spline cbico explica mejor los datos que la curva obtenida por el estimador de
Nadaraya-Watson, ya que este ltimo tiene un error cuadrtico mayor, es decir, la suma de las distancias de
los datos observados con respecto a los valores de x en la curva, es mayor que la del spline.
Esto nos lleva a que, ajustar un modelo, eligiendo los nodos precisos y condicionando su continuidad en estos
nodos y en sus derivadas, nos lleva a un modelo que describe mejor los datos, aun sin trabajar con estimacin
por kernels.
En resumen, todo el trabaj que cost programar el spline cbico continuo a trozos, vali la pena :)

31

Potrebbero piacerti anche