【问题标题】:perform fisher test for multiple rows对多行执行 Fisher 测试
【发布时间】:2014-08-09 17:40:16
【问题描述】:

我有一个名为“case.control”的数据有 1000 行和 2000 col 列是 case 或 control 所以我根据案例和控制将它们分开,所以我现在有两个数据集 一将是 1000 行和 400 col = case 另一个 1000 行和 600 列 = 控制 我尝试在每一行都进行 Fisher 测试

dat1=c()
dat2=c()
for (i in 1:nrow(case)){
dat1[i]<-table(case[i,])
dat2[i]<-table(control[i,])
tab[i]<-as.table(rbind(dat[i],dat[i]))
fisher.test(tab, alternative="greater")}

此代码不起作用,因为有时我在单元格中的值为零,但代码将其更改为另一个数字,例如,如果我有

g1    g2 
400   0
500   100

把它改成

g1     g2
400   400
500  100

任何建议

数据看起来像这个样本:

Positions      gene1   gene2   gene3 ...... gene2000
 1              0        1       2            2
 2              1        0       0            1
 3              2        1       1            1
 .
 .
 1000           1        0        0           0

【问题讨论】:

  • 你能提供一个小样本数据来复制这个问题吗?
  • 目前您的代码暗示您的工作区中有许多对象:data.controlcasecontroldat。您还未能创建 dat1dat2tab 对象,因此使用 [&lt;- 分配给“内部值”可能会失败。我猜您来自不同的编程范例,您可以轻松地使用对象名称,但是这种操作在 R 中是不合法的。如果我错了,那么您需要提供丢失数据对象的一小部分。
  • 我现在更改对象。看看你能不能看懂。
  • casecontrol 对象的结构仍不清楚。您的示例数据只是一个“东西”,但您有两个对象。此外,此代码:rbind(dat[i],dat[i]) 可能应该是 rbind(dat1[i],dat2[i]) ... 或其他东西。请花点时间发布一个可重现的示例,不幸的是,这是....不是。

标签: r chi-squared


【解决方案1】:

您的代码存在两个主要问题。

首先,您的代码将不起作用,因为 tab、dat1 和 dat2 是向量,您将它们视为某种列表或数组。

其次,如果 CASE 中的一行包含与 CONTROL 不同的值,您也会得到错误。例如:

> x = c(1,2,1,0,1,4,3,2)
> y = c(x, 9)

> rbind(dat1,dat2)
     0 1 2 3 4 9
dat1 1 3 2 1 1 1
dat2 1 3 2 1 1 1

显然是错误的,因为 x 不包含 9 值。这样做的方法是首先将 dat1 和 dat2 转换为具有特定水平的因子。

固定代码:

dat1=list()
dat2=list()
tab=list()
for (i in 1:nrow(case)){
dat1[[i]]<-table(as.factor(case[i,], levels=1:4) #replace levels with all possible values in your data
dat2[[i]]<-table(as.factor(control[i,], levels=1:4) #replace levels with all possible values in your data
tab[[i]]<-as.table(rbind(dat[i],dat[i]))
fisher.test(tab, alternative="greater")}

【讨论】:

  • 很好,但是有问题 Fisher.test(tab, alternative = "greater") 中的错误:如果'x'不是矩阵,必须给出'y'跨度>
猜你喜欢
  • 1970-01-01
  • 2013-02-05
  • 2022-07-22
  • 2021-07-07
  • 2010-10-08
  • 2015-05-12
  • 2019-07-12
  • 2019-09-22
  • 1970-01-01
相关资源
最近更新 更多