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 <[email protected]> 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 <[email protected]>
> Sent: Tuesday, April 5, 2016 2:38 AM
> To: tan sj
> Cc: [email protected]
> 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 <[email protected]> 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]]
>>
>> ______________________________________________
>> [email protected] 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.
______________________________________________
[email protected] 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.