2016-04-06 22 views
0

Bu benzetimin amacım, birkaç faktör kombinasyonu altında testlerin tip 1 hata oranını değerlendirmektir.R : kodlama neden 0,00 sonuçta gösteriliyor

  1. örnek sizes- (10,10), (10,25), (25,25), (25,50), (25.100), 50,25), (50,100), (100, 25), (100.100)

  2. standart sapma ratio- (1.00, 1.50, 2.00, 2.50, 3.00 ve 3.50) eşit olmayan çarpıklık ve eşit çarpıklık gama dağılımının

  3. dağıtım

İlgili 2 örnek testi birleştirilmiş varyans t testi ve welch t test ve mann whitney testi. Yukarıdaki kodları kullanarak bir kodu değiştirmeyi denedim. nasıl

######################################## 
    #for normal distribution setup 

# to ensure the reproducity of the result 
#(here we declare the random seed generator) 
set.seed(1) 

## Put the samples sizes into matrix then use a loop for sample sizes 
sample_sizes<-matrix(c(10,10,10,25,25,25,25,50,25,100,50,25,50,100,100,25,100,100), 
nrow=2) 

#create vector to combine all std deviations 
sds<-matrix(c(4,4,6,4,8,4,10,4,12,4,14,4),nrow=2) 

sd1<-c(4,6,8,10,12) 
sd2<-c(4,4,4,4,4) 
sds2<-rep(sd2,each=9) 

##(use expand.grid)to create a data frame from combination of data 
ss_sds1<- expand.grid(sample_sizes[2,], sd1) 

#create a matrix combining the fifty four cases of combination of ss and sds 
all_combine <- cbind(rep(sample_sizes[1,], 5), ss_sds1,sds2) 

# name the column by sample samples 1 and 2 and standard deviation 
colnames(all_combine) <- c("m", "n", "sds1","sds2") 

#number of simulations 
nSims<-10000 

#set significance level,alpha for the whole simulation 
alpha<-0.05  

#set up matrix for storing data from simulation 
#set nrow =nsims because wan storing every p-value simulated 
matrix1_equal <-matrix(0,nrow=nSims,ncol=9) 
matrix4_unequal<-matrix(0,nrow=nSims,ncol=9) 
matrix7_mann <-matrix(0,nrow=nSims,ncol=9) 

#set up vector for storing data from the three tests (nrow for all_combine=45) 
equal1 <- unequal4<- mann7 <- rep(0, nrow(all_combine)) 

    # this loop steps through the all_combine matrix 
    for(ss in 1:nrow(all_combine)) 
    { 
    #generate samples from the first column and second column 
    m<-all_combine[ss,1] 
    n<-all_combine[ss,2] 

     for (sim in 1:nSims) 
     { 
     #generate random samples from 2 normal distribution 
     x<-rnorm(m,5,all_combine[ss,3]) 
     y<-rnorm(n,5,4) 

     #extract p-value out and store every p-value into matrix 
     matrix1_equal[sim,1]<-t.test(x,y,var.equal=TRUE)$p.value  
     matrix4_unequal[sim,4]<-t.test(x,y,var.equal=FALSE)$p.value 
     matrix7_mann[sim,7] <-wilcox.test(x,y)$p.value 
     } 

    ##store the result 
    equal1[ss]<- mean(matrix1_equal[,1]<=alpha) 
    unequal4[ss]<-mean(matrix4_unequal[,4]<=alpha) 
    mann7[ss]<- mean(matrix7_mann[,7]<=alpha) 
    } 

    # combine results 
    nresult <- cbind(all_combine, equal1, unequal4, mann7) 

    save.image(file="normal.data") 

Ben Ar yeniyim, şimdi normal dağılımda bir kod tamamlanmış ve eğer başka kullanılarak gama dağılımı dağılımı konusunda iki tane daha simülasyona eklemek zorunda var ... Herkes lütfen bazı tavsiyeler verebilir normal distr. gamma distr için? Şu an bu kısımda sıkışmış durumdayım ...

