当前位置: 首页 > 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.lqws.cn/news/590617.html

相关文章:

  • ABB PPD 113 B03-23-100110 3 bhe 023584 r 2334 AC 800 pec控制系统
  • 腾讯 iOA 零信任产品:安全远程访问的革新者
  • ASP.NET代码审计 MVC架构 SQL注入漏洞
  • LINUX2.6设备注册与GPIO相关的API
  • 将N8N配置为服务【ubuntu】
  • 第4课:Flask请求与响应对象深度解析
  • 使用mavros启动多机SITL仿真
  • WPF学习笔记(17)样式Style
  • Coze(扣子):基础学习
  • 利用视觉-语言模型搭建机器人灵巧操作的支架
  • 【Docker基础】Docker数据卷:数据卷的作用与使用场景
  • 算法-每日一题(DAY12)最长和谐子序列
  • Salesforce Accountアクションボタン実装ガイド
  • 简单聊聊 Flutter 在鸿蒙上为什么可以 hotload ?
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!
  • 具身多模态大模型在感知与交互方面的综述
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • rocketmq 之 阿里云转本地部署实践总结
  • Vue3 中 Excel 导出的性能优化与实战指南
  • 创建和连接Vue应用程序实例
  • 缓存系统-淘汰策略
  • 强化学习系列--dpo损失函数
  • 齿轮的齿厚极限偏差如何确定?一起学习一下
  • C++基础
  • 目前最火的agent方向-A2A快速实战构建(二): AutoGen模型集成指南:从OpenAI到本地部署的全场景LLM解决方案
  • 《Python 架构之美:三大设计模式实战指南》
  • 【FR801xH】富芮坤FR801xH之UART
  • 【javaAI】SpringAI快速入门
  • 【C#】如果有一个数值如 168.0000100,如何去除末尾的无效零,只显示有效的小数位数,让DeepSeek给我们解答
  • 半加器和全加器