当前位置: 首页 > news >正文

从0开始学习R语言--Day35--核密度动态估计

对于在时空上分布的数据,通常都需要我们去观察其变化规律。但仅仅只用直方图只能看到分布,对于变化的趋势并没有把握得那么细节,这个时候我们会采取用核密度动态估计的方法。

也许很多人对此有疑惑,明明直方图也能看出数据的变化趋势,核密度的图像只是看起来更平滑,把棱角磨掉了而已。但其实,两者有个本质的区别在于,假如直方图对于区间设置的过大或过小,数据的趋势会因此改变,且有可能存在把峰值靠在一起从而忽略掉其中一个的情况,而核密度则会自动平滑掉噪声干扰且会自动选择最佳的区间以尽可能显示数据的所有特点。

以下是一个例子:

# 生成模拟数据集 - 混合正态分布
set.seed(123)  # 设置随机种子保证结果可重复
data <- c(rnorm(200, mean = 0, sd = 1), rnorm(300, mean = 5, sd = 1.5))# 查看原始数据的直方图
hist(data, breaks = 30, col = "lightblue", main = "Histogram of Generated Data",xlab = "Value", prob = TRUE)# 基本核密度估计
density_est <- density(data)
plot(density_est, main = "Basic Kernel Density Estimate",xlab = "Value", ylab = "Density")
polygon(density_est, col = "lightgreen", border = "black")# 尝试不同带宽
par(mfrow = c(2, 2))  # 设置2x2的图形布局# 默认带宽
plot(density(data), main = "Default Bandwidth", col = "blue")# 较小带宽
plot(density(data, bw = 0.2), main = "Small Bandwidth (0.2)", col = "red")# 较大带宽
plot(density(data, bw = 1.5), main = "Large Bandwidth (1.5)", col = "darkgreen")# 使用不同核函数
plot(density(data, kernel = "rectangular"), main = 'Rectangular Kernel', col = "purple")# 恢复单图布局
par(mfrow = c(1, 1))# 比较两组数据的密度
data_group1 <- rnorm(300, mean = 0, sd = 1)
data_group2 <- rnorm(300, mean = 2, sd = 1.2)plot(density(data_group1), col = "blue", main = "Comparing Two Distributions",xlim = range(c(data_group1, data_group2)))
lines(density(data_group2), col = "red")
legend("topright", legend = c("Group 1", "Group 2"), col = c("blue", "red"), lty = 1)

输出:

从结果可以看到,假如在手动设置区间时不小心设为了[0,1],那么有可能会忽略掉另一个峰;而不同的核密度估计图,设置的带宽如果比较小,那么会看到很多数据的细节,但容易造成过拟合,过大则容易忽略掉一些转折,一般都采用默认值不去调。

http://www.dtcms.com/a/264095.html

相关文章:

  • Node.js-path模块
  • 12【进程间通信——管道】
  • 记本好书:矩阵力量:线性代数全彩图解+微课+Python编程
  • 【Go-策略模式】告别if/else hell,拥抱 Go 语言策略模式
  • js基础知识
  • 【组合数学】P11362 [NOIP2024] 遗失的赋值|普及+
  • 事务隔离级别深度解析:机制、语法与实战指
  • 力扣74 搜索二维矩阵
  • [密码学实战]深入解析ASN.1和DER编码:以数字签名值为例(三十一)
  • UniApp完全支持快应用QUICKAPP-以及如何采用 Uni 模式开发发行快应用优雅草卓伊凡
  • 从 Copilot 到 通用 Agent : 大厂在 AI Coding 上的应用和挑战
  • 华为云开始了“开发者空间 AI Agent 开发”活动
  • Anthropic 开源 LLM“电路追踪器”:首次可视化语言模型的“推理路径”!
  • SQLite与MySQL:嵌入式与客户端-服务器数据库的权衡
  • 使用mavros启动多机SITL仿真
  • 9-2 MySQL 分析查询语句:EXPLAIN(详细说明)
  • react-数据Mock实现——json-server
  • Jenkins 插件深度应用:让你的CI/CD流水线如虎添翼 [特殊字符]
  • 华锐互动:全方位定制化 VR 内容制作服务流程剖析​
  • [Python 基础课程]字符串
  • Redis集群数据流解析:从分层设计到一致性难题破解
  • Vue3 中 Excel 导出的性能优化与实战指南
  • A模块 系统与网络安全 第三门课 网络通信原理-3
  • Badoo×亚矩云手机:社交约会革命的“云端心跳加速剂“
  • 论文阅读:Align and Prompt (ALPRO 2021.12)
  • 狂神说 - Mybatis 学习笔记 --下
  • SVN 分支管理(本文以Unity项目为例)
  • 【C++】inline的作用
  • 齿轮的齿厚极限偏差如何确定?一起学习一下
  • Vue3——富文本