Jean-Luc Dupouey
2013-Jul-27 18:50 UTC
[R] smooth.spline gives different results from sreg ?
Dear R-helpers, I compared various programs for cubic spline smoothing, and it appeared that smooth.spline ( stats version 3.0.1) seems to behave surprisingly. For enough long series and low values of lambda (or spar), the results of smooth.spline seem to be different from those of sreg ( package fields version 6.8), Octave (=MATLAB) or SAS. These three last softwares always gave the same results. Here is a script which shows the problem: #generate a random series of 2000 values set.seed(1) MyData=data.frame(Time=1:2000,Val=runif(1000)) #calculate the sreg cubic smoothing spline with a given lambda parameter (0.006 here) library(fields) SplineFields=sreg(MyData$Time,MyData$Val,lambda=0.006) #keep the minimim fitted value (or any other from a long list of possible values) ValMin=min(SplineFields$fitted.values) TimeValMin=which.min(SplineFields$fitted.values) #calculations of all possible fitted values at the TimeValMin point with smooth.spline, #varying the spar parameter in the range of all its possible values SplineRValMin=sapply(seq(-0.5,2.5,0.1), function(Ispar) { SplineR=smooth.spline(MyData$Time,MyData$Val,spar=Ispar) SplineR$y[TimeValMin]}) #None of the smooth.spline fitted values reach the one calculated with sreg ! Lim=range(ValMin,SplineRValMin) #smooth.spline values plot(seq(-0.5,2.5,0.1),SplineRValMin,type="l",ylim=Lim) #sreg value abline(h=ValMin) I hope there is no real problem here, but only some misunderstanding from my side, because cubic splines are very often used. Best regards, Jean-Luc Dupouey -- INRA-Nancy University Forest Ecology and Ecophysiology Unit F-54280 Champenoux mail:dupouey@nancy.inra.fr [[alternative HTML version deleted]]
Duncan Murdoch
2013-Jul-27 23:10 UTC
[R] smooth.spline gives different results from sreg ?
On 13-07-27 2:50 PM, Jean-Luc Dupouey wrote:> Dear R-helpers, > > I compared various programs for cubic spline smoothing, and it appeared > that smooth.spline ( stats version 3.0.1) seems to behave surprisingly. > For enough long series and low values of lambda (or spar), the results > of smooth.spline seem to be different from those of sreg ( package > fields version 6.8), Octave (=MATLAB) or SAS. These three last softwares > always gave the same results.Did you read the ?smooth.spline help page, in particular the Details and Note sections? They indicate that the default computation makes some efficiency simplifications. Duncan Murdoch> > Here is a script which shows the problem: > > #generate a random series of 2000 values > > set.seed(1) > MyData=data.frame(Time=1:2000,Val=runif(1000)) > > #calculate the sreg cubic smoothing spline with a given lambda parameter > (0.006 here) > > library(fields) > > SplineFields=sreg(MyData$Time,MyData$Val,lambda=0.006) > > #keep the minimim fitted value (or any other from a long list of > possible values) > > ValMin=min(SplineFields$fitted.values) > TimeValMin=which.min(SplineFields$fitted.values) > > #calculations of all possible fitted values at the TimeValMin point with > smooth.spline, > #varying the spar parameter in the range of all its possible values > > SplineRValMin=sapply(seq(-0.5,2.5,0.1), > function(Ispar) { > SplineR=smooth.spline(MyData$Time,MyData$Val,spar=Ispar) > SplineR$y[TimeValMin]}) > > #None of the smooth.spline fitted values reach the one calculated with > sreg ! > > Lim=range(ValMin,SplineRValMin) > > #smooth.spline values > plot(seq(-0.5,2.5,0.1),SplineRValMin,type="l",ylim=Lim) > > #sreg value > abline(h=ValMin) > > I hope there is no real problem here, but only some misunderstanding > from my side, because cubic splines are very often used. Best regards, > > Jean-Luc Dupouey >