Rev 4692 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
c Part of R package KernSmoothc Copyright (C) 1995 M. P. Wandcc Unlimited use and distribution (see LICENCE).cccccccccc FORTRAN subroutine locpol.f ccccccccccc For computing an binned approximation to ac local bandwidth local polynomial kernel regression estimatorc of an arbitrary derivative of a regression function.c LINPACK is used for matrix inversion.c Last changed: 10/02/95subroutine locpol(xcnts,ycnts,idrv,delta,hdisc,Lvec,indic,+ midpts,M,iQ,fkap,ipp,ippp,ss,tt,Smat,Tvec,+ ipvt,cvest)integer i,j,k,ii,Lvec(*),M,iQ,mid,indic(*),midpts(*),ipvt(*),+ info,idrv,ipp,ippp,indssdouble precision xcnts(*),ycnts(*),fkap(*),hdisc(*),+ cvest(*),delta,ss(M,ippp),tt(M,ipp),+ Smat(ipp,ipp),Tvec(ipp),facc Obtain kernel weightsmid = Lvec(1) + 1do i=1,(iQ-1)midpts(i) = midfkap(mid) = 1.0d0do j=1,Lvec(i)fkap(mid+j) = exp(-(delta*j/hdisc(i))**2/2)fkap(mid-j) = fkap(mid+j)end domid = mid + Lvec(i) + Lvec(i+1) + 1end domidpts(iQ) = midfkap(mid) = 1.0d0do j=1,Lvec(iQ)fkap(mid+j) = exp(-(delta*j/hdisc(iQ))**2/2)fkap(mid-j) = fkap(mid+j)end doc Combine kernel weights and grid countsdo k = 1,Mif (xcnts(k).ne.0) thendo i = 1,iQdo j = max(1,k-Lvec(i)),min(M,k+Lvec(i))if (indic(j).eq.i) thenfac = 1.0d0ss(j,1) = ss(j,1) + xcnts(k)*fkap(k-j+midpts(i))tt(j,1) = tt(j,1) + ycnts(k)*fkap(k-j+midpts(i))do ii = 2,ipppfac = fac*delta*(k-j)ss(j,ii) = ss(j,ii)+ + xcnts(k)*fkap(k-j+midpts(i))*facif (ii.le.ipp) thentt(j,ii) = tt(j,ii)+ + ycnts(k)*fkap(k-j+midpts(i))*facendifend doendifend doend doendifend dodo k = 1,Mdo i = 1,ippdo j = 1,ippindss = i + j - 1Smat(i,j) = ss(k,indss)end doTvec(i) = tt(k,i)end docall dgefa(Smat,ipp,ipp,ipvt,info)call dgesl(Smat,ipp,ipp,ipvt,Tvec,0)cvest(k) = Tvec(idrv+1)end doreturnendcccccccccc End of locpol.f cccccccccc