使用拟合优度检验生成卡方分布

时间:2014-01-25 20:34:14

标签: r

我正在尝试使用拟合优度检验来生成卡方分布。

null.probs=c(0.17,0.37,0.23,0.23);
chi.sq.data <- numeric()

M=1000
samp.size=740
for (k in 1:M) {
  samp.data = sample(c("Often","Some","Hardly","Never"),
                     size=samp.size,
                     replace=TRUE,
                     prob=null.probs)
  E=samp.size*null.probs;
  chi.sq.data[k] <- sum((table(samp.data)-E)^2/E)
}

hist(chi.sq.data,prob=TRUE)

显然我的想法是错误的。

enter image description here

有什么建议吗?

由于提出的建议,这是有效的调整。

null.probs=c(0.17,0.37,0.23,0.23);
chi.sq.data <- numeric()

M=1000
samp.size=740
for (k in 1:M) {
  samp.data = sample(c("Often","Some","Hardly","Never"),
                     size=samp.size,
                     replace=TRUE,
                     prob=null.probs)
  n.Often=sum(samp.data=="Often")
  n.Some=sum(samp.data=="Some")
  n.Hardly=sum(samp.data=="Hardly")
  n.Never=sum(samp.data=="Never")
  O=c(n.Often,n.Some,n.Hardly,n.Never)
  E=samp.size*null.probs
  chi.sq.data[k] <- sum((O-E)^2/E)
}


hist(chi.sq.data,prob=TRUE,breaks="FD")
curve(dchisq(x,3),0,max(chi.sq.data),col="red",add=TRUE)

结果图像。

enter image description here

2 个答案:

答案 0 :(得分:3)

您对它进行编码的方式是按照c("Often","Some","Hardly","Never")的顺序分配您的预期值,但如果您查看任何单个运行通知,表格不知道订单是什么,那么它只是按字母顺序排列:{ {1}}

如果你真正准确地调整了你的期望,那么事情就应该解决了。

但如果您的唯一目标是生成卡方,则c("Hardly","Never","Often","Some")是更好的选择。

答案 1 :(得分:0)

@Dason是对的。此外,由于您生成的空数不存在,您可能(可能)从non-central chi-squared distribution生成卡方统计。此外,值得注意的是,卡方统计量的实际行为只能近似(任意)卡方分布。这是因为,由于您的数据是离散的,但分布是连续的,因此您的数据实现的可能性非常大,但是在您的数据设置中不可能出现的卡方分布中存在无限可能的值(虽然N = 740,但近似值应合理)。有关此问题的更多信息,可以帮助您在此处阅读我的答案(在stats.SE上):Comparing and contrasting p-values, significance levels, and type I error。您最好使用?rchisq