r - 在数据框的所有列上运行 Fisher 精确检验时如何删除缺失值
问题描述
我有一个数据框(df),由一组自变量(V,W,X,...)组成,作为列,每一行都是一个不同的样本。最后一行显示因变量 (AH)。
R <- lapply (data, fisher.test, y=data$AH)
R
当然,我的实际数据框有更多的因变量(大约 60 个)。另外,我的变量中有一些缺失的数据。我在lapply
函数代码中尝试了不同的参数,例如 na.rm = TRUE
和!is.na
。
我也试过了na.omit
。代码如下所示:
R <- lapply (df, fisher.test, na.omit(df), y=df$AH)
但它给出了以下错误:
FUN(X[[i]], ...) 中的错误:无法分配大小为 134217728 Tb 的内存块。
这是我的数据集的一个子集(当然,只是其中的一部分):
V W X Y Z AA AB AC AD AE AF AG AH
1 NA NA NA NA NA NA NA NA NA NA NA NA 2
2 2 2 2 2 NA 2 2 1 2 2 2 2 2
3 2 2 2 2 2 2 2 1 2 NA NA 2 2
4 1 1 2 NA 2 NA 2 2 1 2 2 2 2
5 1 1 2 2 2 NA 2 1 2 NA 1 NA 2
6 2 2 1 2 2 1 2 2 2 2 2 NA 1
7 1 1 2 2 2 2 2 1 1 2 2 1 2
8 1 1 1 1 2 1 1 1 1 2 1 1 2
9 NA NA NA NA NA NA NA NA NA NA NA NA 1
10 2 2 2 2 2 2 1 2 2 2 2 2 1
11 NA NA NA NA NA NA NA NA NA NA 1 2 1
12 2 2 2 2 2 2 2 1 2 2 2 2 2
13 2 NA 2 2 2 NA 2 NA 1 2 2 NA 2
14 NA NA NA NA NA NA NA NA NA NA NA NA 1
15 2 2 2 2 2 2 2 2 2 2 2 2 2
16 1 1 1 2 2 1 1 1 1 2 1 2 2
17 1 1 1 2 2 1 2 1 1 2 1 1 2
18 1 1 2 2 2 NA 1 1 NA 2 1 2 2
19 2 NA 2 2 2 2 2 2 2 2 2 2 1
20 NA NA 2 2 2 1 1 1 2 2 2 2 1
21 2 2 2 2 2 2 2 2 2 2 2 2 2
22 1 2 2 2 2 2 2 2 2 2 2 2 1
23 2 2 2 2 2 2 2 2 2 2 2 2 2
24 2 2 2 2 2 2 2 2 2 2 1 2 2
25 2 2 2 2 2 NA 2 1 2 2 1 1 2
26 2 2 2 2 2 2 2 2 2 2 2 2 2
27 2 2 2 2 2 2 2 2 2 2 2 2 2
28 NA NA NA NA NA NA NA NA NA NA NA NA 2
[ reached getOption("max.print") -- omitted 31 rows ]
如何在我的 Fisher's Exact 测试中删除这些 NA?
提前致谢
解决方案
您没有提供重现您在帖子中提到的错误的数据,因此很难确切知道您的示例中出了什么问题。
该fisher.test
函数会自动忽略您在数据中的缺失,并且它不会产生不正确的 p 值(并且您没有提及错误的示例以及在何种意义上它是错误的)。看这里
> fisher.test(c(NA, 1, 1, 1, 1, 2, 2, 2, 2), c(1, 1, 1, 1, 1, 2, 2, 2, 2))
Fisher's Exact Test for Count Data
data: c(NA, 1, 1, 1, 1, 2, 2, 2, 2) and c(1, 1, 1, 1, 1, 2, 2, 2, 2)
p-value = 0.02857
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.339059 Inf
sample estimates:
odds ratio
Inf
删除第一对观测值的相同分析产生与包含缺失值时相同的结果。
> fisher.test(c(1, 1, 1, 1, 2, 2, 2, 2), c(1, 1, 1, 1, 2, 2, 2, 2))
Fisher's Exact Test for Count Data
data: c(1, 1, 1, 1, 2, 2, 2, 2) and c(1, 1, 1, 1, 2, 2, 2, 2)
p-value = 0.02857
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.339059 Inf
sample estimates:
odds ratio
Inf
但是,您可能对这条线有疑问
lapply (df, fisher.test, na.omit(df), y=df$AH)
因为na.omit(df)
将作为工作空间的第三个参数传递fisher.test
。初次调用就足够了,尽管如果您最终没有为每个自变量设置 2 个类别,您可能会遇到问题。
推荐阅读
- rest - 如何在 Drupal 8 中对自定义插件(资源)自动应用更改更改
- mobile - P2P messaging over internet
- php - 动态产品列表页面php
- php - Laravel 5.7.28 覆盖 getAuthPassword 仍然会引发未定义的索引:密码
- c# - 异步运行 C# WPF 事件
- batch-file - 如何在不转到每个窗口并执行 CTRL + C 的情况下终止许多生成的进程?
- assembly - 如何获得没有 NUL 字节的 objdump?
- javascript - 创建没有任何父级的树结构作为来自一级对象列表的输入
- google-apps-script - Open cell for editing in Google Sheets
- video - ffmpeg 从 m3u8 中选择特定语言的最高质量视频轨道和音频轨道