如何解决显示和比较gtsummary中连续变量的正态分布和非正态分布的均值的简便方法
我有一个包含连续列和因子类型列的数据框。我正在尝试建立一个由gtsummary按变量分层的摘要表。 我的问题如下:
- 是否有一种方法可以使用一个应用族函数来一次测试所有数字变量,以确定它们的分布是否为正态(例如,shapiro.test())?
- 这样做之后,是否有办法告诉gtsummary,将正态分布的数据显示为均值(sd),将非正态分布的数据显示为中位数(IQR)?
- gtsummary是否可以根据分布情况决定是否使用方法比较均值? (例如t检验与Mann Whitney U检验)。
谢谢!
FC。
解决方法
我会尝试这样的事情。我以鸢尾花数据集为例。 为了回答您的第一个问题,我将使用sapply并使用shapiro.test来获取数据是否呈正态分布。我使用p值来确定它是否呈正态分布,但是如果有更合适的方法,则可以替换您自己的条件。第一步之后,您将获得两个向量,一个向量指定哪些变量通常是dist,哪些不是。那么您可以将该向量传递给gtsmmary,以告诉它修改这些变量的测试和统计信息。您不需要将其传递给默认值非正态分布的变量bc。
library(gtsummary)
library(dplyr)
normvals <- sapply(iris[sapply(iris,is.numeric)],function(x){
normtest <- shapiro.test(x)
#output pvalue
normtest$p.value
})
notnorm <- names(normvals[normvals <.05])
norm <- names(normvals[normvals >= .05])
irisdf <- filter(iris,Species != "setosa") %>%
mutate(Species = as.character(Species))
tbl_summary(irisdf,by = Species,statistic = list(all_of(norm) ~ "{mean} ({sd})")) %>%
add_p(
test = list(all_of(norm) ~ "t.test"
))
编辑:您可以将变量硬编码到gtsummary调用中,以便确保它可以在2020年9月22日的CRAN版本上运行:
tbl_summary(irisdf,statistic = list(c('Sepal.Width','Sepal.Length') ~ "{mean} ({sd})")) %>%
add_p(
test = list(c('Sepal.Width','Sepal.Length') ~ "t.test"
))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。