Hi Simon, Thanks for your reply. That is very helpful.
However, in the logistic regression example, there also appears to be a large difference in the p-values and estimates when comparing summary(model) # mgcv 1.7-11 summary(model,freq=F) # mgcv 1.7-17 These should be the same, right? But why is this not the case? The results are shown below, and are also explained in this post: http://r.789695.n4.nabble.com/mgcv-bam-very-large-standard-error-difference-between-versions-1-7-11-and-1-7-17-bug-tp4632173p4632491.html) With kind regards, Martijn # call in all versions model = bam(NoStandard3 ~ te(GeoX,GeoY,WordFreqLog.z,by=OldSpeakerContrast,d=c(2,1)) + OldSpeakerContrast + PopCntLog.z + s(Word,bs="re") + s(Placename,bs="re") + s(Word,PopAvgIncomeLog.z,bs="re") + s(Word,PopAvgAgeLog_residIncome.z,bs="re") + s(Word,PopCntLog.z,bs="re") + s(Word,YearRec.z,bs="re"),data=lexdst,family="binomial",method="REML") ### mgcv, version 1.7-11 #Family: binomial #Link function: logit # #Formula: #NoStandard3 ~ te(GeoX, GeoY, WordFreqLog.z, by = OldSpeakerContrast, # d = c(2, 1)) + OldSpeakerContrast + PopCntLog.z + s(Word, # bs = "re") + s(Placename, bs = "re") + s(Word, PopAvgIncomeLog.z, # bs = "re") + s(Word, PopAvgAgeLog_residIncome.z, bs = "re") + # s(Word, PopCntLog.z, bs = "re") + s(Word, YearRec.z, bs = "re") # #Parametric coefficients: # Estimate Std. Error z value Pr(>|z|) #(Intercept) -0.41610 0.14027 -2.966 0.00301 ** #OldSpeakerContrast1 0.44508 0.01934 23.009 < 2e-16 *** #PopCntLog.z -0.11673 0.02725 -4.284 1.83e-05 *** #--- #Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 # #Approximate significance of smooth terms: # edf Ref.df Chi.sq p-value #te(GeoX,GeoY,WordFreqLog.z):OldSpeakerContrast0 54.05 69.06 223.3 < 2e-16 #te(GeoX,GeoY,WordFreqLog.z):OldSpeakerContrast1 59.17 74.83 327.6 < 2e-16 #s(Word) 166.41 167.84 13756.0 < 2e-16 #s(Placename) 157.64 188.02 692.7 < 2e-16 #s(Word,PopAvgIncomeLog.z) 137.83 160.05 829.9 < 2e-16 #s(Word,PopAvgAgeLog_residIncome.z) 121.13 151.13 435.5 < 2e-16 #s(Word,PopCntLog.z) 97.12 133.97 205.5 7.01e-05 #s(Word,YearRec.z) 128.98 155.27 585.7 < 2e-16 # #R-sq.(adj) = 0.372 Deviance explained = 32.4% #REML score = 97450 Scale est. = 1 n = 69259 ### mgcv 1.7-17, summary(model,freq=F) #Family: binomial #Link function: logit # #Formula: #NoStandard3 ~ te(GeoX, GeoY, WordFreqLog.z, by = OldSpeakerContrast, # d = c(2, 1)) + OldSpeakerContrast + PopCntLog.z + s(Word, # bs = "re") + s(Placename, bs = "re") + s(Word, PopAvgIncomeLog.z, # bs = "re") + s(Word, PopAvgAgeLog_residIncome.z, bs = "re") + # s(Word, PopCntLog.z, bs = "re") + s(Word, YearRec.z, bs = "re") # #Parametric coefficients: # Estimate Std. Error z value Pr(>|z|) #(Intercept) -0.98150 0.52485 -1.870 0.0615 . #OldSpeakerContrast1 0.65497 0.68628 0.954 0.3399 #PopCntLog.z -0.11724 0.02726 -4.300 1.71e-05 *** #--- #Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 # #Approximate significance of smooth terms: # edf Ref.df Chi.sq p-value #te(GeoX,GeoY,WordFreqLog.z):OldSpeakerContrast0 53.62 68.48 221.4 <2e-16 #te(GeoX,GeoY,WordFreqLog.z):OldSpeakerContrast1 58.64 74.14 324.9 <2e-16 #s(Word) 166.41 168.00 14351.7 <2e-16 #s(Placename) 157.79 209.00 1160.0 <2e-16 #s(Word,PopAvgIncomeLog.z) 137.84 170.00 1062.1 <2e-16 #s(Word,PopAvgAgeLog_residIncome.z) 121.15 170.00 686.7 <2e-16 #s(Word,PopCntLog.z) 97.10 169.00 434.0 <2e-16 #s(Word,YearRec.z) 128.98 170.00 867.4 <2e-16 # #R-sq.(adj) = 0.372 Deviance explained = 32.4% #REML score = 97449 Scale est. = 1 n = 69259 Met vriendelijke groet, Martijn -- ******************************************* Martijn Wieling http://www.martijnwieling.nl wiel...@gmail.com +31(0)614108622 ******************************************* University of Groningen http://www.rug.nl/staff/m.b.wieling ******************************************* On Mon, Jun 11, 2012 at 10:34 AM, Simon Wood <s.w...@bath.ac.uk> wrote: > Dear Martijn, > > You are right that the change in the summary defaults was not a sensible > thing to do, and I'll change it back. However in the mean time you can use > 1.7-17 with summary(...,freq=FALSE), when you have random effects in the > model (it really shouldn't make a statistically meaningful difference > otherwise). > > I made the change because it leads to better p-value performance when > parametric model component are penalized using gam's `paraPen' argument, but > as you have demonstrated this then uses a fixed effects distribution that is > not really appropriate when there are random effects present. I should > probably just deal with the paraPen case in the paraPen documentation. > > Technically the difference here is that with freq=TRUE the covariance matrix > for the model coefficient estimators/predictions is taken to be > > (X'X+S)^{-1}X'X(X'X+S)^{-1}\sigma^2 > > where X is the model matrix and S the penalty matrix for the model (Gaussian > case, non-Gaussian also has weights). This is based on the fact that the > coefficient estimates/predictions are > \hat \beta = (X'X+S)^{-1}X'y > where y is the response data, and y_i iid N(0,\sigma^2). > > When freq=FALSE the covariance matrix is the one that comes from the > Bayesian/random effects view of the smoothing process, and is > > (X'X+S)^{-1}\sigma^2 > > The latter is usually what you want when you have true random effects in the > model (rather than smooths which are usually not in the model as true random > effects). > > best, > Simon > > > > On 03/06/12 18:45, Martijn Wieling wrote: >> >> Dear useRs, >> >> I've ran some additional analyses (see below), which strongly suggest >> the standard errors of the bam (and gam) function are much too low in >> mgcv version 1.7-17, at least when including an s(X,bs="re") term. >> Until this issue has been clarified, it's perhaps best to use an older >> version of mgcv (unfortunately, however, in earlier versions the >> p-value calculation of s(X,bs="re") is not correct). All analyses were >> conducted in R 2.15.0. >> >> My approach was the following: I created a mixed-effects regression >> model with a single random intercept and only linear predictors. In my >> view, the results using lmer (lme4) should be comparable to those of >> bam and gam (mgcv). This was the case when using an older version of >> mgcv (version 1.7-13), but this is not the case anymore in version >> 1.7-17. In version 1.7-17, the standard errors and p-values are much >> lower and very similar to those of a linear model (which does not take >> the random-effects structure into account). The R-code and results are >> shown below. (The results using gam are not shown, but show the same >> pattern.) >> >> Furthermore, note that the differences in standard errors become less >> severe (but still noticeable) when less data is involved (e.g., using >> only 500 rows as opposed to>100.000). Finally, when not including an >> s(X,bs="re") term, but another non-random-effect smooth, the standard >> errors do not appear to be structurally lower (only for some >> variables, but not by a great deal - see also below). >> >> With kind regards, >> Martijn Wieling >> University of Groningen >> >> #### lme4 model (most recent version of lme4) >> modelLMER<- lmer(RefPMIdistMeanLog.c ~ SpYearBirth.z*IsAragon + >> SpIsMale + (1|Key), data=wrddst) >> # Estimate Std. Error t value >> #SpYearBirth.z -0.012084 0.004577 -2.640 >> #IsAragon 0.138959 0.010040 13.840 >> #SpIsMale -0.003087 0.008290 -0.372 >> #SpYearBirth.z:IsAragon 0.015429 0.010159 1.519 >> >> >> #### mgcv 1.7-13, default (method = "REML") - almost identical to >> modelLMER >> modelBAMold<- bam(RefPMIdistMeanLog.c ~ SpYearBirth.z*IsAragon + >> SpIsMale + s(Key,bs="re"), data=wrddst) >> # Estimate Std. Error t value Pr(>|t|) >> #SpYearBirth.z -0.012084 0.004578 -2.640 0.00829 ** >> #IsAragon 0.138959 0.010042 13.838< 2e-16 *** >> #SpIsMale -0.003087 0.008292 -0.372 0.70968 >> #SpYearBirth.z:IsAragon 0.015429 0.010160 1.519 0.12886 >> >> >> #### mgcv 1.7-17, method = "REML" - standard errors greatly reduced >> # (comparable to standard errors of LM without random intercept) >> modelBAMnew<- bam(RefPMIdistMeanLog.c ~ SpYearBirth.z*IsAragon + >> SpIsMale + s(Key,bs="re"), data=wrddst); print(testje,cor=F) >> # Estimate Std. Error t value Pr(>|t|) >> #SpYearBirth.z -0.012084 0.001159 -10.428< 2e-16 *** >> #IsAragon 0.138959 0.002551 54.472< 2e-16 *** >> #SpIsMale -0.003087 0.002098 -1.471 0.141 >> #SpYearBirth.z:IsAragon 0.015429 0.002587 5.965 2.45e-09 *** >> >> #### lm results, standard errors comparable to mgcv 1.7-17 >> modelLM<- lm(RefPMIdistMeanLog.c ~ SpYearBirth.z*IsAragon + SpIsMale, >> data=wrddst) >> # Estimate Std. Error t value Pr(>|t|) >> #(Intercept) -0.025779 0.001653 -15.595< 2e-16 *** >> #SpYearBirth.z -0.011906 0.001182 -10.070< 2e-16 *** >> #IsAragon 0.139323 0.002603 53.531< 2e-16 *** >> #SpIsMale -0.003076 0.002140 -1.437 0.151 >> #SpYearBirth.z:IsAragon 0.015252 0.002639 5.780 7.49e-09 *** >> >> >> #### mgcv 1.7-17, default (method = "fREML") - completely different >> from previous models >> modelBAMfREML<- bam(RefPMIdistMeanLog.c ~ SpYearBirth.z*IsAragon + >> SpIsMale + s(Key,bs="re"), data=wrddst); print(testje,cor=F) >> # Estimate Std. Error t value Pr(>|t|) >> #(Intercept) -0.025391 0.106897 -0.238 0.812 >> #SpYearBirth.z -0.012084 0.076300 -0.158 0.874 >> #IsAragon 0.138959 0.166697 0.834 0.405 >> #SpIsMale -0.003087 0.138291 -0.022 0.982 >> #SpYearBirth.z:IsAragon 0.015429 0.168260 0.092 0.927 >> # >> #Approximate significance of smooth terms: >> # edf Ref.df F p-value >> #s(Key) -38.95 310 15.67<2e-16 *** >> >> >> #### differences w.r.t. standard smooths >> #### mgcv version 1.7-13 >> m2old<- bam(RefPMIdistMeanLog.c ~ s(GeoX,GeoY) + >> SpYearBirth.z*IsAragon + SpIsMale, data=wrddst, method="REML") >> ## RESULTS >> #Family: gaussian >> #Link function: identity >> # >> #Formula: >> #RefPMIdistMeanLog.c ~ s(GeoX, GeoY) + SpYearBirth.z * IsAragon + >> # SpIsMale >> # >> #Parametric coefficients: >> # Estimate Std. Error t value Pr(>|t|) >> #(Intercept) -0.001386 0.004982 -0.278 0.7809 >> #SpYearBirth.z -0.012950 0.001167 -11.097< 2e-16 *** >> #IsAragon 0.020532 0.023608 0.870 0.3845 >> #SpIsMale -0.004788 0.002219 -2.158 0.0309 * >> #SpYearBirth.z:IsAragon 0.015611 0.002600 6.005 1.92e-09 *** >> #--- >> #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 >> # >> #Approximate significance of smooth terms: >> # edf Ref.df F p-value >> #s(GeoX,GeoY) 27.11 28.14 126.2<2e-16 *** >> #--- >> #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 >> # >> #R-sq.(adj) = 0.0555 Deviance explained = 5.58% >> #REML score = 39232 Scale est. = 0.11734 n = 112608 >> >> >> #### mgcv version 1.7-17 >> m2new<- bam(RefPMIdistMeanLog.c ~ s(GeoX,GeoY) + >> SpYearBirth.z*IsAragon + SpIsMale, data=wrddst, method="REML") >> #Family: gaussian >> #Link function: identity >> # >> #Formula: >> #RefPMIdistMeanLog.c ~ s(GeoX, GeoY) + SpYearBirth.z * IsAragon + >> # SpIsMale >> # >> #Parametric coefficients: >> # Estimate Std. Error t value Pr(>|t|) >> #(Intercept) -0.001388 0.003938 -0.352 0.7245 >> #SpYearBirth.z -0.012950 0.001167 -11.098< 2e-16 *** >> #IsAragon 0.020543 0.018055 1.138 0.2552 >> #SpIsMale -0.004788 0.002215 -2.161 0.0307 * >> #SpYearBirth.z:IsAragon 0.015611 0.002600 6.005 1.92e-09 *** >> #--- >> #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 >> # >> #Approximate significance of smooth terms: >> # edf Ref.df F p-value >> #s(GeoX,GeoY) 27.11 28.14 126.2<2e-16 *** >> #--- >> #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 >> # >> #R-sq.(adj) = 0.0555 Deviance explained = 5.58% >> #REML score = 39232 Scale est. = 0.11734 n = 112608 >> >> >> On Sat, Jun 2, 2012 at 6:25 PM, Martijn Wieling<wiel...@gmail.com> wrote: >>> >>> Dear useRs, >>> >>> I reran an analysis with bam (mgcv, version 1.7-17) originally >>> conducted using an older version of bam (mgcv, version 1.7-11) and >>> this resulted in the same estimates, but much lower standard errors >>> (in some cases 20 times as low) and lower p-values. This obviously >>> results in a larger set of significant predictors. Is this result >>> expected given the improvements in the new version? Or this a bug and >>> are the p-values of bam in mgcv 1.7-17 too low? The summaries of both >>> versions are shown below to enable a comparison. >>> >>> In addition, applying the default method="fREML" (mgcv version 1.7-17) >>> on the same dataset yields only non-significant results, while all >>> results are highly significant using method="REML". Furthermore, it >>> also results in large negative (e.g., -8757) edf values linked to >>> s(X,bs="RE") terms. Is this correct, or is this a bug? The summary of >>> the model using method="fREML" is also shown below. >>> >>> I hope someone can shed some light on this. >>> >>> With kind regards, >>> Martijn Wieling, >>> University of Groningen >>> >>> ################################# >>> ### mgcv version 1.7-11 >>> ################################# >>> >>> Family: gaussian >>> Link function: identity >>> >>> Formula: >>> RefPMIdistMeanLog.c ~ s(GeoX, GeoY) + RefVratio.z + >>> IsSemiwordOrDemonstrative + >>> RefSoundCnt.z + SpYearBirth.z * IsAragon + PopCntLog_residGeo.z + >>> s(Word, bs = "re") + s(Key, bs = "re") >>> >>> Parametric coefficients: >>> Estimate Std. Error t value Pr(>|t|) >>> (Intercept) -0.099757 0.020234 -4.930 8.23e-07 *** >>> RefVratio.z 0.105705 0.013328 7.931 2.19e-15 *** >>> IsSemiwordOrDemonstrative 0.289828 0.046413 6.245 4.27e-10 *** >>> RefSoundCnt.z 0.119981 0.021202 5.659 1.53e-08 *** >>> SpYearBirth.z -0.011396 0.002407 -4.734 2.21e-06 *** >>> IsAragon 0.055678 0.033137 1.680 0.09291 . >>> PopCntLog_residGeo.z -0.006504 0.003279 -1.984 0.04731 * >>> SpYearBirth.z:IsAragon 0.015871 0.005459 2.907 0.00365 ** >>> --- >>> Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 >>> >>> Approximate significance of smooth terms: >>> edf Ref.df F p-value >>> s(GeoX,GeoY) 24.01 24.21 31.16<2e-16 *** >>> s(Word) 352.29 347.00 501.57<2e-16 *** >>> s(Key) 269.75 289.25 10.76<2e-16 *** >>> --- >>> Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 >>> >>> R-sq.(adj) = 0.693 Deviance explained = 69.4% >>> REML score = -22476 Scale est. = 0.038177 n = 112608 >>> >>> >>> ################################# >>> ### mgcv version 1.7-17, much lower p-values and standard errors than >>> version 1.7-11 >>> ################################# >>> >>> Family: gaussian >>> Link function: identity >>> >>> Formula: >>> RefPMIdistMeanLog.c ~ s(GeoX, GeoY) + RefVratio.z + >>> IsSemiwordOrDemonstrative + >>> RefSoundCnt.z + SpYearBirth.z * IsAragon + PopCntLog_residGeo.z + >>> s(Word, bs = "re") + s(Key, bs = "re") >>> >>> Parametric coefficients: >>> Estimate Std. Error t value Pr(>|t|) >>> (Intercept) -0.0997566 0.0014139 -70.552< 2e-16 *** >>> RefVratio.z 0.1057049 0.0006565 161.010< 2e-16 *** >>> IsSemiwordOrDemonstrative 0.2898285 0.0020388 142.155< 2e-16 *** >>> RefSoundCnt.z 0.1199813 0.0009381 127.905< 2e-16 *** >>> SpYearBirth.z -0.0113956 0.0006508 -17.509< 2e-16 *** >>> IsAragon 0.0556777 0.0057143 9.744< 2e-16 *** >>> PopCntLog_residGeo.z -0.0065037 0.0007938 -8.193 2.58e-16 *** >>> SpYearBirth.z:IsAragon 0.0158712 0.0014829 10.703< 2e-16 *** >>> --- >>> Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 >>> >>> Approximate significance of smooth terms: >>> edf Ref.df F p-value >>> s(GeoX,GeoY) 24.01 24.21 31.15<2e-16 *** >>> s(Word) 352.29 347.00 587.26<2e-16 *** >>> s(Key) 269.75 313.00 4246.76<2e-16 *** >>> --- >>> Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 >>> >>> R-sq.(adj) = 0.693 Deviance explained = 69.4% >>> REML score = -22476 Scale est. = 0.038177 n = 112608 >>> >>> >>> ################################# >>> ### mgcv version 1.7-17, default: method="fREML", all p-values >>> non-significant and negative edf's of s(X,bs="re") >>> ################################# >>> >>> Family: gaussian >>> Link function: identity >>> >>> Formula: >>> RefPMIdistMeanLog.c ~ s(GeoX, GeoY) + RefVratio.z + >>> IsSemiwordOrDemonstrative + >>> RefSoundCnt.z + SpYearBirth.z * IsAragon + PopCntLog_residGeo.z + >>> s(Word, bs = "re") + s(Key, bs = "re") >>> >>> Parametric coefficients: >>> Estimate Std. Error t value Pr(>|t|) >>> (Intercept) -0.099757 1.730235 -0.058 0.954 >>> RefVratio.z 0.105705 1.145329 0.092 0.926 >>> IsSemiwordOrDemonstrative 0.289828 4.167237 0.070 0.945 >>> RefSoundCnt.z 0.119981 1.901158 0.063 0.950 >>> SpYearBirth.z -0.011396 0.034236 -0.333 0.739 >>> IsAragon 0.055678 0.298629 0.186 0.852 >>> PopCntLog_residGeo.z -0.006504 0.041981 -0.155 0.877 >>> SpYearBirth.z:IsAragon 0.015871 0.077142 0.206 0.837 >>> >>> Approximate significance of smooth terms: >>> edf Ref.df F p-value >>> s(GeoX,GeoY) -1376 1 7.823 0.00516 ** >>> s(Word) -8298 347 577.910< 2e-16 *** >>> s(Key) -1421 316 13.512< 2e-16 *** >>> --- >>> Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1 >>> >>> R-sq.(adj) = 0.741 Deviance explained = 69.4% >>> fREML score = -22476 Scale est. = 0.038177 n = 112608 >> >> >> > > > -- > Simon Wood, Mathematical Science, University of Bath BA2 7AY UK > +44 (0)1225 386603 http://people.bath.ac.uk/sw283 ______________________________________________ R-help@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.