You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何矢量化sapply函数实现R语言累积偏度计算?

修正矢量化的累积偏度计算函数

你的skewness2函数存在三个核心逻辑错误,导致结果偏离预期:

  • 分子计算逻辑错误:你先对每个x_i - cmu_i做累积求和再三次方,这和原逻辑中对前k项的(x_i - mu_k)^3求和完全不符
  • 平方根参数错误:原逻辑中每个累积窗口对应的是sqrt(k)(当前窗口长度),而非整个向量的sqrt(n)
  • 分母计算逻辑错误:类似分子问题,你先对(x_i - cmu_i)^2累积求和再开3/2次方,而非先计算前k项相对于mu_k的平方和再开方

以下是修正后的矢量化函数,完全匹配原cskewness的计算逻辑:

skewness2 <- function(.x) {
  n <- length(.x)
  k <- seq_len(n)
  
  # 计算累积的一、二、三次方和
  csum1 <- cumsum(.x)
  csum2 <- cumsum(.x^2)
  csum3 <- cumsum(.x^3)
  
  # 每个累积窗口对应的均值
  mu <- csum1 / k
  
  # 计算分子:sum((x_i - mu_k)^3),通过代数展开避免循环
  sum_cubed <- csum3 - 3 * mu * csum2 + 3 * mu^2 * csum1 - k * mu^3
  
  # 计算分母:sum((x_i - mu_k)^2)^(3/2)
  sum_squared <- csum2 - 2 * mu * csum1 + k * mu^2
  den <- sum_squared^(3/2)
  
  # 生成最终累积偏度结果,k=1时分母为0,结果为NaN
  sqrt(k) * sum_cubed / den
}

测试验证

使用输入x <- c(1,2,4,5,8)测试:

> cskewness(x)
[1]       NaN 0.0000000 0.3818018 0.0000000 0.4082483
> skewness2(x)
[1]       NaN 0.0000000 0.3818018 0.0000000 0.4082483

内容的提问来源于stack exchange,提问作者MCP_infiltrator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:32:05