Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从GAM中提取拟合样条(``mgcv::GAM‘)

如何从GAM中提取拟合样条(``mgcv::GAM‘)
EN

Stack Overflow用户
提问于 2013-03-22 23:47:07
回答 1查看 12K关注 0票数 18

我正在用GAM来模拟时间趋势的logistic回归。然而,我想从它中提取拟合样条,将它添加到另一种模型中,这在GAM或GAMM中是无法安装的。

因此,我有两个问题:

  1. 我如何适应一个平滑的时间,以便我强迫一个结在一个特定的位置,同时让模型找到其他的结?
  2. 我如何从合适的GAM中提取矩阵,以便我可以将它作为不同模型的估算?

我正在运行的模型类型如下:

代码语言:javascript
运行
AI代码解释
复制
gam <- gam(mortality.under.2~ maternal_age_c+ I(maternal_age_c^2)+
           s(birth_year,by=wealth2) + wealth2 + sex +
           residence + maternal_educ + birth_order,
           data=colombia2, family="binomial")

我已经阅读了GAM的大量文档,但我仍然不确定。任何建议都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-23 06:17:44

mgcv::gam中,有一种方法可以通过predict.gam方法和type = "lpmatrix"来实现(您的Q2)。

?predict.gam甚至有一个例子,我在下面介绍:

代码语言:javascript
运行
AI代码解释
复制
 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)

 newd <- data.frame(x0=(0:30)/30, x1=(0:30)/30, x2=(0:30)/30, x3=(0:30)/30)

 Xp <- predict(b, newd, type="lpmatrix")

 ##################################################################
 ## The following shows how to use use an "lpmatrix" as a lookup 
 ## table for approximate prediction. The idea is to create 
 ## approximate prediction matrix rows by appropriate linear 
 ## interpolation of an existing prediction matrix. The additivity 
 ## of a GAM makes this possible. 
 ## There is no reason to ever do this in R, but the following 
 ## code provides a useful template for predicting from a fitted 
 ## gam *outside* R: all that is needed is the coefficient vector 
 ## and the prediction matrix. Use larger `Xp'/ smaller `dx' and/or 
 ## higher order interpolation for higher accuracy.  
 ###################################################################

 xn <- c(.341,.122,.476,.981) ## want prediction at these values
 x0 <- 1         ## intercept column
 dx <- 1/30      ## covariate spacing in `newd'
 for (j in 0:2) { ## loop through smooth terms
   cols <- 1+j*9 +1:9      ## relevant cols of Xp
   i <- floor(xn[j+1]*30)  ## find relevant rows of Xp
   w1 <- (xn[j+1]-i*dx)/dx ## interpolation weights
   ## find approx. predict matrix row portion, by interpolation
   x0 <- c(x0,Xp[i+2,cols]*w1 + Xp[i+1,cols]*(1-w1))
 }
 dim(x0)<-c(1,28) 
 fv <- x0%*%coef(b) + xn[4];fv    ## evaluate and add offset
 se <- sqrt(x0%*%b$Vp%*%t(x0));se ## get standard error
 ## compare to normal prediction
 predict(b,newdata=data.frame(x0=xn[1],x1=xn[2],
         x2=xn[3],x3=xn[4]),se=TRUE)

这将贯穿整个过程,甚至是在R或GAM模型之外完成的预测步骤。您必须修改这个示例,以完成您想做的事情,因为该示例计算模型中的所有项,并且除了样条之外还有另外两个术语--本质上,您做的是相同的事情,但只针对样条项,这涉及到为样条查找Xp矩阵的相关列和行。然后,你也应该注意到,样条是中心的,所以你可能想也可能不想撤销它。

对于您的Q1,在示例中为xn向量/矩阵选择适当的值。这些值对应于模型中n第四项的值。因此,将您想要的值设置为一些平均值,然后更改与样条相关的值。

如果所有这些都是在R中完成的,那么只在样条协变量的值处计算样条就更容易了,因为你有数据,这是进入另一个模型的。要做到这一点,您可以创建一个值的数据框架,用于预测at,然后使用

代码语言:javascript
运行
AI代码解释
复制
predict(mod, newdata = newdat, type = "terms")

如果mod是适合的GAM模型(通过mgcv::gam),则newdat是包含模型中每个变量的列的数据框架(包括参数项;设置不想更改到某些常量平均值的项,例如数据集中变量的平均值,或者如果某个因素的话,则为某一级别)。type = "terms"部分将为newdat中的每一行返回一个矩阵,并为模型中的每个项(包括样条项)的拟合值“贡献”。只需取这个矩阵的列,它对应于样条--同样,它是中心的。

也许我误解了你的Q1。如果要控制结,请参见knots参数到mgcv::gam。默认情况下,mgcv::gam在数据的极值处打结,然后剩余的“纽结”均匀地分布在间隔上。mgcv::gam没有找到结-它为您放置它们,您可以通过knots参数控制它们的位置。

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15584541

