我想在数据集上应用gam模型,并指定要使用的函数类型。
它会是这样的:
y ~ cst1 * (s(var1)-s(var2)) * (1 - exp(var3*cst2))
s
必须与var1
和var2
具有相同的功能。我对s
函数系列没有事先的想法。如果我恢复,模型会找到常量(cst1
和cst2
)加上函数s
。
有可能吗?如果没有,有什么方法(其他类型的模型)我可以用来做我正在寻找的东西吗?
提前感谢您的回复。
答案 0 :(得分:1)
此模型可以与非线性最小二乘包nls
拟合。这将允许您直接为您想要的公式建模。但是,样条曲线需要手动完成。 This question gets at what you would be trying to do.
为了使var1
和var2
的样条曲线相同,您可以通过减去基础矩阵来实现。基本上,您希望计算系数向量A
,其中术语为A * s(var1) + A * s(var2) = A * (s(var1) - s(var2))
。你不想做s(var1 - var2)
;一般来说,f(x) - f(y) != f(x - y)
。要在R中执行此操作,您需要
使用ns()
var1
和var2
计算样条基础矩阵,为它们提供相同的结。您需要指定knots
和Boundary.knots
参数,以便两个样条线共享相同的基础。
减去两个样条基础矩阵(ns()
函数的输出)。
调整nls
公式的结果减去样条基础矩阵,就像我之前链接的问题一样。