[R] R-dvel [robustness Simulation study of 2 sample test on several combination of factors ]

Jim Lemon drjimlemon at gmail.com
Wed Apr 6 06:00:24 CEST 2016


You have quite a few mistakes in your example. The code below works
for me - you can wrap it in a function if you like. I think you will
need a lot more practice before you can write something like this in R
as you are missing close braces and haven't really worked out the
difference between the number of calculations you are doing for each
replication and the number of replications. It takes 5-10 minutes to
run.

 ## 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)
# this number is needed below
nsds<-length(sds)
set.seed(8)

#number of simulations
nSims<-10000
#set significance level,alpha for the whole simulatio
alpha<-0.05

#set empty vector of length no.of _calculations_ to store p-values
# Note: you have 54 calculations, not 10000
ncalcs<-dim(sample_sizes)[2]*nsds
t_equal <-c(rep(0,length=ncalcs))
t_unequal <-c(rep(0,length=ncalcs))
mann <-c(rep(0,length=ncalcs))

#set up matrix for storing data from the vectors
# but you do want 10000 replications of each calculation
matrix_Equal<-matrix(rep(NA,ncalcs*nSims),nrow=nSims)
matrix_Unequal<-matrix(rep(NA,ncalcs*nSims),nrow=nSims)
matrix_mann<-matrix(rep(NA,ncalcs*nSims),nrow=nSims)

############Simulations

for (sim in 1:nSims){
 # this loop steps through the sample sizes
 for(ss in 1:dim(sample_sizes)[2]) {
  m<-sample_sizes[1,ss]
  n<-sample_sizes[2,ss]
  # initialize the index for results
  i<-1
  for (sd in sds) {  #first group's standard deviation
   #generate random samples from 2 normal distribution
   x_norm1<-rnorm(m,5,sds)
   y_norm2<-rnorm(n,5,4)
   #extract p-value out and store it in vectors
   t_equal[(ss-1)*nsds+i]<-t.test(x_norm1,y_norm2,var.equal=TRUE)$p.value
   t_unequal[(ss-1)*nsds+i]<-t.test(x_norm1,y_norm2,var.equal=FALSE)$p.value
   mann[(ss-1)*nsds+i] <-wilcox.test(x_norm1,y_norm2)$p.value
   i<-i+1
  }
 }
 #store the current result into matrices by rows
 matrix_Equal[sim,]<-t_equal
 matrix_Unequal[sim,]<-t_unequal
 matrix_mann[sim,]<-mann
}
##print results
matrix_Equal
matrix_Unequal
matrix_mann

Jim

On Wed, Apr 6, 2016 at 12:43 AM, tan sj <sj_style_1125 at outlook.com> wrote:
> Hi, Jim, i read through your example,
> I tried to write a code modified yours example and my ideas ...
> In last email, you replied that "results[[(ss-1)*nssds+ssd_index]]<-<your_test>" ,can i know further about this ? Because i am not very understand about this .
> I am sorry that i am really a new bird in this field...
> but the code turn out it have some error ...
> Below shown my attempt...
>
>  ## 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)
>
> set.seed(8)
>
> #number of simulations
> nSims<-10000
> #set significance level,alpha for the whole simulatio
> alpha<-0.05
>
> #set empty vector of length no.of simulation(10000) to store p-value
> t_equal <-c(length=nSims)
> t_unequal <-c(length=nSims)
> mann <-c(length=nSims)
>
> #set up matrix for storing data from the vectors
> matrix_Equal<-matrix(t_equal,nrow=nSims)
> matrix_Unequal<-matrix(t_unequal,nrow=nSims)
> matrix_mann<-matrix(mann,nrow=nSims)
>
> ############Simulations
>
> #BULID A FUNCTION for a collection of statement
> f<-function(m,n,sd)
> {
> for (i in 1:nSims){
>
> # this loop steps through the sample sizes
> for(ss in 1:dim(sample_sizes)[2])
> {
> m<-sample_sizes[1,ss]
> n<-sample_sizes[2,ss]
> {
> for (sd in sds)   #first group's standard deviation
> {
> #generate random samples from 2 normal distribution
> x_norm1<-rnorm(m,5,sds)
> y_norm2<-rnorm(n,5,4)
>
> #extract p-value out and store it in vectors
> t_equal[i]<-t.test(x_norm1,y_norm2,var.equal=TRUE)$p.value
> t_unequal[i]<-t.test(x_norm1,y_norm2,var.equal=FALSE)$p.value
> mann[i] <-wilcox.test(x_norm1,y_norm2)$p.value
>
> ##store the result into matrix defined before
> matrix_Equal<-t_equal
> matrix_Unequal<-t_unequal
> matrix_mann<-mann
>
> ##print results
> matrix_Equal
> matrix_Unequal
> matrix_mann
>
> }
>  }
>   }
> }
> }
> ________________________________________
> From: Jim Lemon <drjimlemon at gmail.com>
> Sent: Tuesday, April 5, 2016 2:38 AM
> To: tan sj
> Cc: r-help at r-project.org
> Subject: Re: [R] R-dvel [robustness Simulation study of 2 sample test on several combination of factors ]
>
> Hi sst,
> You could set up your sample sizes as a matrix if you don't want all
> of the combinations:
>
> sample_sizes<-matrix(c(10,10,10,25,25,25,...),nrow=2)
>
> and then use one loop for the sample sizes:
>
> for(ss in 1:dim(sample_sizes)[2]) {
>  ss1<-sample_sizes[1,ss]
>  ss2<-sample_sizes[2,ss]
>
> then step through your SDs:
>
> for(ssd in  c(4,4.4,5,6,8)) {
>
> Jim
>
> On Tue, Apr 5, 2016 at 11:15 AM, tan sj <sj_style_1125 at outlook.com> wrote:
>> hi, i am new in this field.
>>
>>
>> do
>> favorite<http://stackoverflow.com/questions/36404707/simulation-study-of-2-sample-test-on-different-combination-of-factors#>
>>
>>
>> If I wish to conduct a simulation on the robustness of two sample test by using R language, is that any ways in writing the code?
>> There are several factors
>> (sample sizes-(10,10),(10,25),(25,25),(25,50),(25,100),50,25),(50,100), (100,25),(100,100))
>>
>> (standard deviation ratio- (1.00, 1.50, 2.00, 2.50, 3.00 and 3.50))
>> distribution of gamma distribution with unequal skewness and equal skewness
>>
>> I wish to test the pooled variance t test and welch t test and mann whitney by using the above combination of factors. But how can I combine them by using for loop or apply function??
>> I am intending to use apply function but i am stucking. If i use for loop function, can i use for loop with vectors ?
>> for (a in c(25,50,100)) #first group of sample sizes
>> { for (b in c(25,50,100)) #second group of sample sizes
>> { for (d in c(4,4.4,5,6,8)) #different SDs of first sample
>> the above code is an example that I would like to modified but I found I have different sets of sample sizes.
>>
>> So if for loop with vectors, as shown in the code above, will the computer run from part (a) 25, to part(b) 25, then to the part (d) 4? then again the rotation 50->50->4.4?
>>
>> ?I hope can hear any news from this website ....please..thanks you.
>>
>> Regards
>> sst
>>
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list