复制
相关文章
firebase怎么用_firebase是什么
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168361.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
4.3K0
firebase怎么用_firebase是什么
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.2K0
Google 的 Firebase 如何删除项目
奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true?
奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。 1. i
互扯程序
2019/06/19
2.3K0
奇怪的知识增加了,如何让 (a == 1 && a == 2 && a == 3) 返回 true
原文:http://www.fly63.com/article/detial/851
@超人
2021/04/26
1.1K0
奇怪的知识增加了,如何让 (a == 1 && a == 2 && a == 3) 返回 true
Firebase 如何创建登录 Token
Firebase 的 token 可以使用 firebase 命令行工具来进行创建。
HoneyMoose
2021/04/02
2.5K0
Firebase 如何创建登录 Token
奇怪的电梯
§、奇怪的电梯(lift.cpp) §【问题描述】 §大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢? §【输入格式】lift.in §输入文件共有二行,第一行为三个用
attack
2018/04/12
1.5K0
奇怪的知识
而数据中台则是将数据服务化之后提供给业务系统, 目标是将数据能力渗透到各个业务环节
solve
2022/03/30
8520
Android Firebase 服务简介
Firebase初步了解 什么事Firebase? Firebase成立于2011年,在被Google收购之前,Firebase是一个协助开发者快速构建App,能够提供行动应用专用开发平台及SDK的一款产品,简单的说大概就是一套集成后台服务工具。早在2014年,谷歌收购了Firebase,这主要是一种面向应用程序开发人员的数据库。Firebase基本上向广大的应用程序开发人员提供不同的服务,比如存储、消息传递、通知和身份验证等服务。 在今年的I/O大会上,谷歌发表了新版的Firebase,新的Firebas
xiangzhihong
2018/02/05
23.1K0
Android  Firebase 服务简介
与 FireBase 亲密接触
正常的 App 都是属于网络应用,数据都是从服务器上获取的。这就需要有专业的后台开发人员开发后台业务服务器,然后为我们 App 提供数据。自从云出现之后,各大云主机厂商提供了一个云服务 PAAS(Platform-as-a-Service的缩写),意思是平台即服务。PaaS是一个执行代码以及管理应用运行环境的开发平台,用户通过SVN或者Git之类的代码版本管理工具与平台交互。但这也是开发人员具备后台开发的能力。因此,
猴哥yuri
2018/08/16
16.2K0
我们弃用 Firebase 了
作者 | John Considine 译者 | 平川 策划 | 刘燕 我们已经在 Firebase 上发布了 10 几款应用程序,几乎用到了该平台每个方面的特性,并设计了一个可以实现优雅扩展的手册。可以说,事实已经证明,Firebase 对 K-Optional Software 而言是非常宝贵的工具。 就在 2022 年 3 月,我们的开发人员还在为 Firebase Extensions 等创新欢呼。遗憾的是,过去几个月的三个主要变化破坏了开发体验,因此,在新项目中,K-Optional 将
深度学习与Python
2023/03/29
33.2K0
我们弃用 Firebase 了
奇怪的 Javascript
我的意思是,对于刚开始使用这种语言和他语言(例如 C++ 或 C#)的开发人员来说,javascript 可能会很奇怪。
疯狂的技术宅
2020/04/24
9950
奇怪的 Javascript
奇怪的颜色
计算属性值字符个数,再把所有字符分成3组,不能有余数,如果位数不够就补0, 每组颜色只有前两个字符有效并以十六进制的方式表示 ,非十六进制的字符以0表示。
GhostZhang
2022/08/22
8310
奇怪的颜色
奇怪
今天在学校,用vmware workstation 7,运行ubuntu9.04,一开始用iNode拨号,提示检测到多网卡,强制断线。然后我把vmware生成的2个虚拟网卡都禁用掉,居然进入ubuntu9.04后还能上网,并且不影响物理机上网,好奇怪阿。
libo1106
2018/08/07
3160
发现一个很奇怪的现象,MyBaits 的 insert方法一直返回"-2147482646"
前几天在做项目demo的时候,发现有一个很奇怪的现象,就是MyBatis发现更新和插入返回值一直为"-2147482646",无论怎么改,这个值一直不变...
Java小咖秀
2021/04/20
5910
发现一个很奇怪的现象,MyBaits 的 insert方法一直返回"-2147482646"
奇怪的死循环
#include<stdio.h> int main() { int i; int a[10]; for(i=0;i<=10;++i) { a[i]=0; printf("%d\n",a[i]); } return 0; } 该程序对应的汇编代码见如下代码: .file "cs18.c" .section .rodata .LC0: .string "%d\n" .text .gl
chinchao.xyz
2022/04/25
1.3K0
用supabase实时数据库替换mapus协作地图里的firebase
讲了如何使用supabase,其实是为了将mapus协作地图 里使用的firebase,因为firebase在国内用不了哇,google的东西。
hotqin888
2022/11/02
3.1K0
用supabase实时数据库替换mapus协作地图里的firebase
奇怪的函数调用
整理移动硬盘时,发现一个名为 attack 的目录,进去以后发现原来是一段简单的 C 语言代码。代码如下:
码农UP2U
2021/09/02
1.8K0
奇怪的函数调用
奇怪的编码问题
今天使用R爬取数据的时候发现一个奇怪的问题,我将每个属性的数据先保存在vector中,然后再合并到data.frame中时,发现打印names时数据正常显示中文,但是打印data.frame或者写入csv文件时,却始终都是utf8的格式。 代码如下:
用户2936342
2019/03/19
1.5K0
奇怪的编码问题
点击加载更多

相似问题

spark机器学习--更好的设计

11

在纱线上运行spark机器学习示例失败

113

如何通过机器学习学习“加法”操作

10

spark scala在windows机器上

32

Mobius SparkClr入门(在Linux上)

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档