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

R 利用拟合优度检验生成卡方分布,r,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,

我正在尝试使用拟合优度测试生成卡方分布

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)
null.probs=c(0.17,0.37,0.23,0.23);

chi.sq.data按照编码的方式,您是按照
c(“经常”、“一些”、“几乎”、“从不”)
的顺序分配期望值,但如果您查看任何单次运行,请注意,表不知道顺序是什么,所以它只是按字母顺序排列:
c(“几乎”、“从未”、“经常”、“一些”)

若你们真的正确地调整你们的期望值,那个么事情就应该解决了


但是如果你的唯一目标是生成卡方,那么
rcisq
是一个更好的选择。

@Dason是正确的。此外,由于生成的数据不包含null值,因此(可能)将从空值生成卡方统计数据。此外,值得注意的是,卡方统计的实际行为只能近似于(任何)卡方分布。这是因为,由于您的数据是离散的,但分布是连续的,因此您的数据实现的可能性只有这么多,但卡方分布中存在无限可能的值,这些值在您的设置中不可能出现在您的数据中(尽管N=740,近似值应该是合理的)。有关此问题的更多信息,请在此处阅读我的答案(在stats.SE上):。你最好去使用

我觉得你可以直接用
?rchisq
查看
?发行版
直接做到这一点。R中有很多发行版。观察得很好。我已经编辑了我的问题以显示解决方案。我知道我可以使用RCISQ,但那不是我想要的。我们的目标不是简单地画一幅chisq分布图,而是显示拟合优度过程,如果应用于大量样本,将生成chisq分布。多亏了你的观察,我才使它起作用。
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)