Rev 8255 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
c Part of R package KernSmoothc Copyright (C) 1995 M. P. Wandc Copyright (C) 2007-2023 B. D. Ripleycc Unlimited use and distribution (see LICENCE).cccccccc FORTRAN subroutine cp.f ccccccccccc For computing Mallow's C_p values for ac set of "Nmax" blocked q'th degree fits.c Last changed: 09/05/95c remove unused 'q' 2007-07-10c added type for info 2023-07-20subroutine cp(X,Y,n,qq,Nmax,RSS,Xj,Yj,coef,Xmat,wk,qraux,Cpvals)integer Nmax,n,qq,Nval,nj,i,j,k,idiv,ilow,iupp,infodouble precision RSS(Nmax),X(n),Y(n),Xj(n),Yj(n),coef(qq),wk(n),+ Xmat(n,qq),qraux(qq),Cpvals(NMax),fiti,RSSj,+ work(1)c It is assumed that the (X,Y) data arec sorted with respect to the X's.c Compute vector of RSS valuesdo i = 1,NmaxRSS(i) = dble(0)end dodo Nval = 1,Nmaxc For each number of partitionsidiv = n/Nvaldo j = 1,Nvalc For each member of the partitionilow = (j-1)*idiv + 1iupp = j*idivif (j.eq.Nval) iupp = nnj = iupp - ilow + 1do k = 1,njXj(k) = X(ilow+k-1)Yj(k) = Y(ilow+k-1)end doc Obtain a q'th degree fit over currentc member of partitionc Set up "X" matrixdo i = 1,njXmat(i,1) = 1.0d0do k = 2,qqXmat(i,k) = Xj(i)**(k-1)end doend docall dqrdc(Xmat,n,nj,qq,qraux,0,work,0)info=0call dqrsl(Xmat,n,nj,qq,qraux,Yj,wk,wk,coef,wk,wk,00100,info)RSSj = dble(0)do i = 1,njfiti = coef(1)do k = 2,qqfiti = fiti + coef(k)*Xj(i)**(k-1)end doRSSj = RSSj + (Yj(i)-fiti)**2end doRSS(Nval) = RSS(Nval) + RSSjend doend doc Now compute array of Mallow's C_p values.do i = 1,NmaxCpvals(i) = ((n-qq*Nmax)*RSS(i)/RSS(Nmax)) + 2*qq*i - nend doreturnendcccccccccc End of cp.f cccccccccc