Anda di halaman 1dari 30

REGRESI NONPARAMETRIK

• Model
  regresi nonparametrik secara
matematis dapat ditulis:
(1)
• Dengan adalah galat yang diasumsikan
terdistribusi di sekitar 0,
• f adalah fungsi regresi yang tidak di ketahui
FUNGSI SPLINE
• fungsi spline truncated order (m+1) (derajat m) didefinisikan sebagai fungsi
•  
dengan k titik-titik knot
1 ,  2 ...,  k ( a   1   2  ...   k  b ) yang disajikan dalam
bentuk sebagai berikut:
m k
f ( x)  
j 0
j x    j m ( x   j ) m
j

j 1

(3.1)
dengan fungsi truncated,

( x   j )
 ;x j  0
m

(x   j ) m
 

0 ;x j  0

• Koefisien (parameter) merupakan konstanta yang bernilai real dengan j=


0,1,...,m-1,m,m+1...,k+m. Biasanya a diambil dari nilai minimum dan b
diambil dari nilai maksimum data.
MODEL REGRESI SPLINE
• Apabila diberikan model nonparametrik:
y  f (x)  
• Bentuk umum regresi spline truncated
order (m+1) dengan satu variabel
prediktor adalah:
m k
y    j x   (3.2)
j
j m ( x   j  
) m

j 0 j 1
• data amatan (xi.yi) sebanyak n, maka
bentuk persamaan (3.2) menjadi
m k
yi    j xi    j  m ( xi   j ) m   i
j

j 0 j 1

• dapat ditulis ke dalam matriks sebagai


berikut.
Y (3.3)
 X 1δ 1  X 2 δ 2  ε
 y1 
y 
Y   2  merupakan nilai respon dengan matriks n x 1
 
 
 yn 
1 x1  x1m   0    m 1 
     
1 x2  x2m 
X1    1   m 2 
; δ1  ; δ2 
1        
     

1 xn  xnm 
  m    m k 

 ( x1  1 ) m
 ( x1   2 ) m
  ( x1   k ) m


 
(x  1 ) m ( x2   2 ) m  ( x2   k ) m
X2   2    
     
 

( x n  1 ) m
 ( xn   2 ) m
  ( xn   k ) m
 

Bentuk matriks dari persamaan regresi spline (3.3) dapat ditulis
sebagai berikut:
Y  Xβ  ε
(3.4)
 1 
dengan X   X 1 X2  dan β   
 2 
Estimasi parameter
Model (3.4) merupakan model regresi linier yang telah dimodifikasi .

Pendugaan terhadap vektor parameter β dilakukan dengan


menggunakan metode least square:
βˆ  (X T X)1 X T Y

Persamaan regresi spline dengan titik-titik knot yang diberikan


  1 ,...,  k  maka estimasi parameter β menjadi:
̂   (X T X  ) 1 X T Y (3.5)
ESTIMASI FUNGSI REGRESI
Fungsi penduga dari f (x) adalah:

fˆ ( x)  X  ˆ
 X  (X T X  ) 1 X T Y
 HY (3.6)
1
dengan H   X  (X  X  ) X 
T T
dan X  adalah matriks desain
berukuran n x (m+k+1) dari model yang membentuk penduga f
dan bergantung pada titik knot    1 ,...,  k  Dengan:
.
1 x1  x1m ( x1  1 ) m  ( x1   k ) m 
 
1 x2  x2m ( x2  1 ) m  ( x2   k ) m 
X  
       
 
1 xn  xnm ( xn  1 ) m  ( xn   k ) m 
Pemilihan Bandwidth Optimum
1. MSE(Mean Square Error)
2. CV (Cross Validation)
3. GCV (Generalized Cross Validation )
1. MSE
•  
=
2. CV

1 n
CV ()   ( y i  fˆ (i ) ) 2
n i 1
Dengan fˆ ( i ) menyatakan prediksi dari y i yang hanya meng-
gunakan n - 1 titik-titik data yaitu dengan meninggalkan data ke-
i.
fˆ (i )  fˆ i  hi ( y i  fˆ i ) /(1  hi )
3. GCV
Sintaks fs truncated
artinya y
x= 1,2,3,4,5
Y=.....?(2,2,2,3,4)

