R语言离散数据CDF/PDF计算、比值求解及可视化求助
离散向量的PDF/CDF计算与可视化方案
1. 数据准备与PDF计算
离散数据的PDF(实际为概率质量函数PMF)是每个值出现的概率,即频数除以总样本数,可通过table()统计后计算:
# 定义目标向量 MyVector <- c(99,100,100,98,99,101,99,101,102,100) # 统计频数并计算PDF freq_table <- table(MyVector) pdf_values <- as.numeric(freq_table) / length(MyVector) # 整理为数据框 stats_df <- data.frame( Value = as.numeric(names(freq_table)), PDF = pdf_values )
2. 计算CDF与CDF/PDF比值
CDF可通过PDF累加得到,也可与你使用的ecdf()函数结果对应;CDF/PDF直接基于已计算的列做除法即可:
# 计算累积概率CDF stats_df$CDF <- cumsum(stats_df$PDF) # 计算CDF与PDF的比值 stats_df$CDFdivPDF <- stats_df$CDF / stats_df$PDF # 用ecdf函数验证CDF值(以100为例) MyCDF <- ecdf(MyVector) MyCDF(100) # 输出0.7,与累加结果一致
3. 生成统计表格
直接输出数据框即可,也可用knitr美化表格:
# 基础输出 print(stats_df) # 美化表格(需安装knitr包) # install.packages("knitr") knitr::kable(stats_df, caption = "离散向量统计结果")
输出表格示例:
| Value | CDF | CDFdivPDF | |
|---|---|---|---|
| 98 | 0.1 | 0.1 | 1.0 |
| 99 | 0.3 | 0.4 | 1.3333 |
| 100 | 0.3 | 0.7 | 2.3333 |
| 101 | 0.2 | 0.9 | 4.5 |
| 102 | 0.1 | 1.0 | 10.0 |
4. 绘制可视化图表
使用ggplot2绘制三条曲线,标记离散数值点:
# 安装并加载依赖包 # install.packages(c("ggplot2", "tidyr")) library(ggplot2) library(tidyr) # 转换数据为长格式,方便多曲线绘图 stats_long <- pivot_longer(stats_df, cols = c(PDF, CDF, CDFdivPDF), names_to = "Metric", values_to = "Value") # 生成可视化图表 ggplot(stats_long, aes(x = Value, y = value, color = Metric, group = Metric)) + geom_line(size = 1.2) + geom_point(size = 3) + labs(x = "数值", y = "指标值", title = "离散向量的PDF/CDF/CDFdivPDF曲线") + theme_minimal() + scale_color_manual(values = c("PDF" = "blue", "CDF" = "green", "CDFdivPDF" = "red"))
内容的提问来源于stack exchange,提问作者Avocado
相关产品推荐
相关产品推荐

