【问题标题】:multirow contingency table in RR中的多行列联表
【发布时间】:2013-08-14 14:44:16
【问题描述】:

让我们考虑这个数据集:

df <- data.frame(age=   sample(c(20:90), 20, rep=T), 
             sex =  sample(c('m', 'f'), 20, rep=T),
             smoker=sample(c("never", "former", "active"), 20, rep=T),
             size=  sample (c(8:40), 20, rep=T),
             fac =  as.factor(sample(c("neg","lo","med","hi"), 20, rep=T)),
             outcome = sample(c(0,1), 20, rep=T)
             )
# let's introduce some missing data         
for (i in (1:3)) {df[sample(c(1:20),1),  sample(c(1:6),1)]  <- NA}

在医学手稿中,第一个表格总结了人群(或其适当的亚组);这里的行是年龄、性别、吸烟状况等,两个结果将列在不同的列中。连续变量报告为平均值;分类变量作为计数。

  1. 我想知道是否有我缺少的功能 创建这样的列联表。我可以手动执行此操作,但希望能够在数据集更改时自动更新。最终我需要用乳胶输出。
  2. 该函数需要忽略丢失的数据,但不删除这些行。

要求太多了?!

【问题讨论】:

  • 默认table'忽略'NA。比较with(df, table(fac, outcome))with(df, table(fac, outcome, useNA = "always"))with(df, table(fac, outcome, exclude = NULL))
  • 关于can't find object 'fac',你需要参考你的数据集df
  • 关于table(na.omit(mean(age)), outcome):当您考虑了之前的评论并检查了?meanna.rm,您可能会再次想知道为什么它不起作用,以及您真正希望使用此表实现什么.
  • 谢谢 Henrik,我编辑了 OP。
  • 我无法理解。由于age 是连续的,您是否想要以平均age 作为行名并以两列作为两个结果的计数的单行?

标签: r contingency


【解决方案1】:

在医学文章中,“表 1”总结了研究人群的人口统计数据,通常在亚组之间进行细分

生成数据集

n 

##   age sex smoker  size logitest labtest outcome
## 1  70   m former 39.17       NA     med      NA
## 2  51   f former 33.64    FALSE      hi       1
## 3  58   f former 10.10    FALSE     neg       1
## 4  30   m former 43.24    FALSE     med       0
## 5  54   m former 22.78    FALSE      lo       0
## 6  86   f former  8.20    FALSE     neg       0
如果使用真实的数据集,请改用它
# df 

根据需要进行更改:必须从变量列表中删除带有诊断的列!

dx 

##       age         sex        smoker        size        logitest      
##  Min.   :20.0   f   :44   active:19   Min.   : 0.91   Mode :logical  
##  1st Qu.:42.5   m   :54   former:49   1st Qu.:15.00   FALSE:85       
##  Median :58.0   NA's: 2   never :30   Median :20.12   TRUE :12       
##  Mean   :57.3             NA's  : 2   Mean   :20.44   NA's :3        
##  3rd Qu.:74.0                         3rd Qu.:27.10                  
##  Max.   :88.0                         Max.   :43.24                  
##  NA's   :1                            NA's   :2                      
##  labtest  
##  hi  : 4  
##  lo  :29  
##  med :20  
##  neg :45  
##  NA's: 2  
##           
## 
附加(df)

构建变量列表

vars 

## [1] "age"      "sex"      "smoker"   "size"     "logitest" "labtest" 
## [7] "outcome"
catvars 

## [1] "age"      "sex"      "smoker"   "size"     "logitest" "labtest"
for (i in 1:length(vars)) {
    ifelse(is.factor(df[, i]), catvars 

## [1] "age"  "size"
catvars
## [1] "sex"     "smoker"  "labtest"
对数
## [1] "logitest"

创建子组

bg 

## [1] 73
mg 

## [1] 23
indet 

## [1] 4
索引
##    age sex smoker   size logitest labtest outcome
## 1   70   m former 39.173       NA     med      NA
## 9   87   m former 23.621    FALSE      lo      NA
## 18  65   m former  2.466    FALSE    <NA>      NA
## 67  88   f former 17.575    FALSE     med      NA

对于连续变量

正态性检验
正常性 

## [1] 0.00125 0.73602
比较两个样本的平均值;如果正常,使用 t 检验,否则使用 wilcoxon
ttp值 

## [1] 0.6358 0.3673
contvarlist 

对于分类变量

chisqpvalue 

## [1] 0.01579 0.77116 0.39484
catvarlist 

对于逻辑变量

proppvalue 

## [1] 0.5551
logivarlist = list(变量 = logivars, chisq.by.subgroup = proppvalue)

现在,结果!

str(contvarlist) #if shapiro p<.05 then pop dist t p>
## List of 3
##  $ variables        : chr [1:2] "age" "size"
##  $ normality        : num [1:2] 0.00125 0.73602
##  $ ttest.by.subgroup: num [1:2] 0.636 0.367
str(catvarlist) #if chisq p<.05>
## List of 2
##  $ variables        : chr [1:3] "sex" "smoker" "labtest"
##  $ chisq.by.subgroup: num [1:3] 0.0158 0.7712 0.3948
str(logivarlist) #if chisq p<.05>
## List of 2
##  $ variables        : chr "logitest"
##  $ chisq.by.subgroup: num 0.555

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2014-09-30
    • 2018-02-12
    • 2016-07-03
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多