trun<-function(data,c,power) x=c(1,2,3,4,5)
{ trun(x,3,1)
#c:titik knot [1] 0 0 0 1 2
data[data<c]<-c
(data-c)^power
}

x=seq(5,12,length=10) y=2+0.5*x+trun(x,8,2)
trun(x,8,1) y
[1] 0.0000000 0.0000000 0.0000000 [1] 4.500000 4.888889 5.277778
0.0000000 0.1111111 0.8888889 1.6666667 5.666667 6.067901 7.234568 9.611111
[8] 2.4444444 3.2222222 4.0000000 [8] 13.197531 17.993827 24.000000
Contoh Gambar
#
x=seq(5,12,length=10)
n=length(x)

12
for(i in 1:n)
{if(x[i]<8)y[i]=2+0.5*x[i]

10
else y[i]=2+0.5*x[i]+(x[i]-8)
}
plot(x,y,type="l")

8
6

5 6 7 8 9 10 11 12

x
invers matrik dengan SVD
MPL<-function(x,eps=1e-009)
{
x<-as.matrix(x)
xsvd<-svd(x)
diago<-xsvd$d[xsvd$d>eps]
if(length(diago)==1)
{
xplus<-as.matrix(xsvd$v[,1])%*%t(as.matrix(xsvd$u[,1])/diago)
}
else
{
xplus<-
xsvd$v[,1:length(diago)]%*%diag(1/diago)%*%t(xsvd$u[,1:length(diago)])
}
return(xplus)
}
data X.phi=matrix(c(1,2,0,1,3,0,1,4,0,1,5,1),nrow=4,
#(2,3),(3,4),(4,8),(5,6) ncol=3,byrow=TRUE)
X=c(2,3,4,5) Y=matrix(c(3,4,8,6),nrow=4,ncol=1,byrow=TR
Y=c(3,4,8,6) UE)
Mis di ttk knot =4, beta.topi =(MPL(t(X.phi)%*%X.phi))%*
orde =2(der=1) %t(X.phi)%*%Y

Ytopi=X.phi%*%beta.topi

𝑋 𝜋 =¿
 
MSE=t(Y-Ytopi)%*%(Y-Ytopi)/4
I=matrix(c(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),nrow
=4,ncol=4)

H=X.phi%*%(MPL(t(X.phi)%*%X.phi))%*
  1 2 0  
Y=

[ ]
%t(X.phi)
1 3 0
𝑋 𝜋=
1 4 0 GCV= MSE*16/(sum(diag(I-H)))^2
1 5 1
Persamaan regresi spline dengan titik-titik knot yang diberikan
  1 ,...,  k  maka estimasi parameter β menjadi:
ˆ  (X T X  ) 1 X T Y (3.5)
Gcv:knot di titik data dan pd interval
gcv1<-function(x,y,m) mu<-w%*%beta
{ MSE<- t(y-mu) %*% (y-mu)/n
#m=orde I<-matrix(0,ncol=n,nrow=n)
n=length(y) for(i in 1: n)
r<-length(x) I[i,i]<-1
#k : ttk knot pada data GCV<-(n^2*MSE)/(sum(diag(I-h)))^2
k<-x[2:r-1] Gcv[j]<-GCV
# titik knot dlm interval }
#k=seq(min(x)+0.1,max(x)-0.1,length=10) R<-matrix(c(k,Gcv),nrow=v)
v<-length(k) sort.R<-R[order(R[,2]),]
Gcv<-matrix(nrow=v,ncol=1) S<-sort.R
for (j in 1:v) cat("Untuk spline order",m,"dengan 1 titik
{ knot, diperoleh knot optimal=",S[1,1],"
w<-matrix(0,ncol=m+1,nrow=n) dengan GCV minimum=",S[1,2])
for (i in 1:m) cat("\nBerikut nilai GCV dan letak titik
w[,i]<-x^(i-1) knotnya:\n")
for (i in m+1) cat("======================\n")
w[,i]<-trun(x,k[j],m-1) cat(" No Ttk knot GCV\n")
wtw<- t(w) %*% w cat("======================\n")
z<- MPL(wtw) S
beta<- z %*% (t(w) %*% y) }
h<- w %*% z %*% t(w) gcv1(X,Y,2)
> gcv1(X,Y,2)
Untuk spline order 2 dengan 1 titik knot, diperoleh knot optimal= 4 dengan GCV minimum= 6
Berikut nilai GCV dan letak titik knotnya:
======================
No Ttk knot GCV
======================
[,1] [,2]
[1,] 4 6.0
[2,] 2 6.3
[3,] 3 24.0

> gcv1(X,Y,3)
Untuk spline order 3 dengan 1 titik knot, diperoleh knot optimal= 4 dengan GCV minimum= 5.272743
Berikut nilai GCV dan letak titik knotnya:
======================
No Ttk knot GCV
======================
[,1] [,2]
[1,] 4 5.272743
[2,] 3 9.995511
[3,] 2 16.200000

> gcv1(X,Y,4)
Untuk spline order 4 dengan 1 titik knot, diperoleh knot optimal= 2 dengan GCV minimum= 12.53934
Berikut nilai GCV dan letak titik knotnya:
======================
No Ttk knot GCV
======================
[,1] [,2]
[1,] 2 12.53934
[2,] 3 27.23279
[3,] 4 209.91997
Sintaks Model Spline
model.spline<- cat("\n Spline orde",m)
function(prediktor,respon,m,knots=c(...)) cat("\n Titik Knots =
{ c( ",format(knots),")")
#m:orde
y<-respon cat("\n ************************")
n<-length(y) cat("\n Koefisen Estimasi")
k<-length(knots) cat("\n **************************")
w<-matrix(0, ncol=m+k, nrow=n) for(i in 1:(m+k))
for (i in 1:m) cat("\n beta[",i-1,"]
w[,i]<-prediktor^(i-1) ",format(beta[i]))
for(i in (m+1):(m+k)) cat("\n **************************")
w[,i]<-trun(prediktor,knots[i-m],m-1) plot(prediktor,respon,
wtw<-t(w)%*%w
z<-MPL(wtw) type="p",xlim=c(min(prediktor),max(pre
beta<-z%*%t(w)%*%y diktor)),
#GCV<-(n^2*MSE)/((sum(diag(I-h)))^2) ylim=c(min(respon)-2,max(respon)+2),
q<- xlab="X",ylab="X")
seq(min(prediktor),max(prediktor),length=100 title("Spline Fit")
0) par(new=T)
u<-matrix(0,ncol=m+k,nrow=1000) plot(q,festu, type="l",col="red",
for(i in 1:m)
u[,i]<-q^(i-1) xlim=c(min(prediktor),max(prediktor)),
for(i in (m+1):(m+k)) ylim=c(min(respon)-2,max(respon)+2),
u[,i]<-trun(q,knots[i-m],m-1) xlab=" ",ylab=" ")
festu<-u%*%beta }
model.spline(X,Y,2,c(4 ))
Orde 2,titiknot 4
> model.spline(X,Y,2,c(4 ))

Spline orde 2
Titik Knots = c( 4 )
*********************************
Koefisen Estimasi
*********************************
beta[ 0 ] -2.5
beta[ 1 ] 2.5
beta[ 2 ] -4
*********************************
Orde 3, titik knot di 4
> model.spline(X,Y,3,c(4 ))

Spline orde 3
Titik Knots = c( 4 )
*********************************
Koefisen Estimasi
*********************************
beta[ 0 ] 10
beta[ 1 ] -6.5
beta[ 2 ] 1.5
beta[ 3 ] -9
*********************************
Orde 4,titik knot 2
> model.spline(X,Y,4,c(2 ))

Spline orde 4
Titik Knots = c( 2 )
**********************************
Koefisen Estimasi

**********************************
beta[ 0 ] 13.30081
beta[ 1 ] 3.54878
beta[ 2 ] -9.52439
beta[ 3 ] 2.587398
beta[ 4 ] -4.087398

**********************************
Gcv:knot bkn di titik data
gcv1<-function(x,y,m,a,b) I<-matrix(0,ncol=n,nrow=n)
{ for(i in 1:n)
n=length(y) I[i,i]<-1
r<-length(x) GCV[j]<-(n^2*MSE)/(sum(diag(I-h)))^2
k<-seq(min(x)+a,max(x)-a,by=b) #Gcv[j]<-GCV
v<-length(k) }
GCV<-matrix(nrow=v,ncol=1) R<-matrix(c(k,GCV),nrow=v)
for (j in 1:v) sort.R<-R[order(R[,2]),]
{ S<-sort.R
w<-matrix(0,ncol=m+1,nrow=n) cat("Untuk spline order",m,"dengan 1
for (i in 1:m) titik knot, diperoleh knot
w[,i]<-x^(i-1) optimal=",S[1,1]," dengan GCV
for (i in m+1) minimum=",S[1,2])
w[,i]<-trun(x,k[j],m-1) cat("\nBerikut nilai GCV dan letak titik
wtw<- t(w) %*% w knotnya:\n")
z<- MPL(wtw) cat("======================\n")
beta<- z %*% (t(w) %*% y) cat(" No Ttk knot GCV\n")
h<- w %*% z %*% t(w) cat("======================\n")
mu<-w%*%beta S
MSE<- t(y-mu) %*% (y-mu)/n }
gcv1(X,Y,2,0.1,0.1)
> gcv1(X,Y,2,0.1,0.1)
Untuk spline order 2 dengan 1 titik knot, diperoleh knot optimal= 4.1 dengan GCV minimum= 6
Berikut nilai GCV dan letak titik knotnya:

====================== [14,] 3.6 14.000000


No Ttk knot GCV [15,] 3.5 16.200000
====================== [16,] 3.4 18.285714
[,1] [,2] [17,] 3.3 20.162791
[1,] 4.1 6.000000 [18,] 3.2 21.761194
[2,] 4.9 6.000000 [19,] 3.1 23.042553
[3,] 4.4 6.000000 [20,] 2.4 24.000000
[4,] 4.5 6.000000 [21,] 2.6 24.000000
[5,] 4.3 6.000000 [22,] 2.5 24.000000
[6,] 4.2 6.000000 [23,] 2.8 24.000000
[7,] 4.7 6.000000 [24,] 3.0 24.000000
[8,] 4.6 6.000000 [25,] 2.7 24.000000
[9,] 4.8 6.000000 [26,] 2.9 24.000000
[10,] 4.0 6.000000 [27,] 2.3 24.000000
[11,] 3.9 7.723404 [28,] 2.2 24.000000
[12,] 3.8 9.671642 [29,] 2.1 24.000000
[13,] 3.7 11.790698
 gcv1(X,Y,3,0.1,0.1)
 Untuk spline order 3 dengan 1 titik knot, diperoleh knot optimal= 4.6 dengan GCV minimum= 3.828694
Berikut nilai GCV dan letak titik knotnya:

======================
No Ttk knot GCV [14,] 2.2 25.556992
====================== [15,] 2.9 38.126619
[,1] [,2] [16,] 4.7 40.975376
[1,] 4.6 3.828694 [17,] 2.3 55.162514
[2,] 4.5 3.920054 [18,] 3.1 88.835937
[3,] 4.0 5.272743 [19,] 2.1 160.879045
[4,] 4.9 6.758776 [20,] 4.3 167.472314
[5,] 4.2 7.006621 [21,] 4.8 183.183404
[6,] 4.4 7.999281 [22,] 3.6 207.699741
[7,] 3.0 9.995511 [23,] 3.5 424.595943
[8,] 4.1 14.182669 [24,] 3.9 519.140612
[9,] 3.8 16.170197 [25,] 3.7 648.031105
[10,] 2.7 16.837708 [26,] 2.6 935.747051
[11,] 2.5 17.203750 [27,] 3.2 1052.771747
[12,] 2.8 20.044805 [28,] 3.3 1848.874983
[13,] 2.4 22.097943 [29,] 3.4 3609.143340
> gcv1(X,Y,4,0.1,0.1)
Untuk spline order 4 dengan 1 titik knot, diperoleh knot optimal= 4.2 dengan GCV minimum= 1.975057
Berikut nilai GCV dan letak titik knotnya:

====================== [14,] 4.5 18.797837


No Ttk knot GCV [15,] 4.9 21.656700
====================== [16,] 2.7 22.084778
[,1] [,2] [17,] 3.0 27.232786
[1,] 4.2 1.975057 [18,] 3.2 38.947674
[2,] 3.9 2.183847 [19,] 3.7 41.704294
[3,] 4.1 2.336336 [20,] 4.7 156.273442
[4,] 4.3 2.444889 [21,] 4.8 174.097501
[5,] 3.5 3.367624 [22,] 4.0 209.919972
[6,] 3.4 4.109944 [23,] 2.6 379.237967
[7,] 3.1 6.483925 [24,] 2.4 446.683680
[8,] 2.1 7.600400 [25,] 2.5 736.912448
[9,] 4.4 7.638937 [26,] 3.3 1350.896045
[10,] 3.6 10.759564 [27,] 2.9 2126.077321
[11,] 2.3 11.621248 [28,] 2.2 10414.029208
[12,] 2.8 13.584173 [29,] 3.8 17666.238659
[13,] 4.6 15.055841
> gcv1(X,Y,5,0.1,0.1)
Untuk spline order 5 dengan 1 titik knot, diperoleh knot optimal= 3.7 dengan GCV minimum= 2.378377
Berikut nilai GCV dan letak titik knotnya:

======================
No Ttk knot GCV [14,] 4.7 13.243243
====================== [15,] 4.4 15.523225
[,1] [,2] [16,] 2.9 15.782931
[1,] 3.7 2.378377 [17,] 4.9 16.815175
[2,] 3.5 2.983596 [18,] 4.8 18.521464
[3,] 2.6 4.883750 [19,] 2.5 26.910467
[4,] 3.0 4.909509 [20,] 4.1 38.043955
[5,] 2.2 8.095534 [21,] 3.6 38.370007
[6,] 2.7 9.898911 [22,] 2.4 39.418368
[7,] 2.1 10.009042 [23,] 2.3 61.178867
[8,] 4.2 10.814006 [24,] 3.2 85.971559
[9,] 3.9 11.314899 [25,] 4.6 148.117738
[10,] 4.0 11.378227 [26,] 3.8 1076.927315
[11,] 4.5 11.540132 [27,] 4.3 2257.210232
[12,] 2.8 12.795954 [28,] 3.1 4884.190125
[13,] 3.4 13.198643 [29,] 3.3 55546.118510
MODEL SPLINE
> model.spline(X,Y,2,c(4.1))

Spline orde 2
Titik Knots = c( 4.1 )

**********************************
Koefisen Estimasi

**********************************
beta[ 0 ] -2.5
beta[ 1 ] 2.5
beta[ 2 ] -4.444444

**********************************
Orde 3,titik knot di 4.6
> model.spline(X,Y,3,c(4.6))

Spline orde 3
Titik Knots = c( 4.6 )

**********************************
Koefisen Estimasi

**********************************
beta[ 0 ] 10
beta[ 1 ] -6.5
beta[ 2 ] 1.5
beta[ 3 ] -56.25

**********************************
Orde 4,titiknot di 4.2
> model.spline(X,Y,4,c(4.2 ))

Spline orde 4
Titik Knots = c( 4.2 )

**********************************
********************************
Koefisen Estimasi

**********************************
********************************
beta[ 0 ] 6.468396
beta[ 1 ] -2.674095
beta[ 2 ] 0.1756483
beta[ 3 ] 0.1471502
beta[ 4 ] -19.30254

**********************************
************
Orde 5,titik knot 3.7
> model.spline(X,Y,5,c(3.7))

Spline orde 5
Titik Knots = c( 3.7 )

**********************************
Koefisen Estimasi

**********************************
beta[ 0 ] 1.998212
beta[ 1 ] 1.301338
beta[ 2 ] -0.5546199
beta[ 3 ] 0.002755976
beta[ 4 ] 0.03722151
beta[ 5 ] -4.288136

**********************************

Anda mungkin juga menyukai