[R] Incorrect degrees of freedom for splines using GAMM4?
Simon Wood
s.wood at bath.ac.uk
Thu Aug 4 11:30:26 CEST 2011
Thanks for reporting this. It was a bug, now fixed in gamm4 0.1-3. Simon
On 19/07/11 22:16, Melinda Power wrote:
> Hello,
>
> I'm running mixed models in GAMM4 with 2 (non-nested) random intercepts and
> I want to include a spline term for one of my exposure variables. However,
> when I include a spline term, I always get reported degrees of freedom of
> less than 1, even when I know that my spline is using more than 1 degree of
> freedom. For example, here is the code for my model:
>
>> global.gamm4<-gamm4(zcog~s(adjpatx, fx=TRUE, k=5)+int234+cogagec+cogagesq
> +
> + + oldfran +newus +alc2 +alc3 +alc4 +alcmiss +smk2 +smk3
> + +mdinc10c +mdinc10sq+ pwhtc +pwhtsq +edu2+ edu3 +husbgs
> +husbcol+ husbmiss
> + +currpmh +pastpmh +neverpmh, random= ~(1|id)
> +(1|cogtest), data=global)
>
> Using> summary(global.gamm4$mer), I get the following output for my spline
> term, indicating that I use the expected 4 degrees of freedom.
>
> Xs(adjpatx)Fx1 0.1018943 0.1073225 0.949
> Xs(adjpatx)Fx2 -0.0708114 0.1123845 -0.630
> Xs(adjpatx)Fx3 0.7459511 0.6836413 1.091
> Xs(adjpatx)Fx4 -0.2062321 0.0923569 -2.233
>
> However, when I use> summary(global.gamm4$gam). I get an estimate of
> degrees of freedom that is not 4:
>
> Approximate significance of smooth terms:
> edf Ref.df F p-value
> s(adjpatx) 0.7588 0.7588 1.346 0.234
>
> This degree of freedom = 0.76 also shows up on my plot.
>
> Ultimately, I would like to use a cubic regression penalized spline,
> allowing R to choose the degrees of freedom for me using GCV. However, when
> I use the correct code for this or variants of it using mgcv, I also get
> degrees of freedom less than 1. For example, in the following code provides
> a degree of freedom of less than 1 as well:
>
>
>> global.gamm4<-gamm4(zcog~s(adjpatx, fx=FALSE)+int234+cogagec+cogagesq +
> + + oldfran +newus +alc2 +alc3 +alc4 +alcmiss +smk2 +smk3
> + +mdinc10c +mdinc10sq+ pwhtc +pwhtsq +edu2+ edu3 +husbgs
> +husbcol+ husbmiss
> + +currpmh +pastpmh +neverpmh, random= ~(1|id)
> +(1|cogtest), data=global)
>
> Output indicating that this spline should probably look linear:
>
>> summary(global.gamm4$mer)
> Random effects:
> Groups Name Variance Std.Dev.
> id (Intercept) 0.1823454 0.427019
> cogtest (Intercept) 0.0025498 0.050496
> Xr.1 s(adjtibx) 0.0000000 0.000000
> Residual 0.7782969 0.882211
>
> Xs(adjtibx)Fx1 -0.0387360 0.0215596 -1.797
>
>
> Output getting a df for this spline of 0.20.
>
>> summary(global.gamm4$gam)
>
> Approximate significance of smooth terms:
> edf Ref.df F p-value
> s(adjtibx) 0.2009 0.2009 16.07 NA
>
> The plot looks linear, but reports a df =0.20.
>
>
> So...to summarize my questions:
>
> 1. Are the splines produced by s(exp, fx=FALSE) or s(exp, fx=TRUE, k=k)
> correct even though the reported degrees of freedom appears to be wrong?
>
> 2. Can I believe my plot?
>
> 3. How can I get the true df used when I use s(exp, fx=FALSE)?
>
>
>
>
>
> Thanks for any and all help you can provide!
>
> Melinda
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Simon Wood, Mathematical Science, University of Bath BA2 7AY UK
+44 (0)1225 386603 http://people.bath.ac.uk/sw283
More information about the R-help
mailing list