我目前正从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一起工作吗?
答案 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