【问题标题】:Add new value to table() in order to be able to use chi square test向 table() 添加新值以便能够使用卡方检验
【发布时间】:2023-01-08 01:40:48
【问题描述】:

从单个数据集中,我在目标变量上创建了两个数据集过滤。现在我想使用卡方比较数据集中的所有特征。问题是两个数据集之一比另一个小得多,所以在某些特征中我有一些值在第二个数据集中不存在,当我尝试应用卡方检验时我得到这个错误:“所有参数必须具有相同的长度”。

为了能够使用卡方检验,如何将缺失值添加到价值较小的数据集中?

例子:

我想在两个数据集中的相同特征上使用卡方:

chisq.test(table(df1$var1, df2$var1))

但我收到错误“所有参数必须具有相同的长度”,因为 table(df1$var1) 是:

a  b  c  d
2  5  7  18

table(df2$var1) 是:

a  b  c
8  1  12

所以我想做的是在 df2 中添加值 d 并将其设置为等于 0 以便能够使用卡方检验。

【问题讨论】:

    标签: r dataset chi-squared


    【解决方案1】:

    如果我们使用指定的levels转换为factor,则可以修改df2table输出

    table(factor(df2$var1, levels = letters[1:4]))
    
     a  b  c  d 
     8  1 12  0 
    

    但是,带有两个输入的 table 应该具有相同的长度。为此,我们可能需要绑定数据集,然后使用table

    library(dplyr)
    table(bind_rows(df1, df2, .id = 'grp'))
       var1
    grp  a  b  c  d
      1  2  5  7 18
      2  8  1 12  0
    

    或者在base R

    table(data.frame(col1 = rep(1:2, c(nrow(df1), nrow(df2))), 
      col2 = c(df1$var1, df2$var1)))
        col2
    col1  a  b  c  d
       1  2  5  7 18
       2  8  1 12  0
    

    数据

    df1 <- structure(list(var1 = c("a", "a", "b", "b", "b", "b", "b", "c", 
    "c", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d", "d", "d", 
    "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d")), class = "data.frame", 
    row.names = c(NA, 
    -32L))
    
    df2 <- structure(list(var1 = c("a", "a", "a", "a", "a", "a", "a",
     "a", 
    "b", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"
    )), class = "data.frame", row.names = c(NA, -21L))
    

    【讨论】: