reg_1derivWL {npregderiv}R Documentation

Estimating the first derivative of a regression function by the method of Wang and Lin (2015)

Description

The design data xdatxdat must be increasing and evenly spaced. The first derivative estimate is computed at uu that must be one of the design points xdatxdat from the interior region. The interior region excludes the first kk points with the smallest xdatxdat values (left boundary) and the last kk points with the largest xdatxdat values (right boundary).

Usage

reg_1derivWL(xdat, ydat, k, u)

Arguments

xdat

numerical vector of the increasing and evenly spaced design points

ydat

numerical vector of the corresponding data points

k

integer value of the smoothing parameter

u

an estimation point (scalar) that must be one of the xdatxdat points from the interior region

Details

The method's smoothing parameter kk shows how many data points are used from each side of an estimation point uu to compute the first derivative estimate at that point. Choose k<n/4k<n/4, where nn is the sample size. The value of k=0.1nk=0.1n can be taken as a starting point.

Value

The computed first derivative estimate (scalar) at the point uu.

References

Wang, W.W., Lin, L. (2015) http://www.jmlr.org/papers/v16/wang15b.html “Derivative Estimation Based on Difference Sequence via Locally Weighted Least Squares Regression”, Journal of Machine Learning Research, 16, 2617-2641.

See Also

reg_2derivWL

Examples

# EXAMPLE 1: Toy example
xdata=1:100
ydata=xdata^2
reg_1derivWL(xdata,ydata,10,30)

# EXAMPLE 2 (simulated data).
m=function(x)
  sin(2*pi*x)+log(6+5*x)
m1=function(x)                                           # first derivative of m
  2*pi*cos(2*pi*x)+5/(6+5*x)
N=300                       # sample size
xi=2*(1:N/N)-1              # equidistant design points
sigma=0.25                  # noise level used in the article
yi=m(xi)+rnorm(N,sd=sigma)  # generating data
K=0.1*N                     # selected value of the smoothing parameter k
x_inter=xi[(K+1):(N-K)]     # interior estimation region
N_inter=length(x_inter)     # number of points where the second derivative estimate is computed
M1=array(0,N_inter)         # Vector of estimated second derivatives at the points x_inter
for (i in 1:N_inter)
  M1[i]=reg_1derivWL(xi,yi,K,x_inter[i])
op=par(no.readonly=TRUE)
par(mfrow=c(1,2))
plot(xi,yi,pch=20,cex=1.7,main="Regression function and generated data",xlab="",ylab="",
     cex.axis=1.8,cex.main=1.5)
lines(xi,m(xi),'l',col="red",lwd=2)
title(xlab="argument",ylab="regression function",line=2.5,cex.lab=1.8)
legend(0.65,-0.4,lty="solid",col="red",lwd=2,legend="true regression function",bty="n",
       cex=1.45,seg.len=0.5)
plot(x_inter,M1,'l',lwd=2,main="Actual and estimated first derivative",xlab="",ylab="",
     cex.axis=1.8,cex.main=1.5)
lines(x_inter,m1(x_inter),'l',lwd=2,col="red")
title(xlab="argument",ylab="second derivative",line=2.5,cex.lab=1.8)
legend(0.6,-10,lty=c("solid","solid"),col=c("red","black"),lwd=c(2,2),
      legend=c("true first derivative", "estimate"),bty="n",cex=1.45,seg.len=0.5)
par(op)


# EXAMPLE 3: Estimating the first derivative of the deflection function for the data on
# deflection after film deposition scanned at 0 degrees.
# See Savchuk O., and Volinsky, A. (2020) for the experiment's description.
xdesign=wafer40$x_dat
ydata=wafer40$y_after_0
n_data=length(xdesign)                        # sample size (original)
n_new=1034                                    # reducing the number of points where the second
                                              # derivative is estimated.
K=ceiling(0.1*n_data)                         # value of the smoothing parameter
index=(K+1)+0:(n_new-1)*6                     # cutting about 10% of points from each side and
                                              # reducing the number of points where the second
                                              # derivative is estimated
x_inter=xdesign[index]                        # the values of argument where the second
                                              # derivative is to be estimated
y_inter=ydata[index]
Der1=array(0,n_new)
for (i in 1:n_new)
  Der1[i]=reg_1derivWL(xdesign,ydata,K,x_inter[i])
op=par(no.readonly=TRUE)
par(mfrow=c(1,2))
plot(xdesign*1000,ydata*10^6,pch=20,main="Deflection AFTER film deposition. Angle: 0 degrees.",
     xlab="",ylab="",cex.axis=1.8,cex.main=1.5)
title(ylab=expression(paste("deflection, ",mu,"m")),xlab="position, mm",line=2.25,cex.lab=1.8)
plot(x_inter*1000,Der1,'l',lwd=2,
     main="1-st derivative AFTER film deposition. Angle: 0 degrees.",
     xlab="",ylab="",cex.axis=1.8, cex.main=1.5)
title(ylab="first derivative of deflection", xlab="position, mm", line=2.5, cex.lab=1.8)
par(op)


[Package npregderiv version 1.0 Index]