2016-04-06 4 views
0

Meine Ziele dieser Simulation ist es, die Fehlerrate Typ 1 der Tests unter mehreren Kombination von Faktoren zu bewerten.R: Codierung warum 0,00 im Ergebnis anzeigen

  1. Probe Sizes- (10,10), (10,25), (25,25), (25,50), (25,100), 50,25), (50,100), (100, 25) (100.100)

  2. Standardabweichung Verhältnis- (1,00, 1,50, 2,00, 2,50, 3,00 und 3,50)

  3. Verteilung der Gamma-Verteilung mit ungleicher Schiefe und gleich Schiefe

Der involvierte 2-Stichproben-Test ist gepoolter Varianz-t-Test und welch t Test und Mann Whitney Test. Ich habe versucht, einen Code zu modifizieren, indem ich die obige Kombination von Faktoren verwendete.

######################################## 
    #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") 

: Ich bin in R, jetzt habe ich einen Code in Normalverteilung abgeschlossen haben und haben auf zwei weitere Simulation über die Verteilung der Gamma-Verteilung hinzufügen, wenn sonst durch die Verwendung ... kann jemand pls einen Rat geben, wie man Wechsel von Normalverteilung zur Gammaverteilung? Ich stecke gerade in diesem Teil fest ...

HILFE !! der Code oben gab mir das Ergebnis 0,00 für mehrere Male, ich überprüfe sie für viele Male schon und doch habe ich keinen Fehler festgestellt. Bitte

+0

Was 'ist nsds', und wie haben Sie schaffen' t_equal', 't_unequal' und' mann'. Sie scheinen Vektoren zu sein, und Sie schreiben über die Matrizen, in denen Sie sie mit jeder Simulation speichern möchten. –

+0

Es tut mir leid, nsds ist die Länge der Standardabweichung. Und t_equal, t_unequal und mann sind Vektoren, in denen die Daten simuliert und gespeichert werden ... –

+0

Ich habe gerade den Rest des Codes in meine Fragen bearbeitet .... danke für die Kommentare ... –

Antwort

0

Ich bearbeitet Ihren Code auf Typ 1 Fehler zu testen. Anstatt mehrere verschachtelte for-Schleifen für jede Kombination von Faktoren zu haben, ziehe ich es vor, alle diese Kombinationen in eine einzige Matrix zu setzen und Simulationen mit jeder Reihe der Matrix durchzuführen. Dies macht es viel einfacher, die Ergebnisse auszugeben. Um die Berechnung zu beschleunigen, beachten Sie, dass ich wesentlich weniger Simulationen durchgeführt habe (ich habe nSims geändert), und Sie möchten es zurück ändern. Am Ende können Sie dann Ihre drei Ergebnismatrizen mit den verschiedenen Kombinationen von Faktoren kombinieren.

Ich habe keine Ahnung, was Sie mit (**ss-1)*nsds+sim** gegangen waren und entschieden, es zu ändern.

#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

Vielen Dank, obwohl Ich bin nicht sehr zu verstehen, aber wirklich danke für Ihren Kommentar..ich finde nur heraus, dass ich nicht wirklich sehr verstehe für den Teil von verschachtelten für Schleife –

+0

HALLO, kann ich eine einfache Frage stellen, weil ich gerade diese, warum Nummer bemerkt der Spalte der Matrix zum Speichern der p-Werte auf die Anzahl der Simulation anstelle der Anzahl der Berechnungen eingestellt? Ich frage mich für diesen Teil .... –

+0

Für jede einzigartige Kombination Ihrer Faktoren (z.B. 'sample_size' und' sds') werden Sie eine Reihe von Simulationen durchführen wollen. Um die Fehlerrate des Typs 1 zu testen, müssen Sie sehen, wie viele dieser Simulationen p-Werte haben, die unter dem von Ihnen angegebenen Alpha liegen. Daher müssen Sie jeden p-Wert aus jeder Simulation speichern. Die 'store_sim'-Matrix hat 3 Spalten (eine für jeden Test) und' nSims'-Zeilen (eine für jede Simulation). –

1

Dies ist meine aktuelle Codierung ist ..

######################################## 
    #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")