精华内容
下载资源
问答
  • 广义相加模型(GAM)及R实现

    万次阅读 多人点赞 2019-03-25 21:41:57
    当解释变量与效应变量间关系不明确时,通常可以使用广义相加模型来检测比变量间是否具有非线性关系。 广义相加模型通过光滑样条函数、核函数或者局部回归光滑函数,对变量进行拟合。GAM采用模型中的每个预测变量并...

    当解释变量与效应变量间关系不明确时,通常可以使用广义相加模型来检测比变量间是否具有非线性关系。

    广义相加模型通过光滑样条函数 、核函数或者局部回归光滑函数,对变量进行拟合。GAM采用模型中的每个预测变量并将其分成多个部分(由'结'​​分隔),然后将多项式函数分别拟合到每个部分。GAM的原理是最小化残差(拟合优度)同时最大化简约性(最低可能自由度)。回归模型中部分或全部的自变量采用平滑函数,降低线性设定带来的模型风险,对模型的假定不严,如不需要假定自变量线性相关于因变量(线性或非线性都可以),并且解决logistic回归当解释变量个数较多时容易引起维度灾难(Curse of dimensionality)。

    R中的实现主要有两个包:gam和mgcv,前者为旧版本的包,后者为新版本。两个包的基本建模过程是相似的(两个函数都是gam ;要小心同时加载两个库),但幕后计算方法不同,优化和模型的参数也不同。当在同一数据集上使用相同的模型结构时,预计结果会略有不同。

    具体解释可参见:https://blog.csdn.net/textboy/article/details/47277131

    这里以mgcv包为例

    1.构建基础模型

    gam(y~s(x,k = , bs =)) / gam(y~te(x,k = , bs =))

    k: sets up the dimensionality of the smoothing matrix for each term. Penalized regression smoothers. Using a substantially increased k to see if there is pattern in the residuals that could potentially be explained by increasing k. Default任意数字(normally 10 degree of freedom)。

    bs: See smooth terms for the full list. tp – DEFAULT, thin plate regression spline,cr – penalized cubic regression spline三次样条, cs – shrinkage version of cr,cc – cyclic cubic regression spline, ps – P-spline,cp – cyclic p-spline, ad – adaptive smoothing, fs – factor smooth interaction.

    s: smooth s(covariate, edf); te: tensor product smooth
     

    install.packages('mgcv')
    library(mgcv)
    mode<-gam(y~s(x,df),family="",data)
    
    

    2. 在基础模型构建后,最重要的是确定模型自由度。确定自由度有几种方式:

    1)基于生物学知识和专家经验;2)赤池信息准则(AIC),根据AIC最小确定自由度;3)根据残差独立原则,最小化残差自相关确定自由度;4)广义交叉验证

    3.构建模型

    4.模型比较与评价

    在R中,GAM的比较与评价可以用aov(model1,model2,test="Chisq")或者AIC(model1,model2)来比较。通过比较选出最优模型后,可通过观察模型中非参数平滑函数的自由度改变对解释变量的影响大小来评判模型是否稳健,又称敏感性分析。

    5.模型参数的解释

    以下面例子为例:

    library(mgcv)      #加载mgcv软件包,因为gam函数在这个包里
    Data <- read.delim("Rice_insect.txt")     #读取txt数据,存到Data变量中
    Data <- as.matrix(Data)     #转为矩阵形式
    #查看Data数据:Data,查看第2列:Data[,2],第2行:Data[2,]<br>
    Adult<-Data[,2]
    Day<-Data[,3]
    Precipitation<-Data[,4]<br>
    result1 <- gam(log(Adult) ~ s(Day))     #此时,Adult为相应变量,Day为解释变量
    summary(result1) 

    结果为

     

    Day的影响水平p-value=0.473,解释能力为14.3%,说明影响不明显。

    其中,edf为自由度,理论上,当自由度接近1时,表示是线性关系;当自由度比1大,则表示为曲线关系。

    result2 <- gam(log(Adult) ~ s(Precipitation))
    summary(result2)

    此时p-value为0.0774,说明该因子在P<0.1水平下影响显著。

     

    展开全文
  • 广义相加模型(GAM)

    2009-07-30 18:16:22
    应用广泛的广义相加模型,可以进行时间序列分析(如环境污染物与健康的关系)。
  • 01解决何种问题 前面一期和大家分享如何运用样条回归处理遇到的非线性问题,但这适合处理单个因变量Y对应一个自变量X的问题,而现实情况是,我们常常要处理多... 因此本章分享的广义相加模型提供了一种优选方案,它...

    01

    解决何种问题

          前面一期和大家分享如何运用样条回归处理遇到的非线性问题,但这适合处理单个因变量Y对应一个自变量X的问题,而现实情况是,我们常常要处理多个自变量和一个因变量之间的关系,除此以外,虽然通过做散点图能发现非线性关系,但很难归属它的形式,广义线性模型中的多项式回归,由于其不好解释的系数,降低了模型实用性。

            因此本章分享的广义相加模型提供了一种优选方案,它可以研究多个自变量与一个因变量之间关系,同时不需要预先知晓因变量和自变量的关系,而使用非线性平滑项来拟合模型

    02

    GAM模型说明

           广义相加模型(GAM:Generalized Additive Model),它模型公式如下:有p个自变量,其中X1与y是线性关系,其他变量与y是非线性关系,我们可以对每个变量与y拟合不同关系,对X2可以拟合局部回归,X3采用光滑样条,不必采用统一的关系,而最终结果‘加’在一起就可以了。

    e45ae32cd52abf3b633b63d30ba5598b.png

          1. 该函数有两个组成部分,β0+β1X1部分属于参数部分,后半部分属于非参数平滑部分,因此该模型又称为半参数模型。参数部分等同于线性项或广义线性项,非参数平滑部分,则是广义相加模型的关键部分。模型的左侧与广义线性模型一样,可以是因变量本身,也可以是对因变量进行变换后的结果。

           2.什么是非参数平滑项?

          经样条函数变化后的自变量也被称作非参数平滑项,常见的样条函数如:光滑样条(可参见前述内容)、自然样条和局部样条等。总结起来,为了尽可能多地捕捉回归模型中的非线性因素对因变量的影响,我们采用样条函数来灵活地将自变量拟合为平滑的曲线;同时又相对不那么“灵活”,能有效防止过度拟合。

           3.关于样条函数,需要确定多少个节点合适?怎么选取合适的函数?

           节点的个数直接和函数中自由度df挂钩,函数中的自由度df=节点数+4,通常可以通过1)AIC,根据AIC最小确定自由度;2)广义交叉验证;3)根据残差独立原则,最小化残差自相关确定自由度。

            3.1 AIC法:GAM的比较可以用aov(model1,model2,test="Chisq")或者AIC(model1,model2)来比较。通过比较选出最优节点数量。该法还可以通过观察模型中非参数平滑函数的自由度改变对解释变量的影响大小来评判模型是否稳健。

           3.2 广义交叉验证(GCV:Generalized Cross Validation)。这种方法的基本思路是,a)取出一部分数据;b)用某一数量的节点使样条拟合剩下的这些数据;c)用样条拟合之前取出的数据;d)重复a)~c),直到每个观察值都被取出过一次,计算整个交叉验证过程的均方根误差(RMSE:Root Mean Square Error);e)针对不同数量的节点重复a)~d),最后选择最小RMSE时的节点数量。一般可以分成10份重复此过程

           样条函数是具有m-1个连续导数的m阶分段多项式,例如三次样条函数指的就是具有连续性、且一阶和二阶连续的三阶分段多项式。在实际研究中,我们一般使用三次样条函数;除此之外,也可选择自然三次样条函数(增加了三次样条函数在边界区域的平滑性)、薄板样条函数(可同时平滑多个变量,因此一般在研究多个变量的交互作用时使用)等。

    03

    R代码及解读

         第一部分:结局是连续变量

    library(ISLR)library(splines)library(gam)data(Wage)gam2 5) + s(year,gam3 5) + year+ education,plot(gam2,se=T,col=c('blue'))###gam5 5) + lo(year,span=

    6baf00cd7db889ae17bb246a1aeea6f3.png

    1579211118824809e55d5fd80b7cee6b.png

    a64127a3e10ce4377c49d9fb9b632262.png

         结果说明:

       1)采用summary(gam2),查看模型结果,该结果分为参数部分和非参数部分,其中非参数中的year变量,p值大于0.05,说明该变量不适合做非线性拟合,而education这个变量没有做非线性拟合,因为在非参数部分没有其结果。将year这个变量采用线性回归拟合,其拟合结果是显著的,感兴趣的小伙伴可以跑下模型。

       2)采用plot()可以将模型画出来,图一的图横坐标为自变量X,纵坐标为因变量Y,表示随着年龄的变量,收入是先增长,然后降低的。图二中间的图意思是随着年份的增加,收入一直呈增长状态,中间有两年下降了,图三则是随着教育程度的升高,收入越来越高。其他的图解释以此类推。

      3)s()是样条函数,括号里面的数字是定义的自由度,除了使用回归样条,还能使用局部样条lo()函数,得到的结果与上面的结果十分类似。

        第二部分:结局是分类变量

         当Y是分类变量时,GAM同样适用。比如:

    gam4 250) ~ ns(age,5) + year + education,data=Wage,family = binomial)plot(gam4,se=T,col=c('blue'))

    84a6accc9207b56634c28e17613de2a3.png

      结果说明:

       1)采用I(),将wage变量处理成二分类变量,模型的写法和第一部分稍有变化。

       2)采用plot()可以将模型画出来,上图横坐标为自变量X,纵坐标表示概率,这个跟第一部分不太一样,小伙伴注意区分,上图第一个表的解释是:随着年龄的增加,收入超过250的可能性先增加后降低,其他的图解释以此类推。

        各位小伙伴儿,码了这么多字,期望能够帮助各位更好的理解和使用这些模型。

    04

    总结

        GAM模型存在的缺点:       

        1.由于模型是可加的,这在很大程度上限制了模型的灵活性,变量间的相互作用常被忽略,虽然模型本身可以考察交互作用。

         2.由于是基于非线性的模型,因此GAM模型的系数依然难以准确解释和描述。

          后面会有GAM结合时间序列研究的分享,敬请关注!

    05

    参考文献

    1. 薛毅等.统计建模与R软件.清华大学出版社

    2. 孙振球等.医学统计学.人民卫生出版社

    作者介绍:医疗大数据统计分析师,擅长R语言。

    欢迎各位在后台留言,恳请斧正!

    更多阅读:

    R语言:样条回归

    R语言:多水平统计模型

    R语言:广义估计方程(GEE)

    如何进行高维变量筛选和特征选择(一)?Lasso回归

    e1a19ad34d47cb4af7f0f333db8983f7.png

    2eb8f4678cf57445554f05f3fcbfb7d8.png

    展开全文
  • 一、广义相加模型有什么作用?讨论线性模型时,我们假设自变量x和因变量y之间为线性关系。实际上,在线性模型中,我们也可以通过引入多项式的方法拟合x和y之间的非线性关系。但我们只能在可以清楚地看到二者之间的...

    3aa705804ac262078b8f912178cc5241.png

    一、广义相加模型有什么作用?

    讨论线性模型时,我们假设自变量x和因变量y之间为线性关系。实际上,在线性模型中,我们也可以通过引入多项式的方法拟合x和y之间的非线性关系。但我们只能在可以清楚地看到二者之间的关系时才能这样做,例如散点图显示y近似是x的二次函数。

    然而,在许多情况下,我们从散点图中看到了非线性关系,但很难知晓它的形式。此外,在线性模型中,多项式系数的解释变得非常困难,降低了其实用性。

    广义相加模型(GAM:Generalized Additive Model)提供了一种替代方法,它允许我们在预先不知晓因变量与自变量之间关系的情况下,使用非线性平滑项来拟合模型。

    二、广义相加模型介绍

    1. 假设
      之间为线性关系,而
      之间为复杂的曲线关系。拟合广义相加模型为:

    模型有两个部分:参数项

    和非参数平滑项

    其中,参数项等同于最小二乘回归模型以及广义线性模型中可以包含的所有参数项,例如线性项或多项式项。另外,还包括了非参数平滑项,这是广义相加模型的关键部分。模型的左侧与广义线性模型一样,可以是因变量本身,也可以是对因变量进行变换后的结果。

    2. 非参数平滑项是什么?

    简单线性回归和多项式回归的拟合都是全局性的,即使用相同的回归方程来预测自变量的每一个值所对应的因变量。然而,在自变量和因变量之间为形状不明确的非线性关系时,即,随着自变量取值的变化,其与因变量之间的关系也是在不断变化时,用一个回归方程来预测所有自变量所对应的因变量就不太合理了。

    一种可行的改进方法是把该自变量划分成多个连续的区间,每一个区间都用单独的线性函数或非线性的低阶多项式函数来拟合。这种方法被称为样条函数(Spline),其生成的回归线为平稳、光滑的曲线,因此经样条函数变化后的自变量也被称作非参数平滑项。

    3. 由此可知,样条函数是非参数平滑项的关键,其具体内容包括:应该把数据分成几个连续区间?每个区间该如何确定拟合函数?

    1)首先来看应该把数据分成几个连续区间,也就是说在拟合样条函数时,我们该选择几个节点?

    推荐使用广义交叉验证(GCV:Generalized Cross Validation)的方法选择节点数。这种方法的基本思路是,a)取出一部分数据;b)用某一数量的节点使样条拟合剩下的这些数据;c)用样条拟合之前取出的数据;d)重复a)~c),直到每个观察值都被取出过一次,计算整个交叉验证过程的均方根误差(RMSE:Root Mean Square Error);e)针对不同数量的节点重复a)~d),最后选择最小RMSE时的节点数量。

    2)确定节点数量后,这些节点应该放在什么位置?

    可以放在数据中的剧烈变化区域,如大气污染情况突然转好(如2015年北京的阅兵蓝)或突然加重(如伦敦烟雾事件)的时间点;也可以在数据变化复杂的地方多设置节点,在看起来更稳定的地方少设置节点,比如研究大气污染的健康效应时,在暴露反应关系可能存在拐点的地方设置节点。但实际上,为便于操作,一般会截取长度相同的区间设置节点。

    3)接下来,看看每个区间该如何确定拟合函数?

    一般来说,如果我们在整个自变量范围内设置了k个不同的节点,我们最终将拟合k+1个不同的多项式。我们要为每个区间拟合不同的函数,理论上可以用任意低阶多项式拟合某个单独区间。所以最终得到的模型就是分段多项式。能拟合目标区间数据的函数有很多,但分段多项式不能随便设定,它有两个限制条件。

    • 由于分段,相邻区间的函数可能会出现不连续的现象。为了避免这种情况,一个必要的限制就是多项式在节点处应该是连续的。
    • 之后,虽得到了一条连续的曲线,但其连接处过度很不自然,为了使节点处更平滑,我们需要增加一个新约束:相邻多项式的导数必须相同(具体地讲,如果拟合的是m阶多项式,则应保证相邻多项式的一阶导数至m-1阶导数均相等)。

    像这样具有m-1个连续导数的m阶分段多项式,我们称之为样条函数(Spline),那么三次样条函数指的就是具有连续性、且一阶和二阶导连续的三阶分段多项式。在实际研究中,我们一般使用三次样条函数;除此之外,也可选择自然三次样条函数(增加了三次样条函数在边界区域的平滑性)、薄板样条函数(可同时平滑多个变量,因此一般在研究多个变量的交互作用时使用)等。

    至此,广义相加模型的基本知识点就介绍完了。总结起来就是,为了尽可能多地捕捉回归模型中的非线性因素对因变量的影响,我们采用样条函数来灵活地将自变量拟合为平滑的曲线;同时又相对不那么“灵活”,能有效防止过度拟合。

    三、广义相加模型在R中的实现

    1. 在R中,拟合广义相加模型的包是mgcv,函数是gam()。

    举例:

    ##三次样条
    model <- gam(death_cases ~ PM2.5 + s(Temperature, bs=cr), 
                  family=quasipoisson, data=mydata)
    
    ##自然样条
    model <- gam(death_cases ~ PM2.5 + ns(Temperature, df=6), 
                  family=quasipoisson, data=mydata)

    式中,

    • death_cases为因变量,PM2.5和Temperature为自变量。
    • PM2.5为参数部分,s()为非参数平滑项。
    • s()中,bs代表样条函数类型,我们选择cr即为三次样条函数,对于三次样条函数,自由度(节点数)一般由函数自动生成,无需我们手动设定;三次样条函数的自由度为节点数+3。如想使用自然样条函数,则s()应替换为ns();df代表自然样条函数的自由度,除用GCV法外,也可参考相关文献的选择;自然样条函数的自由度为节点数+1。
    • family为因变量的分布类型;data为建模所需数据。

    2. 查看模型,语句为summary(model),可查看自变量参数的点估计值、参数项和非参数项是否为有意义的预测因子、评价模型预测情况的GCV值(越小越好)。为平滑项绘图,语句为plot(model)。

    参考文献:

    https://cran.r-project.org/web/packages/gam/gam.pdf

    https://www.r-bloggers.com/generalized-addictive-models-and-mixed-effects-in-agriculture/

    https://www.andrew.cmu.edu/user/achoulde/95791/lectures/lecture02/lecture02-95791.pdf

    ZHANG Xiyang, NING Xi, MO Yaqian, GUI Duan, LIU Jianchang, CHEN Hongying, WU Yuping. A Study on the Habitat Preference of Sousa chinensis in Pearl River Estuary Based on the Generalized Additive Models. Sichuan Journal of Zoology, 2015, 34(6): 824-831.

    展开全文
  • 原文链接:http://tecdat.cn/?p=20904 环境科学中的许多数据不适合简单的线性模型,最好用广义相加模型(GAM)来描述。

    原文链接:http://tecdat.cn/?p=20904 

     

    环境科学中的许多数据不适合简单的线性模型,最好用广义相加模型(GAM)来描述。

    这基本上就是具有 光滑函数的广义线性模型(GLM)的扩展 。当然,当您使用光滑项拟合模型时,可能会发生许多复杂的事情,但是您只需要了解基本原理即可。

    理论

    让我们从高斯线性模型的方程开始 :

    GAM中发生的变化是存在光滑项:

     

    这仅意味着对线性预测变量的贡献现在是函数f。从概念上讲,这与使用二次项()或三次项()作为预测变量没什么不同。

    在这里,我们将重点放在样条曲线上。在过去,它可能类似于分段线性函数。

    例如,您可以在模型中包含线性项和光滑项的组合

    或者我们可以拟合广义分布和随机效应

    一个简单的例子

    让我们尝试一个简单的例子。首先,让我们创建一个数据框,并创建一些具有明显非线性趋势的模拟数据,并比较一些模型对该数据的拟合程度。

    x <- seq(0, pi * 2, 0.1)
    sin_x <- sin(x)
    y <- sin_x + rnorm(n = length(x), mean = 0, sd = sd(sin_x / 2))
    Sample <- data.frame(y,x)
    library(ggplot2)
    ggplot(Sample, aes(x, y)) + geom_point()

    尝试拟合普通的线性模型:

    lm_y <- lm(y ~ x, data = Sample)

    并使用geom_smooth in 绘制带有数据的拟合线 ggplot

    ggplot(Sample, aes(x, y)) + geom_point() + geom_smooth(method = lm)

    查看图或 summary(lm_y),您可能会认为模型拟合得很好,但请查看残差图

    plot(lm_y, which = 1)

    显然,残差未均匀分布在x的值上,因此我们需要考虑一个更好的模型。

    运行分析

    在R中运行GAM。

    要运行GAM,我们使用:

    gam_y <- gam(y ~ s(x), method = "REML")

    要提取拟合值,我们可以predict  :

    predict(gam_y, data.frame(x = x_new))

    但是对于简单的模型,我们还可以利用中的 method = 参数来 geom_smooth指定模型公式。

    您可以看到该模型更适合数据,检查诊断信息。

    check.gam 快速简便地查看残差图。

    gam.check(gam_y)

    ## 
    ## Method: REML   Optimizer: outer newton
    ## full convergence after 6 iterations.
    ## Gradient range [-2.37327e-09,1.17425e-09]
    ## (score 44.14634 & scale 0.174973).
    ## Hessian positive definite, eigenvalue range [1.75327,30.69703].
    ## Model rank =  10 / 10 
    ## 
    ## Basis dimension (k) checking results. Low p-value (k-index<1) may
    ## indicate that k is too low, especially if edf is close to k'.
    ## 
    ##        k'  edf k-index p-value
    ## s(x) 9.00 5.76    1.19     0.9

    对模型对象使用summary将为您提供光滑项(以及任何参数项)的意义,以及解释的方差。在这个例子中,非常合适。“edf”是估计的自由度——本质上,数量越大,拟合模型就越摇摆。大约为1的值趋向于接近线性项。

    ## 
    ## Family: gaussian 
    ## Link function: identity 
    ## 
    ## Formula:
    ## y ~ s(x)
    ## 
    ## Parametric coefficients:
    ##             Estimate Std. Error t value Pr(>|t|)
    ## (Intercept) -0.01608    0.05270  -0.305    0.761
    ## 
    ## Approximate significance of smooth terms:
    ##       edf Ref.df     F p-value    
    ## s(x) 5.76  6.915 23.38  <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## R-sq.(adj) =  0.722   Deviance explained = 74.8%
    ## -REML = 44.146  Scale est. = 0.17497   n = 63

     

    光滑函数项

    如上所述,我们将重点介绍样条曲线,因为样条曲线是最常实现的光滑函数(非常快速且稳定)。那么,当我们指定s(x)时实际发生了什么 ?

    好吧,这就是我们说要把y拟合为x个函数集的线性函数的地方。默认输入为薄板回归样条-您可能会看到的常见样条是三次回归样条。三次回归样条曲线具有 我们在谈论样条曲线时想到的传统 结点–在这种情况下,它们均匀分布在协变量范围内。

    基函数

    我们将从拟合模型开始,记住光滑项是一些函数的和,

    首先,我们提取基本函数集  (即滑项的bj(xj)部分)。然后我们可以画出第一和第二基函数。

    model_matrix <- predict(gam_y, type = "lpmatrix")
    plot(y ~ x)
    

    现在,让我们绘制所有基函数的图,然后再将其添加到GAM(y_pred)的预测中。

    
    matplot(x, model_matrix[,-1], type = "l", lty = 2, add = T)
    lines(y_pred ~ x_new, col = "red", lwd = 2)

    现在,最容易想到这样-每条虚线都代表一个函数(bj),据此 gam 估算系数(βj),将它们相加即可得出对应的f(x)的贡献(即先前的等式)。对于此示例而言,它很好且简单,因为我们仅根据滑项对y进行建模,因此它是相当相关的。顺便说一句,您也可以只使用 plot.gam 绘制滑项。

    好的,现在让我们更详细地了解基函数的构造方式。您会看到函数的构造与因变量数据是分开的。为了证明这一点,我们将使用 smoothCon

    x_sin_smooth <- smoothCon(s(x), data = data.frame(x), absorb.cons = TRUE) 
    

    现在证明您可以从基本函数和估计系数到拟合的滑项。再次注意,这里简化了,因为模型只是一个滑项。如果您有更多的项,我们需要将线性预测模型中的所有项相加。

    betas <- gam_y$coefficients
    linear_pred <- model_matrix %*% betas
    

    请看下面的图,记住这 X 是基函数的矩阵。

    通过 gam.models , smooth.terms 滑模型类型的所有选项,基本函数的构造方式(惩罚等),我们可以指定的模型类型(随机效应,线性函数,交互作用)。

    真实例子

    我们查看一些CO2数据,为数据拟合几个GAM,以尝试区分年度内和年度间趋势。

    首先加载数据 。

    CO2 <- read.csv("co2.csv")

    我们想首先查看年趋势,因此让我们将日期转换为连续的时间变量(采用子集进行可视化)。

    CO2$time <- as.integer(as.Date(CO2$Date, format = "%d/%m/%Y"))
    

    我们来绘制它,并考虑一个平稳的时间项。

    我们为这些数据拟合GAM

    它拟合具有单个光滑时间项的模型。我们可以查看以下预测值:

    plot(CO2_time)

    请注意光滑项如何减少到“普通”线性项的(edf为1)-这是惩罚回归样条曲线的优点。但如果我们检查一下模型,就会发现有些东西是混乱的。

    par(mfrow = c(2,2))
    gam.check(CO2_time)

    残差图的上升和下降模式看起来很奇怪-显然存在某种依赖关系结构(我们可能会猜测,这与年内波动有关)。让我们再试一次,并引入一种称为周期光滑项。

     

    周期性光滑项fintrannual(month)由基函数组成,与我们已经看到的相同,只是样条曲线的端点被约束为相等,这在建模时是有意义的周期性(跨月/跨年)的变量。

    现在,我们将看到 bs = 用于选择光滑器类型的k = 参数和用于选择结数的 参数,因为三次回归样条曲线具有固定的结数。我们使用12结,因为有12个月。

    s(month, bs = 'cc', k = 12) + s(time)

    让我们看一下拟合的光滑项:

    从这两个光滑项来看,我们可以看到,月度光滑项检测到CO2浓度的月度上升和下降——从相对幅度(即月度波动与长期趋势)来看,我们可以看出消除时间序列成分是多么重要。让我们看看现在的模型诊断是怎样的:

    par(mfrow = c(2,2))
    gam.check(CO2_season_time)

    好多了。让我们看一下季节性因素如何与整个长期趋势相对应。

    
    plot(CO2_season_time)

     

    结果

    从本质上讲,您可以将GAM的模型结果表示为任何其他线性模型,主要区别在于,对于光滑项,没有单一系数可供推断(即负、正、效应大小等)。因此,您需要依靠视觉上解释光滑项(例如从对plot(gam_model)的调用)或根据预测值进行推断。当然,你可以在模型中包含普通的线性项(无论是连续的还是分类的,甚至在方差分析类型的框架中),并像平常一样从中进行推断。事实上,GAM对于解释一个非线性现象通常是有用的,这个非线性现象并不直接引起人们的兴趣,但在推断其他变量时需要加以解释。

    您可以通过plot 在拟合的gam模型上调用函数来绘制局部效果 ,还可以查看参数项,也可以使用 termplot 函数。您可以ggplot 像本教程前面所述那样使用 简单的模型,但是对于更复杂的模型,最好知道如何使用predict预测数据 。

    geom_line(aes(y = predicted_values)


    最受欢迎的见解

    1.用SPSS估计HLM层次线性模型模型

    2.R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

    3.基于R语言的lmer混合线性回归模型

    4.R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

    5.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析

    6.使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM

    7.R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化

    8.R语言用线性回归模型预测空气质量臭氧数据

    9.R语言分层线性模型案例

    展开全文
  • 一、广义相加模型有什么作用?讨论线性模型时,我们假设自变量x和因变量y之间为线性关系。实际上,在线性模型中,我们也可以通过引入多项式的方法拟合x和y之间的非线性关系。但我们只能在可以清楚地看到二者之间的...
  • 01解决何种问题 前面一期和大家分享如何运用样条回归处理遇到的非线性问题,但这适合处理单个因变量Y对应一个自变量X的问题,而现实情况是,我们常常要处理多... 因此本章分享的广义相加模型提供了一种优选方案,它...
  • 比如用广义相加模型对某个物质的浓度及对应的观察终点值进行拟合,现在要画一个类似关于浓度变化影响观察终点值 的曲线应该怎么画呀?
  • 这篇文章探讨了为什么使用广义相加模型 是一个不错的选择。为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择。
  • GAM(广义相加模型)概要及R程序实现

    万次阅读 多人点赞 2015-08-04 15:27:58
    GAM 广义相加模型Generalized additive model: 概念 回归模型中部分或全部的自变量采用平滑函数,降低线性设定带来的模型风险,对模型的假定不严,如不需要假定自变量线性相关于因变量(线性或非
  • 人们对于电力的需求与依赖随着生活水平的提高而不断加深,用电负荷预测工作开始变得越来越重要...当因变量和自变量不呈线性关系时,可用广义相加模型(GAM)。GAM模型的优点,在于其解决响应变量与预测因子间...
  • 原文链接:http://tecdat.cn/?p=2856​tecdat.cn​人们对于电力的需求与依赖随着生活水平...GAM模型当因变量和自变量不呈线性关系时,可用广义相加模型(GAM)。GAM模型的优点,在于其解决响应变量与预测因子间的高度...
  • 第7章,广义相加模型(GAMs)

    万次阅读 多人点赞 2016-12-01 15:41:42
    这些方法可以归纳为广义相加模型(GAMs)的框架里,形如: 之所是”相加性的”,是因为我们对于每个变量 X j X_j 都单独计算 f j f_j , f j f_j 可以是任意形式的函数,最后统一加起来用来预测 Y Y . GAMs的...
  • 广义可加模型(GAM)与向前逐步选择算法(基于R语言) 一、题目 (a)使用College数据集,以Outstate作为响应变量,其余作为预测变量,使用逐步回归得到一组合适的预测变量的子集。(b)将观测数据分成训练集和测试...
  • 星期三,在课堂上,我们已经看到了如何可视化多元回归模型(带有两个连续的解释...通过对数链接从(标准)广义线性模型获得的预测 > reg1=glm(cout~ageconducteur+agevehicule,data=base,family=Gamma(lin...
  • 用GAM进行建模时间序列 我已经准备了一个文件,其中包含四个用电时间序列以进行分析。数据操作将由data.table程序包完成。 将提及的智能电表数据读到data....使用GAM回归模型。将工作日的字符转换为整数,并使用...
  • 在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析 6.使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM 7.R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化 8.R语言用线性回归模型预测...
  • 拓端数据科技 / Welcome to tecdat​tecdat.cn在之前的课堂上,我们已经看到了如何可视化多元回归模型(带有两个连续...通过对数链接从(标准)广义线性模型获得的预测。> reg1=glm(cout~ageconducteur+agevehicu...
  • 有许多方法可以解决此问题,其中一些方法可以通过使用正则化方法降低模型复杂性来解决。但是,这些技术仍然使用线性模型,到目前为止只能进行改进。本文本专注于线性模型的扩展… 多项式回归 这是对数据提供非...
  • logistic回归基于以下假设:给定协变量x,Y具有伯努利...它用于广义相加模型,但这里只有一个变量,所以实际上很难看到“可加”部分,可以参考其他GAM文章。 最受欢迎的见解 1.R语言多元Logistic逻辑回归 应用案例 2....
  • 有许多方法可以解决此问题,其中一些方法可以通过使用正则化方法降低模型复杂性来解决。但是,这些技术仍然使用线性模型,到目前为止只能进行改进。本文本专注于线性模型的扩展_多项式回归_ 这是对数据提供非线性...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

广义相加模型