How to extract the set GAM values ​​{mgcv} for each variable in R?

I am looking for a method to add the predicted (real, not standardized) values ​​of each individual variable in my model

> model<-gam(LN_Brutto~s(agecont,by=Sex)+factor(Sex)+te(Month,Age)+s(Month,by=Sex), data=bears)

This is a summary of my model:

 > summary(m13) Family: gaussian Link function: identity Formula: LN_Brutto ~ s(agecont, by = Sex) + factor(Sex) + te(Month, Age) + s(Month, by = Sex) Parametric coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 4.32057 0.01071 403.34 <2e-16 *** factor(Sex)m 0.27708 0.01376 20.14 <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(agecont):Sexf 8.1611 8.7526 20.170 < 2e-16 *** s(agecont):Sexm 6.6695 7.5523 32.689 < 2e-16 *** te(Month,Age) 10.3651 12.7201 6.784 2.19e-12 *** s(Month):Sexf 0.9701 0.9701 0.641 0.430 s(Month):Sexm 1.3750 1.6855 0.193 0.787 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Rank: 60/62 R-sq.(adj) = 0.781 Deviance explained = 78.7% GCV = 0.048221 Scale est. = 0.046918 n = 1093 

predicted values ​​are provided by this code:

 > predict<-predict(m13, type = "terms") 

And the result will look like this:

  factor(Sex) s(agecont):Sexf s(agecont):Sexm te(Month,Age) s(Month):Sexf s(Month):Sexm 1 0.2770806 0.000000000 0.111763696 -0.077845764 0.000000000 0.0007840912 2 0.2770806 0.000000000 0.240016156 -0.049143798 0.000000000 0.0007840912 3 0.2770806 0.000000000 0.034328752 0.046524454 0.000000000 -0.0058871897 4 0.0000000 -0.786533918 0.000000000 -0.067942427 0.021990192 0.0000000000 5 0.0000000 0.074434715 0.000000000 0.046524454 0.021990192 0.0000000000 6 0.0000000 0.161121563 0.000000000 0.089599601 0.021990192 0.0000000000 7 0.0000000 0.074434715 0.000000000 0.046524454 0.021990192 0.0000000000 8 0.2770806 0.000000000 -0.298597370 -0.007877328 0.000000000 -0.0058871897 ... 

But I think that these are just standardized predicted values, not real values ​​(real ones should not have negative values ​​!?).

So does anyone know what I need to change in the code to get real values? Any ideas? Thanks!

0
source share
2 answers

Not quite sure if I will follow you correctly, but predict(model, type = "terms") may be the solution you are looking for.

Update

I do not think they are standardized. Perhaps some of the odds are simply negative.

Consider the example from the help file ?mgcv:::predict.gam :

 library(mgcv) n<-200 sig <- 2 dat <- gamSim(1,n=n,scale=sig) b<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat) 

The results below show that this is actually the contribution that is used for each predictor to calculate the set values ​​(by calculating the sum of each of these contributions, and then adding the intercept and offset).

 > head(predict(b)) 1 2 3 4 5 6 9.263322 2.822200 7.137201 4.902631 14.558401 11.889092 > head(rowSums(predict(b, type = "terms")) + attr(predict(b, type = "terms"), "constant") + dat$x3) 1 2 3 4 5 6 9.263322 2.822200 7.137201 4.902631 14.558401 11.889092 
+2
source

To return the predicted values ​​at the same response scale, you need to set predict(model, type = "response")

By default, the game uses type = "link", which returns a linear predictor and often with standard errors (in this case, you found positive and negative values).

Read more on the help page ?mgcv::predict.gam .

0
source

All Articles