如何对lm()中的因子系数进行限制

时间:2013-12-12 20:36:59

标签: r restriction lm

我在R中使用带有数值变量和因子的标准lm()模型。对于因子R,给每个级别的系数只有一个,即一个为0。

是否可以选择此级别?

例如,这是我的模型的输出:

Coefficients:
                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     9.847e+00  1.499e-02 656.984   <2e-16 ***
base$km                        -3.343e-06  5.669e-08 -58.974   <2e-16 ***
log(base$nbJour + 1)            2.395e-02  1.743e-03  13.738   <2e-16 ***
id_boite2                 -5.980e-02  4.741e-03 -12.615   <2e-16 ***
cylindre2.0                1.125e-01  8.174e-03  13.762   <2e-16 ***
cylindre2.7                2.291e-01  1.056e-02  21.692   <2e-16 ***
cylindre3.0                3.393e-01  1.061e-02  31.970   <2e-16 ***

变量id_boite可以有2个值,1或2。 默认情况下,R已将id_boite1设置为0,将id_boite2设置为-5.980e-02。 我想知道是否有可能强制它将另一个级别设置为0,或者更全局地将其设置为具有最负面效果的级别为0,以使我的所有系数都为正。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找relevel()函数。在运行线性模型之前(假设数据框名为df),您可以执行以下操作:

df$id_boite = relevel(df$id_boite, ref=2)

答案 1 :(得分:0)

您可以使用df <- transform(df,id_boite=relevel(id_boite,response_var))(假设您的数据位于数据框df中且response_var是响应变量),这将按增加的顺序设置因子级别(边际) )平均反应。这并不能保证复杂回归模型中的正系数,其中与每个级别关联的条件均值可能与其边际均值不同,但一般来说它可能运作得相当好。