在数据框的所有列上运行Fisher精确测试时,如何删除缺失值

时间:2018-07-13 10:17:59

标签: r lapply

我有一个数据帧(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精确测试中删除这些NA?

预先感谢

1 个答案:

答案 0 :(得分:0)

您还没有提供能够再现您在帖子中提到的错误的数据,因此很难确切知道示例中的错误。

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)将作为 third 参数传递给工作区fisher.test。初次调用就足够了,尽管如果您对每个自变量没有两个类别的话可能会遇到问题。