【问题标题】:Labelling with "factor" change variable values用“因子”标记更改变量值
【发布时间】:2017-12-05 11:09:35
【问题描述】:

我目前正在从 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 吗?

【问题讨论】:

    标签: r label stata


    【解决方案1】:

    据我所知,因子的第一级总是用 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
    

    【讨论】:

    • 谢谢,以后我会学习使用 1 作为因子的参考水平。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多