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 sstdg ccccccccccc For computing the diagonal entries of the "binned"c version of SS^T, where S is a smoother matrix forc local polynomial fitting.c Last changed: 10/02/95subroutine sstdg(xcnts,delta,hdisc,Lvec,indic,+ midpts,M,iQ,fkap,ipp,ippp,ss,uu,Smat,+ Umat,work,det,ipvt,SSTd)integer i,j,k,Lvec(*),M,iQ,mid,indic(*),midpts(*),+ ipvt(*),info,ii,ipp,ippp,indssdouble precision xcnts(*),fkap(*),hdisc(*),+ delta,ss(M,ippp),uu(M,ippp),Smat(ipp,ipp),+ Umat(ipp,ipp),SSTd(*),fac,work(*),det(2)c 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))uu(j,1) = uu(j,1) ++ xcnts(k)*fkap(k-j+midpts(i))**2do ii = 2,ipppfac = fac*delta*(k-j)ss(j,ii) = ss(j,ii)+ + xcnts(k)*fkap(k-j+midpts(i))*facuu(j,ii) = uu(j,ii)+ + xcnts(k)*(fkap(k-j+midpts(i))**2)*facend doendifend doend doendifend dodo k = 1,MSSTd(k) = dble(0)do i = 1,ippdo j = 1,ippindss = i + j - 1Smat(i,j) = ss(k,indss)Umat(i,j) = uu(k,indss)end doend docall dgefa(Smat,ipp,ipp,ipvt,info)call dgedi(Smat,ipp,ipp,ipvt,det,work,01)do i = 1,ippdo j = 1,ippSSTd(k) = SSTd(k) + Smat(1,i)*Umat(i,j)*Smat(j,1)end doend doend doreturnendcccccccccc End of sstdg cccccccccc