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

如何在R中批量优化各金融机构数据分布的正态性(替代Excel手动操作)

批量按金融机构处理异常值并优化正态性(R实现)

核心思路

按金融机构分组,对每组数据单独执行:

  • 计算组内均值、标准差、1%和99%分位数
  • 将超出±3倍标准差的异常值缩尾到对应分位数
  • 可选结合正态性变换(如对数、Box-Cox)进一步优化分布

完整代码实现

# 先安装并加载dplyr(若未安装)
# install.packages("dplyr")
library(dplyr)

# 分组处理数据
df_processed <- df %>%
  group_by(id) %>%
  mutate(
    # 计算组内关键统计量(忽略缺失值)
    group_mean = mean(x, na.rm = TRUE),
    group_sd = sd(x, na.rm = TRUE),
    q01 = quantile(x, 0.01, na.rm = TRUE),
    q99 = quantile(x, 0.99, na.rm = TRUE),
    # 替换±3SD以外的异常值为对应分位数
    x_trimmed = case_when(
      x < group_mean - 3 * group_sd ~ q01,
      x > group_mean + 3 * group_sd ~ q99,
      TRUE ~ x  # 正常数值保持不变
    ),
    # 可选:对数变换(适用于x为正的右偏数据)
    x_log = ifelse(x_trimmed > 0, log(x_trimmed), NA),
    # 可选:Box-Cox变换(需加载MASS包,通用正态性变换)
    # x_boxcox = MASS::boxcox(x_trimmed ~ 1, plotit = FALSE)$x
  ) %>%
  ungroup()  # 取消分组状态

关键步骤解释

  • group_by(id):确保每个金融机构的数据分析独立进行,避免跨机构统计偏差
  • case_when():精准定位异常值并完成缩尾,完全替代手动Excel操作
  • 正态性变换:对数变换适合明显右偏的正数值数据;Box-Cox变换可自动选择最优变换参数,需提前安装MASS包

验证正态性的实用方法

  1. Shapiro-Wilk检验:按组批量验证(注意:大样本下检验易拒绝正态假设,需结合可视化)
normality_check <- df_processed %>%
  group_by(id) %>%
  summarise(
    shapiro_stat = shapiro.test(x_trimmed)$statistic,
    shapiro_pval = shapiro.test(x_trimmed)$p.value
  )
  1. Q-Q图可视化:直观观察数据是否贴合正态分布
# 先安装并加载ggplot2
# install.packages("ggplot2")
library(ggplot2)

# 绘制指定机构的Q-Q图
df_processed %>%
  filter(id == "目标机构ID") %>%
  ggplot(aes(sample = x_trimmed)) +
  stat_qq() +
  stat_qq_line(color = "red")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:20:25