使用 R 中的表 1 显示 95% 置信区间

问题描述 投票:0回答:1

我有人口统计数据,对于一些变量,我想显示平均值 (95% CI) 到目前为止:

> label (demog$Site) = "Site"
> label (demog$Sex) = "Sex"
> label (demog$Age) = "Age (years)"
> label (demog$Temperature) = "Temperature (Celcius)"
> label (demog$MOI) = "MOI"
> 
> table1(~Sex + Age + Temperature + MOI | Site, data = demog)

这为我提供了按采样点分层的所有变量,这就是我想要的。但它报告了每个连续变量的平均值 (SD)、中位数 [最小、最大] 和缺失值(除了“性别”之外的所有变量),这是我不想要的。

为了改变显示的内容,我尝试模仿这个: https://benjaminrich.github.io/table1/vignettes/table1-examples.html

我做了:

> my.render.cont = function(x) {with(stats.apply.rounding(stats.default(x), digits=2), c("", "Mean (95% CI)"=sprintf("%s (± %s)", MEAN, (MEAN + SD*1.96), (MEAN - SD*1.96))))}
> my.render.cat = function(x) {c("", sapply(stats.default(x), function(y) with(y, sprintf("%d (%0.0f %%)", FREQ, PCT))))}
> strata = c(list(Total=demog), split(demog, demog$Site))

但是当我尝试实际显示表格时

> table1(strata, labels, render.continuous=my.render.cont, render.categorical=my.render.cat)
Error: object of type 'closure' is not subsettable

我不一定关心以这种特定方式显示 95% CI,我只是想显示它们。如果有人修复了这个错误,那就太好了。如果有人有完全不同的方式在此表中显示平均值 (95% CI),也很棒

r confidence-interval demographics
1个回答
0
投票

不要使用 MEAN 和 SD,而是使用 stats.default(x)$MEAN 和 stats.default(x)$SD 访问统计数据。使用您共享的链接中的黑色素瘤数据,得出平均值置信区间的最小工作示例。

library(boot)
library(stats)

meldf <- melanoma
meldf$status.f <- factor(meldf$status)
meldf$ulcer.f <- factor(meldf$ulcer)

labels <- list(
    variables=list(status.f='Status',
                   ulcer.f='Ulcer Y/N',
                   age='Age',
                   thickness='Thickness'
                   ))

strata <- split(meldf, meldf$sex)

my.render.cont = function(x, name, ...) {
    if (name=='thickness') {
         c("", "95% CI"=sprintf("%s &plusmn; %s",
                                       round(stats.default(x)$MEAN-qt(0.975,stats.default(x)$N-1)*stats.default(x)$SD/sqrt(stats.default(x)$N),6),
                                       round(stats.default(x)$MEAN+qt(0.975,stats.default(x)$N-1)*stats.default(x)$SD/sqrt(stats.default(x)$N),6)))
    }
    else {
        render.default(x, name, ...)
    }
}
    
tbl2 <- table1(strata,
              labels,
              render.continuous=c(.="Median", .="Q1-Q3"), # in case you have other stats you want to display differently
              render=my.render.cont)
tbl2

您可以使用以下方法检查置信区间:

t.test(meldf[meldf$sex==0,]$thickness)$conf.int
t.test(meldf[meldf$sex==1,]$thickness)$conf.int
© www.soinside.com 2019 - 2024. All rights reserved.