r - 如何为 R 中的每个变量提取 GAM {mgcv} 的拟合值?

标签 r gam mgcv

我正在寻找一种方法来添加模型中每个变量的预测值(真实的,非标准化的)

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

这是我的模型的总结:

> 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

预测值由这段代码提供:

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

结果是这样的:

    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
...

但我猜这些只是标准化的预测值而不是真实值(真实值应该没有负值!?)。

那么有人知道我必须在代码中修改什么才能获得真正的值(value)吗? 任何想法?谢谢!

最佳答案

不太确定我是否理解正确, 但 predict(model, type = "terms") 可能是您正在寻找的解决方案。

更新

我不认为这些是标准化的。可能有些系数只是负数。

考虑帮助文件 ?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)

下面的结果表明,这些实际上是用于每个预测变量计算拟合值的贡献(通过计算每个贡献的总和,然后添加截距和偏移量)。

> 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 

关于r - 如何为 R 中的每个变量提取 GAM {mgcv} 的拟合值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017133/

相关文章:

r - mgcv:如何设置样条线的结的数量和/或位置

r - 确定 R 中的类类型(S3 与 S4)

r - 将分布拟合到 R 中的给定频率值

r - 从 gamlss 对象中提取随机效应

r - gam 包上的命名空间说明符不起作用

r - 如何在具有相同名称的 2 个不同库中使用 2 个不同函数

r - 在 R 中,如何将分布在多行和多列中的 CSV 数据整理成三列格式?

r - R中的显着性检验,确定一列中的比例是否与单个变量中的另一列显着不同

r - 在 R 的 GAM 模型中处理具有特殊(非物理)值的数值变量

r - mgcv:如何使用 Tweedie 响应模型进行逐步回归?