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

如何为example_data生成符合置信区间与均值要求的sample_pred列

为R数据框生成符合要求的sample_pred列

假设predictions_df包含x、prediction、prediction_lower_ci、prediction_upper_ci列,example_data包含x列,以下是实现需求的具体方法:

方法1:基于正态分布生成(均值更贴合prediction)

通过正态分布生成随机数,再截断到CI区间内,既能保证值落在要求范围,又能让均值接近目标prediction:

library(dplyr)

# 合并预测区间和目标值到example_data
example_data <- example_data %>%
  left_join(predictions_df, by = "x")

# 按x分组生成符合要求的sample_pred
example_data <- example_data %>%
  group_by(x) %>%
  mutate(
    # 以CI范围的1/4作为标准差,可根据需求调整
    pred_sd = (prediction_upper_ci - prediction_lower_ci)/4,
    # 生成正态随机数并截断到CI区间
    sample_pred = pmax(prediction_lower_ci, 
                       pmin(prediction_upper_ci, 
                            rnorm(n(), mean = prediction, sd = pred_sd)))
  ) %>%
  ungroup() %>%
  select(-pred_sd) # 移除临时计算列

方法2:调整均匀分布(实现简单)

若偏好均匀分布,可通过偏移量调整均值,使其贴合prediction:

library(dplyr)

example_data <- example_data %>%
  left_join(predictions_df, by = "x") %>%
  group_by(x) %>%
  mutate(
    ci_mid = (prediction_lower_ci + prediction_upper_ci)/2,
    offset = prediction - ci_mid, # 计算均值偏移量
    # 生成调整后的均匀分布随机数,再截断到CI区间
    sample_pred = pmax(prediction_lower_ci, 
                       pmin(prediction_upper_ci, 
                            runif(n(), min = prediction_lower_ci - offset, 
                                  max = prediction_upper_ci - offset)))
  ) %>%
  ungroup() %>%
  select(-ci_mid, -offset)

验证结果正确性

运行以下代码检查是否满足要求:

example_data %>%
  group_by(x) %>%
  summarise(
    所有值在CI内 = all(sample_pred >= prediction_lower_ci & sample_pred <= prediction_upper_ci),
    sample_pred均值 = mean(sample_pred),
    目标prediction = first(prediction),
    均值差绝对值 = abs(sample_pred均值 - 目标prediction)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:32:18