3

lm 调用对象的数据部分是否有等效的更新?

例如,假设我有以下模型:

dd = data.frame(y=rnorm(100),x1=rnorm(100))
Model_all <- lm(formula = y ~ x1, data = dd)

有没有一种方法可以对 lm 对象进行操作以产生等效的效果:

Model_1t50 <- lm(formula = y ~ x1, data = dd[1:50,])

我正在尝试从样本预测测试中构建一些 psudo,拥有一个 lm 对象并简单地滚动数据会非常方便。

4

2 回答 2

6

我相当肯定这update实际上是你想要的!

example(lm)
dat1 <- data.frame(group,weight)
lm1 <- lm(weight ~ group, data=dat1)
dat2 <- data.frame(group,weight=2*weight)
lm2 <- update(lm1,data=dat2)
coef(lm1)
##(Intercept)    groupTrt 
##      5.032      -0.371 
coef(lm2)
## (Intercept)    groupTrt 
##     10.064      -0.742 

如果您希望由此提高效率,您会感到失望——R 只是替换新参数并重新评估调用(参见 的代码update.default)。但它确实使代码更干净......

于 2013-01-20T01:45:26.227 回答
1

biglm 对象可以更新以包含更多数据,但不能更少。因此,您可以按相反的顺序执行此操作,从较少的数据开始,然后添加更多。见http://cran.r-project.org/web/packages/biglm/biglm.pdf

但是,我怀疑您对为子总体估计的参数感兴趣(即,如果行 1:50 对应于"a"因子变量的水平factrvar。在这种情况下,您应该在公式中使用交互(~factrvar*x1)而不是子集到data[1:50,]。这种类型的交互将对 的每个级别给出不同的效果估计。这factrvar比单独估计每个参数更有效,并且将限制任何附加参数(即x2in每次都会收到一个单独的参数估计。~factrvar*x1 + x2factrvarx2

于 2013-01-19T23:52:51.250 回答