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

在R中如何按假设分布对右删失缺失数据进行插补?

右删失对数正态数据的随机插补实现

我们已经知道可以用censlm包轻松处理左删失(低于LLOQ)数据的对数正态分布随机插补,对于右删失(高于ULOQ)的数据,完全不用走“翻转数据”的弯路,直接用censlm的原生参数就能优雅解决。


快速回顾左删失处理流程

library(ggplot2)
library(dplyr)
library(censlm)
set.seed(123)

# 模拟对数正态分布生物标志物数据
original_data <- rlnorm(10000, 2.3, 0.4)

# 定义定量下限(LLOQ)
lloq <- 8

# 标记左删失观测:将LLOQ以下的值替换为LLOQ
obs_left <- replace(original_data, original_data < lloq, lloq)

# 拟合左删失模型并生成插补值
fit_left <- clm(log(obs_left) ~ 1, left = log(lloq))
imputed_left <- exp(imputed(fit_left))

左删失数据分布:
左删失数据直方图

原始与插补数据密度对比:
左删失插补密度对比


右删失数据的优雅插补步骤

1. 预处理右删失数据

# 定义定量上限(ULOQ)
uloq <- 15

# 标记右删失观测:将ULOQ以上的值替换为ULOQ
obs_right <- replace(original_data, original_data > uloq, uloq)

2. 拟合右删失模型并生成插补值

clm函数支持通过right参数指定右侧截尾阈值,对数正态分布下我们只需对观测值取对数后建模:

# 拟合右删失对数正态模型
fit_right <- clm(log(obs_right) ~ 1, right = log(uloq))

# 生成插补值并转换回原尺度
imputed_right <- exp(imputed(fit_right))

3. 验证插补效果

把原始数据和插补后数据合并,绘制密度图对比:

# 转换为长格式用于绘图
overlayed <- data.frame(original = original_data, imputed = imputed_right) %>%
  tidyr::pivot_longer(everything(), names_to = "data_type", values_to = "value")

# 绘制密度对比图
ggplot(overlayed) +
  geom_density(aes(x = value, linetype = data_type, color = data_type), 
               alpha = 0.5, bw = 1.0) +
  geom_vline(xintercept = uloq, linetype = "dotted", color = "red") +
  labs(x = "生物标志物值", y = "密度", title = "原始数据与右删失插补数据对比") +
  theme_minimal()

右删失原始数据分布:
右删失原始数据分布


核心逻辑说明

对数正态分布取对数后服从正态分布,右删失对应正态分布的右侧截尾。censlm::clm原生支持右侧截尾建模,直接基于截尾正态分布生成符合假设的随机插补值,不需要对数据做翻转等额外变换,逻辑直观且代码简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:29:59