如何为 R 中的功效分析生成具有不同样本大小的负二项分布?
How to generate a negative binomial distribution with different sample sizes for power analyses in R?
我尝试使用零膨胀的结果变量进行功率模拟。所以我使用负二项分布。我需要的是以下分布:
library(tidyverse)
set.seed(123)
rt_random <-
rnbinom(n = 2000, mu = 25, size = .9)
qplot(rt_random)
现在,我尝试创建一个函数,我可以在其中使用不同的样本大小进行功率模拟。为此,我使用 pmap
函数。但是,这似乎不起作用。最终分布根本不是零膨胀的,均值不接近定义的均值:
generate_distribution <- function(n, mus, sizes){
tibble(n = n,
t_mu = mus,
t_size = sizes)%>%
mutate(rt = pmap(list(n, t_mu, t_size),
~rnbinom(..1, ..2, ..3))) %>%
unnest(rt)
}
set.seed(123)
rt_df <-
generate_distribution(n = 2000,
mus = 25,
sizes = .9)
qplot(rt_df$rt)
是否有一种简单的方法来更改我的代码以获得所需的分布?
问题是在您的 lambda 函数中,您没有使用 rnbinom
的参数名称。如果您不命名参数,则参数的默认顺序是 n, size, prob, mu
,因此您将 2000 传递给 n
、25 传递给 size
和 0.9 传递给 prob
。只需像在第一个示例中那样明确命名参数,您的代码就可以运行。
generate_distribution <- function(n, mus, sizes){
tibble(n = n,
t_mu = mus,
t_size = sizes)%>%
mutate(rt = pmap(list(n, t_mu, t_size),
~rnbinom(n = ..1, mu = ..2, size = ..3))) %>%
unnest(rt)
}
set.seed(123)
rt_df <-
generate_distribution(n = 2000,
mus = 25,
sizes = .9)
qplot(rt_df$rt)
我尝试使用零膨胀的结果变量进行功率模拟。所以我使用负二项分布。我需要的是以下分布:
library(tidyverse)
set.seed(123)
rt_random <-
rnbinom(n = 2000, mu = 25, size = .9)
qplot(rt_random)
现在,我尝试创建一个函数,我可以在其中使用不同的样本大小进行功率模拟。为此,我使用 pmap
函数。但是,这似乎不起作用。最终分布根本不是零膨胀的,均值不接近定义的均值:
generate_distribution <- function(n, mus, sizes){
tibble(n = n,
t_mu = mus,
t_size = sizes)%>%
mutate(rt = pmap(list(n, t_mu, t_size),
~rnbinom(..1, ..2, ..3))) %>%
unnest(rt)
}
set.seed(123)
rt_df <-
generate_distribution(n = 2000,
mus = 25,
sizes = .9)
qplot(rt_df$rt)
是否有一种简单的方法来更改我的代码以获得所需的分布?
问题是在您的 lambda 函数中,您没有使用 rnbinom
的参数名称。如果您不命名参数,则参数的默认顺序是 n, size, prob, mu
,因此您将 2000 传递给 n
、25 传递给 size
和 0.9 传递给 prob
。只需像在第一个示例中那样明确命名参数,您的代码就可以运行。
generate_distribution <- function(n, mus, sizes){
tibble(n = n,
t_mu = mus,
t_size = sizes)%>%
mutate(rt = pmap(list(n, t_mu, t_size),
~rnbinom(n = ..1, mu = ..2, size = ..3))) %>%
unnest(rt)
}
set.seed(123)
rt_df <-
generate_distribution(n = 2000,
mus = 25,
sizes = .9)
qplot(rt_df$rt)