R 如何手动指定gam中更平滑的外部结(mgcv包)
我使用R中的mgcv包将GAM模型拟合到数据中。我的一些预测值是圆形的,因此我使用周期平滑器。我在交叉验证中遇到了一个问题,我的保持数据集可能包含超出训练数据范围的值。由于gam包自动为平滑选择结,因此会导致错误(请参阅我的相关问题——感谢@nograps和@DWin对错误的解释) 如何在周期平滑中手动指定外部结 示例代码 第一个块生成一些数据R 如何手动指定gam中更平滑的外部结(mgcv包),r,gam,R,Gam,我使用R中的mgcv包将GAM模型拟合到数据中。我的一些预测值是圆形的,因此我使用周期平滑器。我在交叉验证中遇到了一个问题,我的保持数据集可能包含超出训练数据范围的值。由于gam包自动为平滑选择结,因此会导致错误(请参阅我的相关问题——感谢@nograps和@DWin对错误的解释) 如何在周期平滑中手动指定外部结 示例代码 第一个块生成一些数据 library(mgcv) set.seed(223) # produces error. # set.seed(123) # no error.
library(mgcv)
set.seed(223) # produces error.
# set.seed(123) # no error.
# generate data:
x <- runif(100,min=-pi,max=pi)
linPred <- 2*cos(x) # value of the linear predictor
theta <- 1 / (1 + exp(-linPred)) #
y <- rbinom(100,1,theta)
plot(x,theta)
df <- data.frame(x=x,y=y)
理想情况下,我只设置外部节点,让gam
拾取其余节点
如果这个问题对CrossValidated更有利,请道歉。试试这个:
gamFit <- gam(y ~ s(x,bs="cc",k=5),
knots=list( x=seq(-pi,pi, len=5) ),
data=df, family=binomial())
在测试这段代码时,我了解到s()
中的'k'参数需要与传递给knots()的'x'-seq()
值中的'len'参数匹配。我错误地认为knots参数会传递到s()
尝试以下操作:
gamFit <- gam(y ~ s(x,bs="cc",k=5),
knots=list( x=seq(-pi,pi, len=5) ),
data=df, family=binomial())
在测试这段代码时,我了解到s()
中的'k'参数需要与传递给knots()的'x'-seq()
值中的'len'参数匹配。我错误地认为knots参数会传递到s()
,这太完美了,谢谢DWin。对不起,这个没用的问题;有时R帮助很难在包含大量嵌套函数的包中导航。这太完美了,谢谢。对不起,这个没用的问题;有时R帮助很难在包含大量嵌套函数的包中导航。
gamFit <- gam(y ~ s(x,bs="cc",k=5),
knots=list( x=seq(-pi,pi, len=5) ),
data=df, family=binomial())
?smooth.construct.cr.smooth.spec