我正在尝试对合身度进行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
表示卡方和。我在哪里做错了?
答案 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
可以执行两项统计测试:
p
和x
; y
和?chisq.test
。请仔细阅读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()
然后我们使用chisq.test(O, p = p)
#Chi-squared test for given probabilities
#data: O
#X-squared = 36.14, df = 30, p-value = 0.2035
TreeView
你可以看到,结果是一样的。