循环中的卡方检验用于检查基因型的p值

时间:2018-04-03 01:17:25

标签: r loops chi-squared

以下是我尝试的代码

aaxab.res=NULL

chiaaxab <- for (i in 1:length(gt)) {
               observed <- c(aa.count[i], ab.count[i])
               expected <- c(0.5, 0.5)
               chisq.test(observed, p=c(0.5, 0.5))$p.value
               p.value <- ifelse(is.na(T.value ))
               aaxab.res <- c(abxaa.res, p.value)
            }

但我一直收到错误:

Error in chisq.test(observed, p = c(0.5, 0.5)) :
  at least one entry of 'x' must be positive.

有人可以帮助纠正这个问题,因为我是R的新手

1 个答案:

答案 0 :(得分:0)

我认为您的意思是比较预期与观察到的情况,在这种情况下您的代码应该是:

               ...
               chisq.test(observed, expected, p=c(0.5, 0.5))$p.value
               ...

当您的观察值均为零时,您将收到该错误。例如:

observed <- c(0, 0)
chisq.test(observed, p=c(0.5, 0.5))
  

chisq.test中的错误(观察到,p = c(0.5,0.5)):     至少有一个'x'条目必须为正

如果您的数据集有零(有时是正常的),并且您希望循环继续而不抛出错误,则可以添加条件语句来检查零:

chiaaxab <- for (i in 1:length(gt)) {
  observed <- c(aa.count[i], ab.count[i])
  expected <- c(0.5, 0.5)
  if (aa.count[i] == 0 & ab.count[i] == 0) {
    aaxab.res <- c(abxaa.res, NA)
  } else {
    chisq.test(observed, p=c(0.5, 0.5))$p.value
    p.value <- ifelse(is.na(T.value))
    aaxab.res <- c(abxaa.res, p.value) 
    }
}

如果检测到两个零,上面的代码将添加NA

也不确定你要用这一行完成什么:p.value <- ifelse(is.na(T.value))。语法为:ifelse(test, yes, no)