【问题标题】:Function that will generate iter samples of size n from a gamma distribution with shape parameter alpha and rate parameter beta函数将从具有形状参数 alpha 和速率参数 beta 的 gamma 分布生成大小为 n 的迭代样本
【发布时间】:2024-01-02 15:49:01
【问题描述】:

函数需要返回每个样本的均值和标准差。

这就是我所拥有的:

sample_gamma <- function(alpha, beta, n, iter) {
  mean = alpha/beta
  var = alpha/(beta)^2
  sd = sqrt(var)
  gamma = rgamma(n,shape = alpha, scale = 1/beta)
  sample_gamma = data.frame(mean = replicate(n = iter, expr = mean))
}

我对此非常迷茫。我还需要为这个函数创建一个数据框。

感谢您的宝贵时间。

编辑:

sample_gamma <- function(alpha, beta, n, iter) {
  output <- rgamma(iter, alpha, 1/beta)
  output_1 <- matrix(output, ncol = iter)
  means <- apply(output_1, 2, mean)
  sds <- apply(output_1, 2, sd)
mystats <- data.frame(means, sds)
return(mystats)
  }

除了 sds 之外,这都有效。它正在返回 NA。

【问题讨论】:

    标签: r gamma-distribution


    【解决方案1】:

    我不太清楚你想要什么。但是,假设您要创建 10 个大小为 1000、alpha = 1、beta = 2 的样本。然后您可以创建一个 rgamma 实现流,将它们维度化为一个矩阵,然后使用 apply 获取您的统计信息,最后创建一个数据框使用这些向量:

    output <- rgamma(10*1000, 1, 1/2)
    output <- matrix(output, ncol = 10)
    means <- apply(output, 2, mean)
    sds <- apply(output, 2, sd)
    mystats <- data.frame(means, sds)
    

    您可以将您的函数包装在该代码周围,用参数替换硬值。

    【讨论】:

    • 差不多。唯一不起作用的是sds。它即将出现在所有 NA 中。
    • 我使用了更一般的情况。请参阅上面我编辑的代码。
    • 太棒了。谢谢。