2013-06-29 16 views
1

我期望我可以通过酒店测试证明,如果一个p-变量正态随机向量的样本具有理论平均值。但是如果来自HottelingsT2函数的分布与由HottelingsT2-Test使用的测试统计量的分布匹配失败,则使用ks.test进行交叉检查。这意味着模拟实验的平均值不是0,但显然它们有。所以在上下文中应该有些问题。有一些错误吗?Hotellings统计

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") 
+1

属于交叉验证而非SO。 http://stats.stackexchange.com/ –

+0

thx的链接,我无法找到一个相关的职位,我的问题。你在模拟中看到一些错误吗? – Klaus

+0

另一方面,我只比较检验统计量的ecdf与ANOVA框架给出的理论F分布。我无法看到这个简单的蒙特卡洛研究中的错误。 – Klaus

回答

1

我没有检查的代码,但我也不会感到惊讶,如果这是在Klaus的其他职位描述了同样的问题:Using Kolmogorov Smirnov Test in R。基本上,不要将set.seed置于循环的中间:在代码的顶部设置一次,然后保持独立。

3

Hong Ooi对于set.seed存在问题是正确的。我跑你的代码,因为它被张贴,并得到了以下结果:

> ks.test(p.values, punif,alternative = "two.sided") 

    One-sample Kolmogorov-Smirnov test 

data: p.values 
D = 0.0615, p-value = 2.729e-10 
alternative hypothesis: two-sided 

但是,如果你改变你的代码是:

... everything the same before here ... 
experiment <- list() 
R <- 3000 # experiment 
set.seed(42) # set new seed 
for (i in 1:R) { # for each of 3000 experiments 
    e <- c() # empty vector 
    for (j in 1:subject){ # for each of 50 subjects 
    e <- c(e,rmvnorm(mean=rep(0,treatment),sigma=V,n=1,method="chol")) 
    } 
    experiment <- c(experiment,list(matrix(e,subject,treatment,byrow=T))) 
} 
... everything the same after here ... 

然后你会得到如下:

> ks.test(p.values, punif,alternative = "two.sided") 

    One-sample Kolmogorov-Smirnov test 

data: p.values 
D = 0.0122, p-value = 0.7613 
alternative hypothesis: two-sided 

基本上,在每次迭代中都要重新设置随机种子,即使您小心选择不同的值,仍然会消除连续绘制的独立性。