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 10 i=1,(iQ-1)midpts(i) = midfkap(mid) = 1.0d0do 20 j=1,Lvec(i)fkap(mid+j) = exp(-(delta*j/hdisc(i))**2/2)fkap(mid-j) = fkap(mid+j)20 continuemid = mid + Lvec(i) + Lvec(i+1) + 110 continuemidpts(iQ) = midfkap(mid) = 1.0d0do 30 j=1,Lvec(iQ)fkap(mid+j) = exp(-(delta*j/hdisc(iQ))**2/2)fkap(mid-j) = fkap(mid+j)30 continuec Combine kernel weights and grid countsdo 40 k = 1,Mif (xcnts(k).ne.0) thendo 50 i = 1,iQdo 60 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 70 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))*facendif70 continueendif60 continue50 continueendif40 continuedo 80 k = 1,Mdo 90 i = 1,ippdo 100 j = 1,ippindss = i + j - 1Smat(i,j) = ss(k,indss)100 continueTvec(i) = tt(k,i)90 continuecall dgefa(Smat,ipp,ipp,ipvt,info)call dgesl(Smat,ipp,ipp,ipvt,Tvec,0)cvest(k) = Tvec(idrv+1)80 continuereturnendcccccccccc End of locpol.f cccccccccc