如何使用chisq.test()正确进行卡方检验?

时间:2016-07-08 22:34:59

标签: r

我正在尝试对合身度进行Pearson卡方检验。以下是拟合泊松分布的示例:

data <- rpois(200,50)
estimate <- mean(data)
freq.os<-table(data)
yfit <- dpois(as.integer(names(freq.os)), estimate)

chisq.test(x = freq.os, p = yfit)
# Error in chisq.test(x = freq.os, p = yfit) : probabilities must sum to 1.

当我评估sum(yfit)时,我得到0.999839。

那么如何产生一组最多加1的概率值呢?谢谢!

修改

实际上我找到了一个解决方法:

chisq.test(freq.os, yfit)

但我对chisq.test()的工作原理非常困惑,因为它告诉我df = 429。我想df = n - k - 1,在这种情况下应该是35,其中k = 1表示lambda,而n = number表示卡方和。我在哪里做错了?

1 个答案:

答案 0 :(得分:3)

上面的评论建议您在将yfit传递给chisq.test之前手动重新缩放chisq.test()。实际上你可以让chisq.test(x = freq.os, p = yfit, rescale.p = TRUE) 为你做这件事:

chisq.test(freq.os, yfit)

关于您的修改

chisq.test()

是不正确的,因为它正在进行独立性测试。

x可以执行两项统计测试:

  1. 适合度测试,使用参数px;
  2. 独立性测试,使用参数y?chisq.test
  3. 请仔细阅读p。对于拟合优度测试,您必须在函数中使用rescale.p = TRUE参数,如您最初所做的那样。我上面的答案,使用set.seed()将帮助您解决您看到的错误。

    如何进行Pearson卡方检验

    你说你不知道测试是怎么做的,然后阅读这部分。

    您应该使用N <- 200 ## number of samples set.seed(0) ## fix random seed for reproducibility x <- rpois(N,50) ## generate sample lambda <- mean(x) ## estimate mean ,以便当其他人运行您的代码时,他们会得到与您相同的随机数。这是一个可重复的例子:

    O <- table(x)    ## contingency table / observed frequency
    n <- length(O)    ## number of categories
    # 31
    x0 <- as.integer(names(O))    ## unique sample values
    p <- dpois(x0, lambda); p <- p / sum(p)    ## theoretical probability under Null Hypothesis
    

    现在我们的目标是使用Pearson卡方测试来测试合身度。我们有

      

    空假设:x~泊松(lambda)

    E <- p * N    ## expected frequency under Null Hypothesis
    R <- (O - E) / sqrt(E)    ## standardised residuals
    X <- sum(R * R)    ## Chi-square statistic
    # 36.13962
    dof <- n - 1    ## degree of freedom
    # 30
    p.value <- 1 - pchisq(X, df = dof)    ## p-value
    # 0.2035416
    

    让我们自己首先进行卡方检验。

    z <- curve(dchisq(x, df = dof), from = 0, to = 100)
    abline(v = X, lty = 3)
    polygon(c(X, X, z$x[z$x > X]), c(0, dchisq(X, df = dof), z$y[z$x > X]), col = 2)
    

    p值大于0.05,因此我们不能拒绝Null假设。摘要图:

    chisq.test()

    enter image description here

    然后我们使用chisq.test(O, p = p) #Chi-squared test for given probabilities #data: O #X-squared = 36.14, df = 30, p-value = 0.2035

    TreeView

    你可以看到,结果是一样的。