YARDIM! Yukarıdaki kod, birkaç kez sonuç 0.00 verdi, ben zaten birçok kez kontrol ve henüz herhangi bir hata tespit etmedi. Lütfen

+0

ve nasıl' t_equal', 't_unequal' ve' mann' yarattı. Her benzetimde saklamak istediğiniz matrisler üzerine yazdığınız vektörler gibi görünürler. –

+0

Üzgünüm, nsds standart sapma oranının uzunluğudur. Ve t_equal, t_unequal ve mann veri simüle ve onlara depolanmış olan vektörlerdir ... –

+0

Sadece geri kalanlarımı sorularıma düzenledim .... Yorumunuz için teşekkürler ... –

cevap

0

Kodunuzu 1 tür hataları sınamak için düzenledim. Her bir faktör kombinasyonu için ilmekler için birden çok yuvaya sahip olmak yerine, tüm bu kombinasyonları tek bir matrise koymayı ve söz konusu matrisin her bir sırasına benzetim yapmayı tercih ederim. Bu, sonuçları ortaya çıkarmak için çok daha kolay hale getirir. Hesaplamayı hızlandırmak için, daha az simulasyon yaptım (nSims değiştirdim) ve bunu değiştirmek isteyebilirsiniz. Sonunda üç sonuç matrisinizi farklı faktör kombinasyonlarına birleştirebilirsiniz.

(**ss-1)*nsds+sim** ile neler yaptığınıza dair bir fikrim yok ve onu değiştirmeyi tercih ettim.

#for normal distribution setup 

## Put the samples sizes into matrix then use a loop for sample sizes 
sample_sizes<- 
    matrix(c(10,10,10,25,25,25,25,50,25,100,50,25,50,100,100,25,100,100), 
    nrow=2) 

#create vector to combine all std deviations 
sds<-c(4,6,8,10,12,14) 

# get all combinations with one row of the sample_sizes matrix 
all_combn <- expand.grid(sample_sizes[2,], sds) 

# tack on the first row 

all_combn <- cbind(rep(sample_sizes[1,], 6), all_combn) 
# change the column names 
colnames(all_combn) <- c("ss1", "ss2", "sds") 


# to ensure the reproducity of the result 
#(here we declare the random seed generator) 
set.seed(1) 

#number of simulations 
nSims<-500  

# to store your simulations for the three tests 
store_sim <- matrix(0, nrow = nSims, ncol = 3) 
#set significance level,alpha for the whole simulatio 
alpha<-0.05  


#set up vector for storing data from the three tests 

equal <- unequal<- mann <- rep(0, nrow(all_combn)) 


# outer loop run nsims for every combinations of std deviations and ss 


    # this loop steps through the all_combn matrix 
    for(ss in 1:nrow(all_combn)) 
    { 
    m<-all_combn[ss,1] 
    n<-all_combn[ss,2] 

     for (sim in 1:nSims) 
     { 
     #generate random samples from 2 normal distribution 
     x<-rnorm(m,5,all_combn[ss,3]) 
     y<-rnorm(n,5,4) 

     #extract p-value out and store it in vectors 
     store_sim[sim,1]<-t.test(x,y,var.equal=TRUE)$p.value  
     store_sim[sim,2]<-t.test(x,y,var.equal=FALSE)$p.value 
     store_sim[sim,3] <-wilcox.test(x,y)$p.value 

    } 

    ##store the result into matrix defined before 
    equal[ss]<- sum(store_sim[,1]<alpha)/nSims 
    unequal[ss]<- sum(store_sim[,2]<alpha)/nSims 
    mann[ss]<- sum(store_sim[,2]<alpha)/nSims 
    } 


# combine results 

answer <- cbind(all_combn, equal, unequal, mann) 

head(answer) 

    ss1 ss2 sds equal unequal mann 
1 10 10 4 0.070 0.062 0.062 
2 10 25 4 0.046 0.048 0.048 
3 25 25 4 0.048 0.048 0.048 
4 25 50 4 0.038 0.048 0.048 
5 25 100 4 0.058 0.054 0.054 
6 50 25 4 0.048 0.054 0.054 
+0

