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

如何在R语言中编写函数同时计算向量y的偏度与峰度

R语言实现同时计算偏度与峰度的函数

首先还原问题里的向量生成代码(优化了冗余赋值):

set.seed(1112)
y <- 11 + sqrt(12) * rnorm(5000)
y[sample(5000, size = 200, replace = FALSE)] <- NaN

下面提供两种实现方案:

方案一:手动实现(无第三方包依赖)

基于统计公式编写函数,自动处理向量中的NaN缺失值,采用Fisher校正后的偏度和峰度(让正态分布的峰度为0):

skew_kurt <- function(vec) {
  # 过滤缺失值
  vec_clean <- vec[!is.na(vec)]
  n <- length(vec_clean)
  
  # 样本量不足时抛出提示
  if (n < 4) stop("有效样本量小于4,无法计算峰度")
  
  # 计算基础统计量
  mu <- mean(vec_clean)
  s <- sd(vec_clean)
  
  # Fisher校正偏度
  skewness <- (n / ((n - 1) * (n - 2))) * sum((vec_clean - mu)^3) / (s^3)
  
  # Fisher校正峰度(正态分布峰度为0)
  kurtosis <- (n * (n + 1) / ((n - 1) * (n - 2) * (n - 3))) * sum((vec_clean - mu)^4) / (s^4) - 
    (3 * (n - 1)^2) / ((n - 2) * (n - 3))
  
  # 返回包含偏度和峰度的列表
  return(list(skewness = skewness, kurtosis = kurtosis))
}

调用函数并查看结果:

# 计算结果
result <- skew_kurt(y)

# 输出偏度
result$skewness
# 输出峰度
result$kurtosis

方案二:借助第三方包(简洁高效)

如果不想手动实现,可使用moments包的内置函数,同样需先过滤缺失值:

# 安装包(首次使用时执行)
# install.packages("moments")
library(moments)

skew_kurt_package <- function(vec) {
  vec_clean <- vec[!is.na(vec)]
  return(list(skewness = skewness(vec_clean), kurtosis = kurtosis(vec_clean)))
}

# 调用函数
result2 <- skew_kurt_package(y)
print(result2)

注意:moments包中的kurtosis()默认返回Fisher校正后的结果(正态分布峰度为0),和手动实现逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:27:31