如何将预定义偏移量拟合到包含R中分类变量的模型

时间:2013-06-26 12:13:09

标签: r modeling lm categorical-data

使用以下数据:

http://pastebin.com/4wiFrsNg

我想知道如何将预定义的偏移量拟合到另一个模型的原始关系,即如何拟合模型A的估计值,因此:

ModelA<-lm(Dependent1~Explanatory)
因此,

模型B:

ModelB<-lm(Dependent2~Explanatory)

其中解释变量是我的数据集中的变量“Categorical”,或变量“Continuous”。我得到了一个与CV上类似问题相关的有用答案:

https://stats.stackexchange.com/questions/62584/how-to-fit-a-specific-model-to-some-data

这里的exaplantory变量是“连续”。但是我还有一些额外的问题我需要回答,我认为可能更适合SO。如果情况并非如此,请告诉我,我将删除此问题:)

具体来说,我在上面的链接中被告知,为了在我的数据集中为连续解释变量拟定预定义的斜率,我应该这样做:

lm( Dependent2 ~ 1 + offset( Slope * Continuous ) )

其中斜率是从模型A中取得的预定义斜率。哪种方法效果很好。

现在我想知道,当x是具有两个级别的分类变量时,如果x是具有二次项的连续变量,即x + x ^ 2,我该怎么做?

对于我正在尝试的二次项:

lm( Dependent2 ~ 1 + offset( Slope * Continuous )+ offset( Slope2 * I((Continuous)^2)) )

其中Slope是连续项的固定估计值,Slope2是二次项的固定估计值。

但我不确定如何使用这个分类变量。当我尝试将偏移量拟合为:

lm( Dependent2 ~ 1 + offset( Slope * Categorical ) )

同样,斜率是从模型A得到的固定估计值的斜率值,我得到一个错误:

"Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :   0 (non-NA) cases
In addition: Warning message:
In Ops.factor(0.25773, Categorical) : * not meaningful for factors"

如果有人对如何为分类变量创建偏移量有任何意见,我们将不胜感激:)

1 个答案:

答案 0 :(得分:2)

您可能做的最好的事情是为每个因素级别手动计算偏移量:

x <- rep(1:3, each=10)
df <- data.frame(x=factor(x), y=3 - x)

# compute the offset for each level of x
df$o <- with(df, ifelse(x == "1", 2, ifelse(x == "2", 1, 0)))

# fitted coef's for the models below will all be zero due to presence of offset
lm(y - o ~ x - 1, data=df)
# or
lm(y ~ x + offset(o), data=df)