#Spline
rk<-function(x,z){
return(((z-0.5)^2-1/12)*((x-0.5)^2-1/12)/4-((abs(x-z)-0.5)^4-0.5*(abs(x-z)-0.5)^2+7/240)/24)
}

#matriz diseño

#matrizX<-function(x,nodos){
#        n=length(x)
#        q=length(nodos)+2
#        X<-matrix(1,nr=n,nc=q)
#        X[,2]=x
#        for (i in 3:q){
#            X[,i]=rk(x,nodos[i-2])}
#return(X)
#}


matrizX<-function(x,nodos){
    n=length(x)
    q=length(nodos)+2
    X<-matrix(1,nr=n,ncol=q)
    X[,2]<-x
    X[,3:q]<-apply(as.matrix(nodos[1:length(nodos)]),1,function(u) {rk(x,u)})
    return(X)   
}

##cargamos los datos
setwd("C:/Users/leyenda/Desktop/master/Estadística_noparamétrica/Tema 4")
datos=read.csv2("volvo.csv")
y=datos$desgaste
x=datos$size
x=(x-min(x))/(max(x)-min(x))

##4 nodos
nodos=(1:4)/5

MX=matrizX(x,nodos)
modelo=lm(y~MX-1)
beta=modelo$coefficients
t=seq(0,1,by=0.01)
XT=matrizX(t,nodos)
spline=XT%*%beta
plot(x,y)
lines(t,spline,type="l")

#dos nodos
nodos=(1:2)/3

MX=matrizX(x,nodos)
modelo=lm(y~MX-1)
beta=modelo$coefficients
XT=matrizX(t,nodos)
spline=XT%*%beta
lines(t,spline,type="l",col="red")
