标有"因子"改变变量值

时间:2017-12-05 11:09:36

标签: r label stata

我目前正从Stata转到R,尝试在R上做我在Stata上做的事情,从头开始。 我从Stata导入原始数据并且必须转储我的标签以避免它们覆盖变量值,我现在尝试在R中生成它们,以及从多级变量再次生成我的虚拟变量。

所以我做到了:

newvar<-basevar
newvar<-mapvalues(newvar, c(1, 2, 3, 4, 5), c(1, 0, 0, 0, 0 ))

newvar <- factor(newvar,
                    levels = c(0,1),
                    labels = c("Bad", "Good"))

describe(newvar)

这完美无缺,我得到了我的预期,正常的描述结果,频率和比例,正确标记。

然后我意识到我的0/1值已被1覆盖,而不是0和2而不是1。

这是标签在R中如何工作的正常部分吗? 有没有办法在保留变量的初始值的同时添加标签?

我过去常常使用0和1来实现编码效率(并且由于Stata倾向于将1/2解释为数字,这增加了回到虚拟变量的额外步骤,但是因为我将变量设置为因子在R中,我不应该有这种问题),并且标签可以得到完全可以理解的结果(表格和图形)。

我应该学习与R一起工作吗?

1 个答案:

答案 0 :(得分:0)

据我所知,因子的第一级始终用1表示。 这是R的工作方式。

在其他功能中,例如lm() R将第一级(1)视为参考,并在后台制作假人。

小例子:

set.seed(314)
newvar <- c(1, 0, 0, 0, 0 )
outcome <- newvar + rnorm(5)/5 

newvar <- factor(newvar,
                 levels = c(0,1),
                 labels = c("Bad", "Good"))


summary(lm(outcome ~ newvar))

结果:

    Call:
  lm(formula = outcome ~ newvar)

Residuals:
  1        2        3        4        5 
0.00000  0.17959 -0.13249 -0.10664  0.05954 

Coefficients:
  Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.03409    0.07344  -0.464   0.6741  
newvarGood   0.77645    0.16422   4.728   0.0179 *
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1469 on 3 degrees of freedom
Multiple R-squared:  0.8817,    Adjusted R-squared:  0.8422 
F-statistic: 22.36 on 1 and 3 DF,  p-value: 0.01793