R中多列的卡方检验



在这里,我制作了如下data

data<-data.frame(alzheimer=c(1,1,0,1,0,0,1,0,0,0),
asthma=c(1,1,0,0,1,1,1,1,0,0),
points=c(0,1,3,5,3,2,1,2,1,5),
sex=c(1,1,0,0,0,0,1,1,1,0))

我想知道sex是否影响alzheimerasthmapoints。所以我考虑做独立性的卡方检验。alzheimerasthma是二进制变量,所以我认为我可以将sex==1和sex==0中的所有数字分别相加,并制作列联表来进行卡方检验。对于变量points,我不知道我是否可以做卡方检验,因为points是一个序数变量,范围从0到5,只有整数。

总之,我想做3个测试。

sexalzheimer是独立的吗
  • sexasthma是否独立
  • sexpoints是独立的吗
  • 此外,在我实际的data中有很多列,所以我需要知道如何一次完成许多测试,并将其制作成csv文件。csv文件应包括测试统计信息和p值。

    我们可以编写一个函数stat_test,它在二进制列上应用一个chisq.test,在其他列上应用wilcox.test(假设它们都是序数(。我们可以让这个函数输出三件事。

    1. 测试名称
    2. 统计数据(stats(的值
    3. p值

    然后我们可以使用dplyr::across()将此测试应用于所有列(除了函数中用作y输入的alzheimer列(。之后,我们只添加标签作为第一行。

    data <- data.frame(alzheimer=c(1,1,0,1,0,0,1,0,0,0),
    asthma=c(1,1,0,0,1,1,1,1,0,0),
    points=c(0,1,3,5,3,2,1,2,1,5),
    sex=c(1,1,0,0,0,0,1,1,1,0))
    library(dplyr)
    stat_test <- function(x, y) {
    if (length(unique(na.omit(x))) > 2) {
    res <- chisq.test(x = x,
    y = y)
    label <- "chi_square"
    } else {
    res <- wilcox.test(x, y = y)
    label <- "wilcox"
    }
    
    c(
    test = label,
    stats = res$statistic,
    p_val = res$p.value
    )
    }
    data %>% 
    as_tibble %>% 
    summarise(across(-alzheimer,
    ~ stat_test(.x, alzheimer))) %>% 
    mutate(label = c("test", "stats", "pvalue"), .before = 1L)
    #> Warning in wilcox.test.default(x, y = y): cannot compute exact p-value with ties
    #> Warning in chisq.test(x = x, y = y): Chi-squared approximation may be incorrect
    #> Warning in wilcox.test.default(x, y = y): cannot compute exact p-value with ties
    #> # A tibble: 3 x 4
    #>   label  asthma            points            sex              
    #>   <chr>  <chr>             <chr>             <chr>            
    #> 1 test   wilcox            chi_square        wilcox           
    #> 2 stats  60                5.13888888888889  55               
    #> 3 pvalue 0.407562453620744 0.273341191458911 0.693376361757653
    

    创建于2022-09-27由reprex包(v2.0.1(

    最新更新