繁体   English   中英

如何在 R 中创建 2 路列联表

[英]How to create 2-way contingency tables in R

(免责声明:抱歉,我之前确实问过类似的问题。它没有得到任何答案,它已关闭。)

我想创建不同大小的 2 路列联表,例如,从 3x3 到 10x15,其中一些应该显示显着关联(使用chisq.test()或类似的),而另一些则没有。 我已经跑到可能相关的帖子中,但我看不到连接所有点的方法。 例如, 这篇文章讨论了如何使用r2dtable()创建随机 2 路表。 接下来,有关于生成随机整数的帖子,这些整数总和为特定值, herehere ,这对于定义r2dtable()的行和列边缘可能很有用。

然而,它使我无法生成此类表的列表。 此外,似乎r2dtable()总是返回显示没有关联的表。 鉴于表格是随机的,我想这是可以预料的。

有人可以帮忙吗?

您的问题中缺少的信息是如何在表中定义关联或缺乏关联。 这将是任何通用解决方案的特定案例部分。

我假设您最终要分析的“表格”由汇总数据组成,按两个因素分类。

generateData <- function(nRow, nCol, f, ...) {
  df <- tibble() %>% 
          expand(
            Row=1:nRow,
            Col=1:nCol
          )
  df <- df %>% 
          f(...)  %>% 
          pivot_wider(
            names_from=Col,
            values_from=Value,
            names_prefix="Col"
          )
  return(df)
}

在这里, nColnRow具有明显的含义, f是一个 function ,它必须被定义并在一个长的小标题中填充一个名为Value的列,其中包含名为RowCol的列。 如果需要,省略号...允许您将任意附加 arguments 传递给f

要生成在行和列之间没有关联的表,只需用随机数据填充Value 例如:

randomCells <- function(df, ...){
  df %>% mutate(Value=5 + floor(runif(df %>% nrow(), max=10)))
}

以便

x <- generateRawData(3, 5, randomCells)
x
# A tibble: 3 x 6
    Row  Col1  Col2  Col3  Col4  Col5
  <int> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     9    11    11    14     8
2     2    13    11    12     5    14
3     3     8    11    14    13    10

chisq.test(as.matrix(x))

    Pearson's Chi-squared test

data:  as.matrix(x)
X-squared = 8.8907, df = 10, p-value = 0.5425

现在假设您想要跨列的线性趋势,但行之间没有关联:

linearColumns <- function(df, ...){
  df %>% mutate(Value=4*Col + floor(runif(df %>% nrow(), max=25)))
}

x <- generateRawData(3, 6, linearColumns)
x
# A tibble: 3 x 6
    Row  Col1  Col2  Col3  Col4  Col5
  <int> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1    20    12    31    24    46
2     2     9    25    39    46    38
3     3     6    20    35    36    49

给予

chisq.test(as.matrix(x))

    Pearson's Chi-squared test

data:  as.matrix(x)
X-squared = 22.63, df = 10, p-value = 0.0122

你只需要定义f来给出你想要的模式。 在更复杂的情况下,在实验单元级别定义响应可能更容易,然后聚合观察到的数据以形成您的模拟数据。

抱歉,在生成示例之前我忘记了set.seed()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM