如何计算模拟中重要 p 值的数量?
How to count number of significant p-values in a simulation?
假设我有一项临床试验,其中有 32 只老鼠感染了一种疾病。我用我的治疗方法治疗了其中的 16 个,剩下的 16 个作为对照。在进行实验之前,我是运行一个模拟。我将从均匀 (0,1) 分布中抽取 32 个观察值。我想计算模拟结束后我实现 p 值 < 0.01 的次数。感觉差不多了,就是不知道怎么拼:
nSims <- 10000 #number of simulated experiments
p <-numeric(nSims) #set up empty container for all simulated p-values
sig<-0
for(i in 1:nSims){ #for each simulated experiment
#generating 32 observations total from uniform(0,1) distribution
control.year1 <- runif(16, min = 0, max = 1)
treat.year1 <- runif(16, min = 0, max = 1)
#Creating dichotomous variable for those get better/don't get better
control.respond <- ifelse(control.year1<=0.05,1,0)
treat.respond <- ifelse(treat.year1<=0.30,1,0)
#perform t-test
z <- t.test(control.respond,treat.respond)
p[i]<-z$p.value #get the p-value and store it
# want to count number of significant p-values - not sure how to do it
significance <- ifelse(z$p.value<= 0.01,sum(sig, 1),0)
}
这个解决方案不是最优雅的,但使用 magrittr
和 dplyr
进行数据处理。首先,我创建了一个矩阵来保存您的模拟数据:
library(magrittr)
library(dplyr)
n <- 100
control.years <- as.data.frame(matrix(runif(16*n, min=0, max=1),ncol=16))
treat.years <- as.data.frame(matrix(runif(16*n, min=0, max=1),ncol=16))
然后我创建了一个数据结构来捕获所有 t 检验的 p 值:
for (i in 1:n) { p[i] <- t.test(control.years[i,],treat.years[i,])$p.value }
您可以过滤掉您喜欢的范围内的 p 值:
> as.data.frame(p) %>% filter(p<0.05)
p
1 0.03173299
2 0.01652114
3 0.00471807
或者您可以创建一个新变量来告诉您是否重要:
> as.data.frame(p) %>% mutate(sig=ifelse(p<0.05,1,0))
p sig
1 0.65233254 0
2 0.50731231 0
3 0.11657045 0
...
29 0.03173299 1
或者您可以找出有多少显着的 p 值:
> z <- as.data.frame(p) %>% mutate(sig=ifelse(p<0.05,1,0))
> table(z$sig)
0 1
97 3
假设我有一项临床试验,其中有 32 只老鼠感染了一种疾病。我用我的治疗方法治疗了其中的 16 个,剩下的 16 个作为对照。在进行实验之前,我是运行一个模拟。我将从均匀 (0,1) 分布中抽取 32 个观察值。我想计算模拟结束后我实现 p 值 < 0.01 的次数。感觉差不多了,就是不知道怎么拼:
nSims <- 10000 #number of simulated experiments
p <-numeric(nSims) #set up empty container for all simulated p-values
sig<-0
for(i in 1:nSims){ #for each simulated experiment
#generating 32 observations total from uniform(0,1) distribution
control.year1 <- runif(16, min = 0, max = 1)
treat.year1 <- runif(16, min = 0, max = 1)
#Creating dichotomous variable for those get better/don't get better
control.respond <- ifelse(control.year1<=0.05,1,0)
treat.respond <- ifelse(treat.year1<=0.30,1,0)
#perform t-test
z <- t.test(control.respond,treat.respond)
p[i]<-z$p.value #get the p-value and store it
# want to count number of significant p-values - not sure how to do it
significance <- ifelse(z$p.value<= 0.01,sum(sig, 1),0)
}
这个解决方案不是最优雅的,但使用 magrittr
和 dplyr
进行数据处理。首先,我创建了一个矩阵来保存您的模拟数据:
library(magrittr)
library(dplyr)
n <- 100
control.years <- as.data.frame(matrix(runif(16*n, min=0, max=1),ncol=16))
treat.years <- as.data.frame(matrix(runif(16*n, min=0, max=1),ncol=16))
然后我创建了一个数据结构来捕获所有 t 检验的 p 值:
for (i in 1:n) { p[i] <- t.test(control.years[i,],treat.years[i,])$p.value }
您可以过滤掉您喜欢的范围内的 p 值:
> as.data.frame(p) %>% filter(p<0.05)
p
1 0.03173299
2 0.01652114
3 0.00471807
或者您可以创建一个新变量来告诉您是否重要:
> as.data.frame(p) %>% mutate(sig=ifelse(p<0.05,1,0))
p sig
1 0.65233254 0
2 0.50731231 0
3 0.11657045 0
...
29 0.03173299 1
或者您可以找出有多少显着的 p 值:
> z <- as.data.frame(p) %>% mutate(sig=ifelse(p<0.05,1,0))
> table(z$sig)
0 1
97 3