我希望我能通过hotellings检验证明p变量正态随机 vector 的样本具有理论平均值。但是与ks.test进行交叉检查,如果HottelingsT2函数的分布与HottelingsT2-Test使用的测试统计信息的分布相匹配。这意味着模拟实验的平均值不是0,但显然有。因此,在上下文中应该有一些错误。有什么错误吗?
require(mvtnorm)
require(ICSNP)
subject<-50
treatment<-4
V<-matrix(c(644.03100226056, 184.319025225855, 572.5312199559, 143.106678641056, 184.319025225855, 73.5310268006399, 230.838267981476, 130.977532385651, 572.5312199559, 230.838267981476, 736.378779002912, 429.445506266528, 143.106678641056, 130.977532385651, 429.445506266528, 435.124191935888),treatment,treatment)
experiment<-list()
R<-3000
seed<-split(1:(R*subject),1:R)
for(i in 1:R){
e<-c()
for(j in 1:subject){
set.seed(seed[[i]][j])
e<-c(e,rmvnorm(mean=rep(0,treatment),sigma=V,n=1,method="chol"))
}
experiment<-c(experiment,list(matrix(e,subject,treatment,byrow=T)))
}
p.values<-c()
for(e in experiment){
fit<-lm(e~1)
p.values<-c(p.values,HotellingsT2(e, mu=rep(0,treatment))[["p.value"]])
}
ks.test(p.values, punif,alternative = "two.sided")
最佳答案
我没有检查代码,但是如果这与Klaus另一篇文章Using Kolmogorov Smirnov Test in R中描述的问题相同,我不会感到惊讶。基本上,不要将set.seed
放在循环的中间:在代码的顶部设置一次,然后再将其保留。