如何使用gtsummary为分类变量添加事后检验P值
问题:gtsummary添加分类变量事后检验P值失败
我是R新手,若问题较为基础还请见谅。我的部分数据如下:
pathogen abnorm B_Line consolid consol_size consol_sizeAdj 1 Bacteria Yes Yes Yes 59 70.66 2 Virus No No No 0 0.00 3 Virus Yes Yes Yes 46 98.40 4 MP Yes Yes Yes 45 89.55 5 Virus Yes Yes Yes 43 63.47 6 MP Yes Yes Yes 39 37.96 7 MP Yes Yes Yes 37 45.26 8 MP Yes Yes Yes 35 43.75 9 Bacteria Yes Yes Yes 35 92.11 10 MP Yes Yes Yes 35 26.12 11 Bacteria No No No 0 0.00 12 MP Yes Yes Yes 33 54.32 13 Virus No No No 0 0.00 14 Bacteria Yes Yes Yes 32 55.90 15 MP Yes Yes Yes 31 30.69 16 Virus Yes Yes Yes 30 48.00 17 Virus No No No 0 0.00 18 Virus No No No 0 0.00 19 Virus No No No 0 0.00 20 MP No No No 0 0.00 21 Virus No No No 0 0.00 22 Bacteria No No No 0 0.00 23 MP Yes Yes Yes 24 23.36 24 MP Yes Yes Yes 24 33.68 25 MP Yes Yes Yes 22 45.36 26 Bacteria Yes Yes Yes 27 33.75 27 MP Yes Yes Yes 20 18.69 28 MP Yes Yes Yes 20 26.14 29 MP Yes Yes Yes 20 22.99 30 MP Yes Yes Yes 19 17.59 31 MP Yes Yes Yes 18 29.63 32 Bacteria Yes Yes Yes 24 43.24 33 MP Yes Yes Yes 17 23.29 34 MP Yes Yes Yes 19 32.20 35 Virus No No No 0 0.00 36 MP Yes Yes Yes 15 14.35 37 Bacteria Yes Yes Yes 15 22.14 38 Virus Yes Yes Yes 15 30.93 39 MP Yes Yes Yes 15 25.42 40 Bacteria Yes Yes Yes 17 16.27 41 MP Yes Yes Yes 14 26.92 42 Virus Yes Yes Yes 14 15.47 43 Bacteria Yes Yes Yes 13 20.80 44 Bacteria Yes Yes Yes 13 23.42 45 Bacteria Yes Yes Yes 12 20.34 46 Virus Yes Yes Yes 12 26.67 47 MP Yes Yes Yes 12 19.20 48 MP Yes Yes Yes 33 61.40 49 MP Yes Yes Yes 12 11.68 50 Bacteria Yes Yes Yes 40 57.55 51 Virus Yes Yes Yes 11 26.51 52 MP Yes Yes Yes 7 8.75 53 MP Yes Yes Yes 18 33.49 54 MP Yes Yes Yes 9 8.41 55 Bacteria Yes Yes Yes 9 14.81 56 Virus Yes Yes Yes 8 10.46 57 MP Yes Yes Yes 11 21.15 58 MP Yes Yes Yes 9 8.33 59 Bacteria Yes Yes Yes 7 12.61 60 Bacteria Yes Yes Yes 7 4.40 61 Bacteria Yes Yes Yes 7 11.86 62 MP Yes Yes Yes 7 11.20 63 Virus Yes Yes No 0 0.00 64 Virus Yes Yes Yes 5 10.31 65 Virus Yes Yes Yes 7 13.46 66 Virus Yes Yes Yes 6 19.35 67 Virus Yes Yes Yes 2 5.52 68 MP Yes Yes Yes 6 7.50 69 Virus Yes Yes Yes 6 19.35 70 Virus Yes Yes Yes 6 10.81 71 Bacteria Yes Yes Yes 26 50.00 72 Virus Yes Yes No 0 0.00 73 Virus Yes Yes Yes 5 12.58 74 Virus Yes Yes Yes 5 6.85 75 Virus Yes Yes Yes 10 18.02
我希望使用gtsummary包的add_stat函数为基线表(Table 1)添加事后检验的P值。数值变量的实现代码已经搞定,现在尝试编写分类变量版本的代码,使用chisq.multcomp()函数,但代码运行失败。以下是我的尝试代码:
compare <- read.csv("final.csv", header = T) add_stat_pairwise_numeric <- function(data, variable, by, ...) { # calculate pairwise p-values pw <- pairwise.t.test(data[[variable]], data[[by]], p.adj = "BH") # convert p-values to list index <- 0L p.value.list <- list() for (i in seq_len(nrow(pw$p.value))) { for (j in seq_len(nrow(pw$p.value))) { index <- index + 1L p.value.list[[index]] <- c(pw$p.value[i, j]) %>% setNames(glue::glue("**{colnames(pw$p.value)[j]} vs. {rownames(pw$p.value)[i]}**")) } } # convert list to data frame p.value.list %>% unlist() %>% purrr::discard(is.na) %>% t() %>% as.data.frame() %>% # formatting/roundign p-values dplyr::mutate(dplyr::across(everything(), style_pvalue)) } add_stat_pairwise_categorical <- function(data, variable, by, ...) { # Calculate the contingency table and perform chi-squared test tab <- table(data[[variable]], data[[by]]) chisq <- chisq.test(tab) # Extract the pairwise comparison p-values using chisq.multcomp() p.values <- chisq.multcomp(tab, reversed = TRUE)$pvals # Create a list of named p-values for each pairwise comparison index <- 0L p.value.list <- list() for (i in seq_along(p.values)) { for (j in seq_along(p.values)) { index <- index + 1L p.value.list[[index]] <- c(p.values[i, j]) %>% setNames(glue::glue("**{colnames(p.values)[j]} vs. {rownames(p.values)[i]}**")) } } # Convert the list to a data frame and format the p-values p.value.list %>% unlist() %>% purrr::discard(is.na) %>% t() %>% as.data.frame() %>% dplyr::mutate(dplyr::across(everything(), style_pvalue)) } tbl_summary( data = compare, type = list( all_continuous() ~ "continuous2", consol_size ~ "continuous2", consol_sizeAdj ~ "continuous2" ), by = pathogen, statistic = list( all_continuous() ~ c("{mean} ({sd})", "{median} ({p25}, {p75})", "{min}, {max}"), all_categorical() ~ "{n} / {N} ({p}%)" ) ) %>% add_overall() %>% add_p(pvalue_fun = ~ style_pvalue(.x, digits = 2), list(all_continuous() ~ "kruskal.test")) %>% add_stat(list(all_continuous() ~ add_stat_pairwise_numeric, all_categorical() ~ add_stat_pairwise_chisq)) %>% modify_header(label = "**Severe**") %>% bold_labels() %>% modify_caption("**Baseline**") %>% bold_p(t = 0.05)
当前使用add_p函数后的基线表已生成,但分类变量的事后检验P值始终无法添加,请求帮助解决这个问题。
内容的提问来源于stack exchange,提问作者Keal Anderson
相关产品推荐
相关产品推荐

