【问题标题】:Tableone unable to process factors from a survey svydesign objectTableone 无法处理来自调查 svydesign 对象的因素
【发布时间】:2018-04-04 14:21:13
【问题描述】:

我正在尝试使用 tableone 包生成表一摘要,其中数据输入是使用调查包制作的调查设计对象。根据 tableone 文档,这应该是可能的,事实上,它适用于我同事的工作区。 Tableone 能够处理连续变量,但不能处理因子。下面是一个可重现的例子

library(survey, tableone)
age<- c(55,66,77,33,44)
gender<-c("Male","Male","Female","Male","Female")
weights<-c(2.3,1.0,3.0,2.3,1.0)

df<- data.frame(age,gender,weights)
svy <- svydesign(id = ~0, data = df, weights=~weights)
t1 <- svyCreateTableOne(data = svy, vars=c("age", "gender")) 

我收到一条错误消息:“Summary.factor(c(3L, 1L), na.rm = TRUE) 中的错误: ‘sum’ 对因子没有意义”

无论我是否将“性别”列保留为字符,或者是否在创建 svy1 之前将其更改为一个因子,这种情况都会持续存在。

我在 RStudio 1.1.442 上运行 R 版本 3.4.4。

有人遇到此问题或有解决此问题的建议吗?谢谢!

【问题讨论】:

  • 在您的t1 &lt;- svyCreateTableOne(data = svy, vars=c("age", "gender")) 中输入t1 &lt;- svyCreateTableOne(data = svy, vars=c("age", "gender"), factorVars = "gender") 是否可以解决问题?
  • 很遗憾没有
  • 问题一定出在svy 对象中。 CreateTableOne(vars=c("age","gender"),data=df) 适用于分类变量和定量变量。
  • 这真的很奇怪,因为如果我使用 svytable 函数,它可以正常工作,这向我暗示 svy 对象没问题并且理解性别是一个分类:svytable(~gender, svy)

标签: r survey


【解决方案1】:

将变量“weights”重命名为其他名称(例如“ps_Weights”),它就会运行。

library(survey)
library(tableone)
age<- c(55,66,77,33,44)
gender<-c("Male","Male","Female","Male","Female")
ps_weights<-c(2.3,1.0,3.0,2.3,1.0)

df<- data.frame(age,gender,ps_weights)
svy <- svydesign(id = ~0, data = df, weights=~ps_weights)
t1 <- svyCreateTableOne(data = svy, vars=c("age", "gender"))
print(t1)

                Overall      
n 9.60
age (mean (sd)) 56.60 (19.03)
gender = Male (%) 5.6 (58.3)

【讨论】:

    【解决方案2】:

    如果您从提供给svyCreateTableOne的变量列表中删除分类变量,它会起作用:

    > t1 <- svyCreateTableOne(data = svy, vars=c("age", "weights")) 
    > t1
    
                          Overall      
      n                    9.60        
      age (mean (sd))     56.60 (19.03)
      weights (mean (sd))  2.25 (0.79) 
    

    根据我对tableone 包的理解,您必须分别检查您的分类变量和定量变量。如果要按性别分,加strata

    > t1 <- svyCreateTableOne(data = svy, vars=c("age", "weights"), strata=c("gender")) 
    > t1
                         Stratified by gender
                          Female        Male          p      test
      n                    4.00          5.60                    
      age (mean (sd))     68.75 (20.21) 47.93 (15.99)  0.205     
      weights (mean (sd))  2.50 (1.22)   2.07 (0.61)   0.552     
    

    【讨论】:

    • 我同意第一部分 - tableone 与连续变量完美配合。关于第二部分 - 在使用上面引用的代码时,我实际上仍然遇到同样的错误,按性别分层。顺便说一句,我认为我仍然应该能够在表格中使用分类变量并报告加权频率。事实上,子集函数 svyCreateCatTable 应该可以做到这一点,但对我也不起作用。
    • 是的,我刚刚查看了代码,它看起来确实像 svyCreateTableOne 应该分别构造分类和定量的值,然后组合成一个 TableOne 对象......它不是为你的数据做的。您是否尝试过联系包作者?可能有错误。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多