2013-06-29 45 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 

基本上,在每次迭代中都要重新設置隨機種子,即使您小心選擇不同的值,仍然會消除連續繪製的獨立性。