我正在为使用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虚拟代码吗?
答案 0 :(得分:1)
无论哪种方式都是正确的(假设你正确地进行了手动编码),但是有一个但是。 R支持分类变量的几种编码方案(对比)。存在虚拟编码,偏差编码,Helmert编码等。这些方案中的每一个的变化是截距的含义和参数的解释。例如,使用虚拟编码,您可以将所有类别与单个基类别进行比较,截距是基类别的平均值(所有其他参数均为零)。使用偏差编码,您可以截取宏(!)均值,并且您的参数与此平均值的偏差。例如,如果您正在进行国家分析,那么将每个国家与法国进行比较并不总是有用的。相反,您可能希望将每个国家/地区与欧盟的某些平均值进行比较。
这也适用于二分变量。你想比较男人和女人,或者你宁愿比较男人和女人的意思,女人和女人的意思是什么?根据您的研究背景,两者都是可行的。
现在,当您使用手动编码时,您不会出错。然而,您无法快速从一个编码系统切换到另一个编码系统,您必须再次手动重新编码所有内容。对于更复杂的编码系统,您可以通过手动操作来制造错误。对于二分类变量而言,这可能并不重要,但如果您有更多类别,手动创建虚拟对象会使数据集混乱,并在几个月内返回分析时可能会导致混淆。只是一些使用自动编码的参数。
您可以在R here中找到有关编码系统的其他信息。这是一个有用的读物,在回归的背景下为您提供更大的灵活性。祝好运!
答案 1 :(得分:0)
只是为了扩展@BenBolker的评论。
在您的第一个模型中,R将Sex=F
作为基线并报告截距为-0.43031。如果Sex=M
整个模型移动了-0.28566(Sexm的系数)。因此,Sexm 不是男性的影响,它是Sex=F
和Sex=M
时模型之间的差异。其他参数都不受此影响,因为您具有没有交互的线性模型。所以当Sex=M
你有一个相同的模型,但拦截是-0.43031 +( - 0.28566)= -0.71597。
在你的第二个模型中,女性是一个数字预测器。截距发生在Female=0
(例如Sex=M
)和-0.71597等于第一个模型时。同样,没有其他参数是不同的,因为它是一个没有相互作用的线性模型。
IMO"正确"方式取决于您的受众。处理分类变量的惯用方法是第一种 - 使其成为一个因素。但是我发现非技术性的,或者技术性较差的"观众第二种方式很多更容易解释和理解。请注意,这仅适用于二分变量 - 如果您的分类变量可以采用两个以上的值,则必须使用因子。