0

我这个模拟的目的是在多种因素组合下评估测试的类型 1 错误率。

  1. 样本量-(10,10),(10,25),(25,25),(25,50),(25,100),50,25),(50,100),(100,25),(100,100)

  2. 标准偏差比-(1.00、1.50、2.00、2.50、3.00 和 3.50)

  3. 不等偏度和等偏度的伽马分布分布

涉及的 2 个样本检验是合并方差 t 检验和 welch t 检验和 mann whitney 检验。我试图通过使用上述因素组合来修改代码。

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

我是 R 的新手,现在我已经完成了一个正态分布的代码,并且必须通过使用 if else 来添加两个关于伽马分布分布的模拟......任何人都可以提供一些建议如何从正态分布进行更改。到伽马分布?我现在卡在这部分...

帮助!!上面的代码多次给了我结果 0.00,我已经检查了很多次,但我没有发现任何错误。请

4

2 回答 2

1

这是我目前的编码..

 ########################################
    #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")
于 2016-04-17T02:09:24.770 回答
0

我编辑了您的代码以测试类型 1 错误。我宁愿将所有这些组合放入一个矩阵中,并对所述矩阵的每一行进行模拟,而不是为每个因素组合使用多个嵌套的 for 循环。这使得绘制结果变得更加容易。为了加快计算速度,请注意我做了更少的模拟(我更改了nSims),您可能希望将其更改回来。最后,您可以将三个结果矩阵组合到不同的因素组合中。

我不知道你发生了什么(**ss-1)*nsds+sim**并选择改变它。

#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
于 2016-04-06T16:48:57.580 回答