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

如何用R基于利润区间与资产十分位数构建双维度分桶并计算破产率?

实现双维度(利润区间+资产十分位)分桶并计算破产率

核心思路

先通过cut()将利润(LOGPNL)划分为指定区间,再以利润区间为分组维度,在每个组内对总资产(LOGBAL)计算十分位分桶,最后按双维度分桶分组统计破产率及其他指标。

完整实现代码

# 加载依赖包
library(dplyr)

# 数据准备(复用你的代码)
mydf <- data.frame(
  Insolve = my_data$FLAG,
  profit = my_data$LOGPNL,
  assets = my_data$LOGBAL
)

# 1. 定义利润区间(可根据业务需求调整breaks参数)
# 示例:将-30到30的利润按每10为间隔划分区间,包含最小值
mydf <- mydf %>%
  mutate(profit_bin = cut(profit, breaks = seq(-30, 30, 10), include.lowest = TRUE))

# 2. 在每个利润区间内,对资产计算十分位分桶
mydf <- mydf %>%
  group_by(profit_bin) %>%
  mutate(asset_decile = ntile(assets, 10)) %>%
  ungroup()  # 取消分组,避免后续操作受影响

# 3. 按双维度分桶分组,计算统计指标(包含破产率)
bucket_stats <- mydf %>%
  group_by(profit_bin, asset_decile) %>%
  summarise(
    total_n = n(),
    insolvency_n = sum(Insolve),
    insolvency_rate = insolvency_n / total_n,  # 破产率
    assets_mean = mean(assets, na.rm = TRUE),
    assets_sd = sd(assets, na.rm = TRUE),
    profits_mean = mean(profit, na.rm = TRUE),
    profits_sd = sd(profit, na.rm = TRUE),
    .groups = "drop"  # 自动取消分组
  )

# (可选)提取单个双维度分桶的数据,比如利润区间[-30,-20]且资产十分位为1的组
target_bucket <- mydf %>% filter(profit_bin == "[-30,-20]" & asset_decile == 1)

关键细节说明

  • 利润区间自定义:cut()的breaks参数可灵活调整,比如按分位数划分(quantile(mydf$profit, seq(0,1,0.2))),或按业务逻辑划分负利润、零利润、正利润区间。
  • 组内十分位计算:通过group_by(profit_bin)后调用ntile(),确保资产的十分位是在每个利润区间内部计算的,而非全局计算。
  • 破产率计算:用n()获取每个分桶的总样本数,除以破产数得到破产率,更直观反映分桶的破产风险。
  • 替代手动filter:无需像原代码那样逐个生成dc1到dc10,直接用filter()指定双维度条件即可提取目标分桶,或用group_split()将所有分桶拆分为列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:43:29