我使用逆 CDF 方法从指数和柯西随机变量生成 1000 个样本。
现在为了验证这些是否属于其相关分布,我必须执行拟合优度的卡方检验。
我尝试了两种方法(如下) -
Chisq.test(y) #其中有来自假定指数分布的 1000 个样本
chisq.test(z) #cauchy
我收到以下错误:
data: y X-squared = 234.0518, df = 999, p-value = 1
Warning message:
In chisq.test(y) : Chi-squared approximation may be incorrect
chisq.test(z)
Error in chisq.test(z) :
all entries of 'x' must be nonnegative and finite
我下载了vcd库来使用goodfit() 并输入:
t1 <- goodfit(y,type= "exponential",method= "MinChiSq") summary(t1)
在这种情况下,错误消息:
Error: could not find function "goodfit"
有人可以指导如何正确实现卡方 GOF 测试吗?
注意:样本并非来自正态分布(分别为指数分布和柯西分布) 我试图了解是否有可能获得观察到的和预期的数据,但到目前为止还没有运气。
编辑 - 在编写其余代码之前,我确实输入了library(vcd)。抱歉假设这是显而易见的。
最佳答案
chisq.test(...)
函数主要设计用于计数,因此它期望其参数是可数的(使用 table(...)
code> 例如),或者已经计数。它基本上为 x
和 y
(前两个参数)创建一个列联表,然后使用 chisq 测试来确定它们是否来自同一分布。
您最好使用 Kolmogorov-Smirnov 测试,该测试是为像您这样的问题而设计的。 K-S 检验将样本的 ecdf 与测试分布的 cdf 进行比较,并检验它们相同的原假设。
set.seed(1)
df <- data.frame(y = rexp(1000),
z = rcauchy(1000, 100, 100))
ks.test(df$y,"pexp")
# One-sample Kolmogorov-Smirnov test
#
# data: df$y
# D = 0.0387, p-value = 0.1001
# alternative hypothesis: two-sided
ks.test(df$z,"pcauchy",100,100)
# One-sample Kolmogorov-Smirnov test
#
# data: df$z
# D = 0.0296, p-value = 0.3455
# alternative hypothesis: two-sided
请注意,在这种情况下,K-S 检验预测您的样本 df$y
有 90% 的可能性不来自指数分布,尽管它显然来自指数分布。
您可以使用chisq.test(...)
,方法是人为地对数据进行分箱,然后将每个箱中的计数与测试分布的预期进行比较(使用p= ...
),但这很复杂,您得到的答案取决于垃圾箱的数量。
breaks <- c(seq(0,10,by=1))
O <- table(cut(df$y,breaks=breaks))
p <- diff(pexp(breaks))
chisq.test(O,p=p, rescale.p=T)
# Chi-squared test for given probabilities
#
# data: O
# X-squared = 7.9911, df = 9, p-value = 0.535
在这种情况下,chisq 检验预测您的样本有 47% 的可能性不来自指数分布。
最后,尽管它们是定性的,但我发现 Q-Q 图非常有用。这些图绘制了样本的分位数与测试分布的分位数的关系。如果样本是从测试分布中抽取的,则 Q-Q 图应接近线 y=x
。
par(mfrow=c(1,2))
plot(qexp(seq(0,1,0.01)),quantile(df$y,seq(0,1,0.01)),
main="Q-Q Plot",ylab="df$Y", xlab="Exponential",
xlim=c(0,5),ylim=c(0,5))
plot(qcauchy(seq(0,.99,0.01),100,100),quantile(df$z,seq(0,.99,0.01)),
main="Q-Q Plot",ylab="df$Z",xlab="Cauchy",
xlim=c(-1000,1000),ylim=c(-1000,1000))
查看 Q-Q 图使我更有信心断言 df$y
和 df$z
分别是从指数分布和柯西分布中得出的K-S 或 ChiSq 测试,尽管我无法给出具体数字。
关于r - 生成的随机数的卡方拟合优度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21655653/