【发布时间】:2016-04-06 12:29:25
【问题描述】:
我的模拟目的是在多种因素组合下评估测试的类型 1 错误率。
样本大小-(10,10),(10,25),(25,25),(25,50),(25,100),50,25),(50,100), (100,25) ),(100,100)
标准差比-(1.00、1.50、2.00、2.50、3.00和3.50)
不等偏度和等偏度的伽马分布分布
涉及的 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,我已经检查了很多次,但我没有发现任何错误。 请
【问题讨论】:
-
什么是
nsds,以及您是如何创建t_equal、t_unequal和mann的。它们似乎是向量,您在每次模拟时都在写入要存储它们的矩阵。 -
对不起,nsds是标准差比的长度。并且 t_equal ,t_unequal 和 mann 是数据被模拟并存储到其中的向量...
-
我刚刚将其余代码编辑到我的问题中......感谢您的评论......
标签: r if-statement for-loop gamma-distribution