【问题标题】:Calculate chi-square statistics in R在 R 中计算卡方统计量
【发布时间】:2016-07-30 18:55:12
【问题描述】:

我想在 R 中计算卡方统计量,定义为

sum[(O_i-E_i)^2/E_i],其中 O_i 和 E_i 是类别 i 中的概率质量。

但问题是我只有一个变量的经验累积分布。假设我有一个向量,我可以计算它的经验累积分布,我也有一个预测的累积分布。那么在R中,如何利用这两个累积概率计算卡方统计量呢?

例如,下面是我使用的代码,

require(VGAM)
X <- rpareto(100,1.5,2.5)
# Empricial distribution of X, P is the true probability
P <- ecdf(X)

#MLEs
scale <- min(X)
shape <- length(X)/sum(log(X/scale))
estimated_prob <- ppareto(X,scale,shape)

我首先模拟 100 个值分布的帕累托,然后计算 MLE,这样我就有了真实数据和预测分布。

【问题讨论】:

  • 这看起来很有希望,谢谢。但问题是,我没有这样的两个变量,而是一个变量有两个概率分布。在这种情况下,如何做到这一点
  • 您不想做 Kolmogorov-Smirnov 测试吗?如果是这样,请使用 stats 包中的 ks.test。也许 Cross-Validated 是解决这个问题的更好论坛?
  • 在 CrossValidated.com 上会出现重复:stats.stackexchange.com/questions/78168/… 卡方检验是为离散分布而设计的,而帕累托分布是连续的..

标签: r statistics distribution chi-squared


【解决方案1】:

(作为一个示例,说明为什么不对这个问题使用卡方检验。请参阅我在之前的评论中引用的 CrossValidated.com 的答案。)estimated_prob 和 ECDF 的结果“非常好”该死的关闭”,因为人们可能期望查看问题的设置。看看这两个情节:

 plot( P(X), estimated_prob )

为什么这条直线如此接近?估计概率是 X_hat 的理论概率(这里我使用您创建的模拟 X 值作为一个可能的实例)小于帕累托分布中的随机变量 X,而 P(X) 是实际分数(即概率)该样本中的某个项目小于 X。由于 P 是一个函数,因此我们需要使用 P(X) 的形式来获得 R 语言中的 numeric 结果。

由于 Pareto 分布是连续的,因此对 2、3、10 或 20 个框的值进行任意分箱以获得卡方统计量将是评估“拟合优度”的一种相对不精确和任意的方法。谁说“正确”的垃圾箱数量应该是多少?有一个经过深思熟虑的名为 fitdistrplus 的 R 包,您可能需要查看并完成它的小插曲。

【讨论】:

  • 是的,因此我建议进行 Kolmogorov-Smirnov 测试,但他应该发布到 Cross Validated,因为那里有更多像你这样的人可以帮助他。
  • IMO,CV.com 上的评论引用答案已经存在,并且不想鼓励在 CV 上重复,剩下的唯一一件事就是演示 R ecdf 函数如何提供使用 KS 测试所需的结果。我认为这是 R 特有的,因此更适合 SO。
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多