我正在尝试使用拟合优度检验来生成卡方分布。
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 <- 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)
结果图像。
答案 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。