Çok teşekkürler Ben çok anlayamıyorum, ama gerçekten senin yorum için teşekkürler ... Sadece gerçekten çok çok anlamak için iç içe döngü parçası –

+0

HI değil, basit bir soru sorabilir miyim, çünkü ben sadece fark ettim, neden numara p değerleri, hesap sayısı yerine simülasyon sayısına ayarlanmış matrisin sütunlarının toplamı? Bu bölüm için merak ediyorum .... –

+0

Faktörlerinizin her bir benzersiz kombinasyonu için (ör. 'Sample_sizes' ve 'sds') bir dizi simülasyon yapmak isteyeceksiniz. Tip 1 hata oranını test etmek için, bu simülasyonlardan kaç tanesinin, belirtilen alfanızdan daha düşük p değerlerine sahip olduğunu görmeniz gerekir. Bu nedenle, her bir p-değerini her bir simülasyondan saklamanız gerekecektir. Store_sim' matrisinde 3 sütun (her test için bir tane) ve 'nSims 'satırları (her bir simülasyon için bir tane) vardır. –

1

Bu benim şimdiki kodlama .. `nsds` nedir

######################################## 
    #for normal distribution setup 

# to ensure the reproducity of the result 
#(here we declare the random seed generator) 
set.seed(1) 

## Put the samples sizes into matrix then use a loop for sample sizes 
sample_sizes<-matrix(c(10,10,10,25,25,25,25,50,25,100,50,25,50,100,100,25,100,100), 
nrow=2) 

#create vector to combine all std deviations 
sds<-matrix(c(4,4,6,4,8,4,10,4,12,4,14,4),nrow=2) 

sd1<-c(4,6,8,10,12) 
sd2<-c(4,4,4,4,4) 
sds2<-rep(sd2,each=9) 

##(use expand.grid)to create a data frame from combination of data 
ss_sds1<- expand.grid(sample_sizes[2,], sd1) 

#create a matrix combining the fifty four cases of combination of ss and sds 
all_combine <- cbind(rep(sample_sizes[1,], 5), ss_sds1,sds2) 

# name the column by sample samples 1 and 2 and standard deviation 
colnames(all_combine) <- c("m", "n", "sds1","sds2") 

#number of simulations 
nSims<-10000 

#set significance level,alpha for the whole simulation 
alpha<-0.05  

#set up matrix for storing data from simulation 
#set nrow =nsims because wan storing every p-value simulated 
matrix1_equal <-matrix(0,nrow=nSims,ncol=9) 
matrix4_unequal<-matrix(0,nrow=nSims,ncol=9) 
matrix7_mann <-matrix(0,nrow=nSims,ncol=9) 

#set up vector for storing data from the three tests (nrow for all_combine=45) 
equal1 <- unequal4<- mann7 <- rep(0, nrow(all_combine)) 

    # this loop steps through the all_combine matrix 
    for(ss in 1:nrow(all_combine)) 
    { 
    #generate samples from the first column and second column 
    m<-all_combine[ss,1] 
    n<-all_combine[ss,2] 

     for (sim in 1:nSims) 
     { 
     #generate random samples from 2 normal distribution 
     x<-rnorm(m,5,all_combine[ss,3]) 
     y<-rnorm(n,5,4) 

     #extract p-value out and store every p-value into matrix 
     matrix1_equal[sim,1]<-t.test(x,y,var.equal=TRUE)$p.value  
     matrix4_unequal[sim,4]<-t.test(x,y,var.equal=FALSE)$p.value 
     matrix7_mann[sim,7] <-wilcox.test(x,y)$p.value 
     } 

    ##store the result 
    equal1[ss]<- mean(matrix1_equal[,1]<=alpha) 
    unequal4[ss]<-mean(matrix4_unequal[,4]<=alpha) 
    mann7[ss]<- mean(matrix7_mann[,7]<=alpha) 
    } 

    # combine results 
    nresult <- cbind(all_combine, equal1, unequal4, mann7) 

    save.image(file="normal.data")