R中的二分线性回归与二分预测变量:虚拟代码还是让R处理它?

时间:2014-03-21 19:03:12

标签: r linear-regression

我正在为使用R的课程运行多元线性回归。我希望在模型中包含的一个预测变量是编码为" m"和" f"。我用R两种不同的方式运行模型:

模型1:"性别"作为原始分类变量R

lm(formula = P_iP_Choice ~ Sex + Carapace + Competitor_Presence_BI + 
    PSI_Day1_Choice + AGG_AVERAGE, data = pano2014)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.55241 -0.12879 -0.04414  0.13769  0.67394 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)            -0.43031    0.23872  -1.803 0.074353 .  
Sexm                   -0.28566    0.04685  -6.098 1.86e-08 ***
Carapace                0.15558    0.04534   3.431 0.000863 ***
Competitor_Presence_BI -0.03339    0.04532  -0.737 0.462870    
PSI_Day1_Choice         0.15825    0.13029   1.215 0.227273    
AGG_AVERAGE             0.15406    0.07790   1.978 0.050604 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.2375 on 104 degrees of freedom
Multiple R-squared: 0.3146, Adjusted R-squared: 0.2817 
F-statistic: 9.549 on 5 and 104 DF,  p-value: 1.611e-07 

模型2:个体的性别是一个不同的变量"女性"编码为0 =男性1 =女性。

lm(formula = P_iP_Choice ~ Female + Carapace + Competitor_Presence_BI + 
    PSI_Day1_Choice + AGG_AVERAGE, data = pano2014)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.55241 -0.12879 -0.04414  0.13769  0.67394 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)            -0.71597    0.24498  -2.923 0.004260 ** 
Female                  0.28566    0.04685   6.098 1.86e-08 ***
Carapace                0.15558    0.04534   3.431 0.000863 ***
Competitor_Presence_BI -0.03339    0.04532  -0.737 0.462870    
PSI_Day1_Choice         0.15825    0.13029   1.215 0.227273    
AGG_AVERAGE             0.15406    0.07790   1.978 0.050604 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.2375 on 104 degrees of freedom
Multiple R-squared: 0.3146, Adjusted R-squared: 0.2817 
F-statistic: 9.549 on 5 and 104 DF,  p-value: 1.611e-07

我的理解是截距项系数的差异是由于模型1中的R将我的分类变量虚拟编码成二分变量而我的响应变量的变化由"女性"被添加到拦截中因为R编码"性别"使用男性。但是在模型2中,运行模型的差异不会改变模型其他部分的系数估计值。

我想知道的是"正确的"或广泛接受的在线性模型中使用二分类变量的方法?假人自己编码吗?或者让R虚拟代码吗?

2 个答案:

答案 0 :(得分:1)

无论哪种方式都是正确的(假设你正确地进行了手动编码),但是有一个但是。 R支持分类变量的几种编码方案(对比)。存在虚拟编码,偏差编码,Helmert编码等。这些方案中的每一个的变化是截距的含义和参数的解释。例如,使用虚拟编码,您可以将所有类别与单个基类别进行比较,截距是基类别的平均值(所有其他参数均为​​零)。使用偏差编码,您可以截取宏(!)均值,并且您的参数与此平均值的偏差。例如,如果您正在进行国家分析,那么将每个国家与法国进行比较并不总是有用的。相反,您可能希望将每个国家/地区与欧盟的某些平均值进行比较。

这也适用于二分变量。你想比较男人和女人,或者你宁愿比较男人和女人的意思,女人和女人的意思是什么?根据您的研究背景,两者都是可行的。

现在,当您使用手动编码时,您不会出错。然而,您无法快速从一个编码系统切换到另一个编码系统,您必须再次手动重新编码所有内容。对于更复杂的编码系统,您可以通过手动操作来制造错误。对于二分类变量而言,这可能并不重要,但如果您有更多类别,手动创建虚拟对象会使数据集混乱,并在几个月内返回分析时可能会导致混淆。只是一些使用自动编码的参数。

您可以在R here中找到有关编码系统的其他信息。这是一个有用的读物​​,在回归的背景下为您提供更大的灵活性。祝好运!

答案 1 :(得分:0)

只是为了扩展@BenBolker的评论。

在您的第一个模型中,R将Sex=F作为基线并报告截距为-0.43031。如果Sex=M整个模型移动了-0.28566(Sexm的系数)。因此,Sexm 是男性的影响,它是Sex=FSex=M时模型之间的差异。其他参数都不受此影响,因为您具有没有交互的线性模型。所以当Sex=M你有一个相同的模型,但拦截是-0.43031 +( - 0.28566)= -0.71597。

在你的第二个模型中,女性是一个数字预测器。截距发生在Female=0(例如Sex=M)和-0.71597等于第一个模型时。同样,没有其他参数是不同的,因为它是一个没有相互作用的线性模型。

IMO"正确"方式取决于您的受众。处理分类变量的惯用方法是第一种 - 使其成为一个因素。但是我发现非技术性的,或者技术性较差的"观众第二种方式很多更容易解释和理解。请注意,这仅适用于二分变量 - 如果您的分类变量可以采用两个以上的值,则必须使用因子。