【问题标题】:Calculating Sample Moments in R (raw code)在 R 中计算样本矩(原始代码)
【发布时间】:2013-10-30 00:10:23
【问题描述】:

我正在尝试编写函数来计算 0 左右和平均值附近的样本矩,从一阶到四阶。我把第一个打倒了,但我对第二个有问题。这是我的代码:

moment.zero <- function(x) {
  lapply(1:4, function(i) (1/length(x$elements)) * sum(x$elements^i))
}

moment.mean <- function(x) {
  lapply(1:4, function(i) (1/length(x$elements)) * sum(x$elements #mistake is here - mean(x$elements))^i)
}

我不应该使用循环,所以我使用了 lapply 函数。我无法弄清楚平均值附近的示例时刻的代码;我需要访问列表中的每个单独元素,从平均值中减去它,然后将其提高到适当的幂。使用索引没有帮助,所以我的主要问题是:如何引用列表中的每个元素?

【问题讨论】:

  • CRAN 上有一个moments package...或者“我不应该使用循环”这句话是否暗示这是家庭作业?

标签: r


【解决方案1】:
moment.zero <- function(x) {
  n <- length(x)
  sapply(1:4, function(i) (1/n) * sum(x^i))
}

moment.mean <- function(x) {
  mu <- mean(x)
  n <- length(x)
  sapply(1:4, function(i) (1/n) * sum((x - mu)^i))
}

请注意,预先计算 mun 是一个(微小的)效率提升 - 否则它们会被计算四次。

要引用向量的元素,请使用方括号:例如x[2].

【讨论】:

  • 谢谢 - 成功了。奇怪的。我试过了,但没有得到正确的答案。
  • 您期待什么结果?如果您真的很喜欢示例时刻,您可能会想要使用n-1 而不是n。注意我已经切换到sapply 来返回向量而不是列表。
  • 好吧,我刚刚使用时刻包中提供的功能测试了我的代码。第一个代码产生了正确的答案,但第二个没有。然而,在这个简单的修复之后,我的答案与使用时刻包中的函数计算得出的答案相对应。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多