R公式接口:如何在解释变量的子集上编写样条线?

时间:2017-06-23 12:49:53

标签: r regression formula spline

我正在用R进行回归。让我们假设我的响应被称为y和一个解释变量x。为了论证,假设x = 1 ... 100。我知道我的响应在x = 1 ... 10时从x = 11 ... 100表现得非常不同。这就是为什么我想在x = 11 ... 100和其他东西上拟合回归样条,比如说x = 1 ... 10的常数。

我的问题:如何为R公式界面编写这样的公式?

到目前为止我尝试了什么

一个简短的例子:

# some non-random data
set.seed(0815)
y = c(rpois(10,3), sapply(seq.int(1,90), function(lambda)rpois(1,lambda/10) ) )

# some explanation for this
x = seq_along(y)

# fit spline for all x, with df = 3, no problem but bad fit
m = glm(family = poisson(), formula = y ~ ns(x,df=3))

# failed naive approach
fac = ifelse(x > 10, 0, 1)
m_fail = glm(family = poisson(), formula = y ~ fac + ns(x[11:100], df=3) ) 

还有什么不起作用

我可以想到另外两种可能性,既可以在示例中使用,也可以在实际应用中使用。

  1. 两个单独的拟合:只需分割x和y并调用两次glm。不起作用,因为我的真正问题是多变量而不是所有预测变量都像x那样分裂。
  2. 创建一个模型矩阵:我的真正问题有几百万次观察。在glm之外创建显式模型矩阵需要花费大量时间和RAM,因此不可行。

0 个答案:

没有答案