matlab核密度,核密度图的绘制

2023-05-16

原标题:核密度图的绘制

我们先看一下别人家文章中的核密度图。

bb5adfed76f9eeae79177ef693ba2368.png

那么,怎么做出这样的图呢?这种核密度图到底想表达或表现什么呢?

核密度图的绘制

所谓“眼过千遍不如手过一遍”,数据我们这里用Wikipedia文中的这6个数: −2.1, −1.3,−0.4,1.9,5.1,6.2。我们用ggplot2绘制这6个数的核密度图(两种方法,代码对应下图的p1和p2)、直方图和密度图的组合比较(下图p3),与其“镜像翻转”数列“相加”后新数列的密度图(下图p4,橙色)。代码如下:

> library("ggplot2", lib.loc="~/R/win-library/3.4")

> x

> x

[1] -2.1 -1.3 -0.4 1.9 5.1 6.2

# 载入数据

> p

> p1

> p1

# 第一种画法,利用geom_density()画的核密度图,“面积”可填充颜色(见下图,p1)。这里的adjust用来调整bw(带宽),数值为默认值的倍数。这里geom_density()默认的核函数为Gaussian,关于带宽的解释见下文。

> p2

> p2

# 第二种画法,方法相类似,最后的结果与p1一致,只是不能填充颜色(下图p2)。

> p3

+geom_line(stat ="density",adjust=0.55,color="red",size=1)+xlim(-5,10)

> p3

# 同样的数据,用geom_histogram()画直方图作比较,某种意义上可为bw的调整做参考。

> m

> z

> n

> data

> data

m n

1 1 -8.3

2 1 -6.4

3 1 -2.3

4 1 2.3

5 1 6.4

6 1 8.3

7 2 -2.1

8 2 -1.3

9 2 -0.4

10 2 1.9

11 2 5.1

12 2 6.2

> p1

> w1

> p4

# 将x这列数据乘以负1,从顺序颠倒后与x相加,生成z,z和x组成数据框,绘制分组核密度图,见p4。本文对图表主题,文字不做调整,调整方法见上一篇文章《ggplot2绘图学习笔记分享》,这里不再赘述。

99d4e7824d6445f46c8578686088df35.png

KDE 简介

核密度估计(kernel density estimation,KDE)是根据已知的一列数据(x1,x2,…xn)估计其密度函数的过程,即寻找这些数的概率分布曲线。我们最常见的密度函数莫过于正态分布(也称高斯分布)的密度函数:

dae1bf904ca0637f8b75daf4bd869476.png

而密度估计就是给定一列数据,分布未知的情况下估计其密度函数。

例如上文的6个数据:c(x1 = −2.1,x2 = −1.3, x3 = −0.4, x4 = 1.9, x5 = 5.1, x6= 6.2),我们看下这列数据的“密度”如何。

画频率直方图就是一种密度估计的方法(如下图,组距为2),这里的“密度”(density)可以感性得理解为一个区间(直方图的组距)内数据数量的多少,右图即为这6个数据的密度曲线(这里简称为密度图),它是左图的外轮廓化,数据量越多,直方图的顶点也越接近一条线。

aa24c51e1c5ffe1e8ad54b7563ca8998.png

https://en.wikipedia.org/wiki/

直方图和密度图都是一组数据在坐标轴上“疏密程度”的可视化,只不过直方图用条形图显示,而密度图使用拟合后的(平滑)的曲线显示,“峰”越高,表示此处数据越“密集”。“密度”越高,如下图。

8883185b546b4b16742d385171c35e9b.gif

https://en.wikipedia.org/wiki/

“核”与“带宽”

核密度估计是用用下面的函数去估计一个分部未知的独立样本的分布:

其中K,也就是“核”(kernel)表示核函数,部分常见的核函数如下图(看到Gaussian的函数是不是觉得很眼熟?另为,R中的kernel 有"gaussian","epanechnikov","rectangular","triangular","biweight","cosine","optcosine")。

34263efc1f2ed3dadd8b4dc7f4de0eef.png

公式里的“h”,被称为“带宽” (bandwidth,也写作bw),为平滑参数,可简单理解为直方图的“组距”,带宽越大曲线越平滑,见下图。

67d05d4a22885fe32c7e65bf6f073020.png

小结

核密度估计实际上是表现一组数据的分布情况,转录组中用来展示所有样本基因的表达量丰度分布,将FPKM取对数后替换本文第1部分绘图的数据,即可画出样本中所有基因表达量的分布图。一般情况下,它可用来比较某个样本跟其它样本间的差异。

当然,也可以用于其他的数据分布的分析,除了箱型图,还可考虑核密度图。

想学ggplot2作图的童鞋可以点击“阅读原文”到在线课堂看周老师的视频教程,每个视频都可下载课件和数据。今天的就到这里啦,若觉得本文还不错要记得分享哦~

参考文献:

Hebenstreit, Daniel, et al. "RNA sequencing reveals two major classes of gene expression levels in metazoan cells."Molecular systems biology7.1 (2011): 497.

Shah, Sohrab P., et al. "The clonal and mutational evolution spectrum of primary triple-negative breast cancers."Nature486.7403 (2012): 395-399.返回搜狐,查看更多

责任编辑:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab核密度,核密度图的绘制 的相关文章

  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • MATLAB 中的抗锯齿线和标记

    您好 我在 MATLAB 中有一张图像 我希望这条线是平滑的 看看从 0 4 到 0 8 的线 这太可怕了 当在图中使用 LineSmoothing on 运算符时 我得到了这个 我在线条上做得很好 但它也使标记变得平滑 而且它们太可怕了
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之

随机推荐