######################################################
#            REGRESIÓN Y ANÁLISIS DE DATOS           #
######################################################


data(airquality)
names(airquality)

airquality$Ozone
airquality$Temp


######################################################
# 1.- Analizar la distribución univariante           #
######################################################

#--Serie de tiempo

Ozone<-ts(airquality$Ozone,frequency=30)
windows()
plot(airquality$, type="o", ylab="Ozono")

Temperatura<-ts(airquality$Temp,frequency=30)
windows()
plot(Temperatura, type="o", ylab="Temperatura")


ind<-which(is.na(airquality$Ozone))
Ozone<-airquality$Ozone[-ind]
Temp<-airquality$Temp[-ind]


windows()
regresion<-lm(Ozone~Temp)
plot(regresion)

plot(Temp,Ozone)
abline(lm(Ozone~Temp))

windows()
par(mfrow=c(1,2))
plot(ecdf(Ozone),main="Ozono")
plot(ecdf(Temp),main="Temperatura")

par(mfrow=c(1,2))
plot(density(Ozone),main="Ozono")
plot(density(Temp),main="Temperatura")

shapiro.test(Ozone)
shapiro.test(Temp)

windows()
par(mfrow=c(1,2))
boxplot(Ozone,main="Ozono")
boxplot(Temp,main="Temperatura")

summary(Ozone)
summary(Temp)

plot(Ozone~Temp)


#######################################################
# 2.- Estimador local lineal                          #
#######################################################

K<-function(x){
return(1/sqrt(2*pi)*exp(-x^2/2))
}


S<-function(t,x,h,r){
#-- t vector de puntos donde se va a evaluar la función.
#-- x valores de la variable explicativa
#-- y valores de la variable respuesta    
#-- r exponente

    return(diag((t(K(outer(x,t,"-")/h)))%*%(outer(x,t,"-")^r)))
}

EstLL<-function(t,x,y,h){
#-- Esta función me devuelve la estimación por el estimador noparamétrico de la
#-- regresión de Nadaraya-Watson
#-- t vector de puntos donde se va a evaluar la función.
#-- x valores de la variable explicativa
#-- y valores de la variable respuesta
#-- h ventana de suavizado
    
    
    return( ( apply( t( K( outer(x,t,"-") /h) ) * ( S(t,x,h,2) - t(outer(x,t,"-")) * S(t,x,h,1) ),1,function(x) x/sum(x) ) )%*%y)
}

ll_nw<-function(x,y,h){
    return( (1/length(x)) * sum( ( (y - EstLL(x,x,y,h)) / (1 - ( K(0)*S(x,x,h,2) / apply( t( K( outer(x,x,"-") /h) ) * ( S(x,x,h,2) - t(outer(x,x,"-")) * S(x,x,h,1) ), 1, sum) )  ) )^2 ) )
   # return(apply((y - EstLL(x,x,y,h)) / (1 - ( K(0)*S(x,x,h,2) / apply( t( K( outer(x,x,"-") /h) ) * ( S(x,x,h,2) - t(outer(x,x,"-")) * S(x,x,h,1) ), 1, sum) )  ) )^2 ,1,mean)
}

h<-seq(1,20,by=0.5)
CV<-numeric()
for(i in 1:length(h)){CV[i]<-ll_nw(Temp,Ozone,h[i])}
plot(CV~h,type="l")


estimador_lineal_local<-EstLL(airquality$Temp[-ind][order(airquality$Temp[-ind])],airquality$Temp[-ind][order(airquality$Temp[-ind])],airquality$Ozone[-ind][order(airquality$Temp[-ind])],2)

plot(estimador_lineal_local~airquality$Temp[-ind][order(airquality$Temp[-ind])],type="l")

#########################################################
# 3.- Estimador de Nadaraya-Watson                      #
#########################################################

nw<-function(t,x,y,h){
#-- Esta función me devuelve la estimación por el estimador noparamétrico de la
#-- regresión de Nadaraya-Watson
#-- t vector de puntos donde se va a evaluar la función.
#-- x valores de la variable explicativa
#-- y valores de la variable respuesta
#-- h ventana de suavizado

return((K(outer(t,x,"-")/h)/apply(K(outer(t,x,"-")/h),1,sum))%*%y)

}

cv_nw<-function(x,y,h){
return(1/length(x) * sum( ((y - nw(x,x,y,h)) / (1 - (K(0)/ apply( K(outer(x,x,"-")/h) ,1,sum) ) ) )^2 ))
}

h<-seq(0.5,20,by=0.5)
CV<-numeric()
for(i in 1:length(h)){CV[i]<-cv_nw(Temp,Ozone,h[i])}
plot(CV~h,type="l")



estimador_nadaraya_watson<-nw(airquality$Temp[-ind],airquality$Temp[-ind],airquality$Ozone[-ind],2)
 

plot(airquality$Temp[-ind],estimador_nadaraya_watson,type="l")
