在 R 中使用 geom_密度_2d() 时出错:“stat_密度2d()”中计算失败:带宽必须严格为正数

2023-11-21

在尝试使用 ggplot2 制作测试二维密度图时,我使用了代码片段:

ggplot(df, aes(x = S1.x, y = S1.y)) + geom_point() + geom_density_2d()

我收到错误:“计算失败stat_density2d():带宽必须严格为正值”

我的数据框如下所示:

> df

transcriptID S1.x      S1.y      S2.x       S2.y    
DQ459412     0.000000  0.000000  0.000000   0.000000
DQ459413     1.584963  2.358379  4.392317   3.085722    
DQ459415     0.000000  0.000000  0.000000   0.000000    
DQ459418     0.000000  0.000000  0.000000   0.000000    
DQ459419     0.000000  0.000000  4.000000   2.891544    
DQ459420     0.000000  0.000000  0.000000   0.000000      

Also, var(df[,"S1.x"]) > 0 and var(df[,"S1.y"]) > 0.

图 1 - 有误差的二维密度图

但是,我通过运行以下命令得到了没有错误的密度图:

ggplot(df, aes(x = S2.x, y = S2.y)) + geom_point() + geom_density_2d()

图 2 - 无误差的密度图

如何解决图 1 中的错误?


所以真正的问题是S1.x and S1.y值的列中只有一个非零值。事实证明geom_density_2d仅用一两个值无法真正估计密度。但请继续阅读...

Update:

这个问题之前已经被问过,答案通常是您的数据列需要有非零方差。但你确实有非零方差,那么为什么它不起作用呢?

  • 看看内部geom_density_2d我们看到它使用了MASS::kde2d计算分布的包函数。
  • 看着kde2d我们看到它使用MASS::bandwidth.nrd(df$x)以获得带宽的估计。
  • 查看帮助(其中有代码)bandwidth.nrd我们看到它使用了一个经验法则quantile分布,并从第一个分位数减去第二个分位数以获得带宽估计。
  • 对原始数据进行分位数,我们发现数据的分位数为零。
  • 和跑步MASS::kde2d在你的原始数据上bandwidth.nrd带宽的估计会产生相同的错误:
library(MASS)
nn <- c("DQ459412","DQ459413","DQ459415","DQ459418","DQ459419","DQ459420")
s1x <- c(0,1.584963,0,0,0,0)
s1y <- c(0,2.358379,0,0,0,0) 
s2x <- c(0,4.392317,0,0,4,0)
s2y <- c(0,3.085722,0,0,2.891544,0) 
df <- data.frame(transcriptID=nn,S1.x=s1x,S1.y=s1y,S2.x=s2x,S2.y=s2y)
> quantile(df$s1x)
      0%      25%      50%      75%     100% 
0.000000 0.000000 0.000000 0.000000 1.584963 
> quantile(df$s1y)
      0%      25%      50%      75%     100% 
0.000000 0.000000 0.000000 0.000000 2.358379 
h <- c(MASS::bandwidth.nrd(df$x), MASS::bandwidth.nrd(df$y))
dens <- MASS::kde2d(df$s1x, df$s1y, h = h, n = n,  lims = c(0,1,0,1))

MASS::kde2d(df$s1x, df$s1y, h = h, n = n, lims = c(0, 1, 0, 1)) 中的错误: 带宽必须严格为正

所以真正的使用标准geom_density_2D是 x 数据和 y 数据的第一分位数和第二分位数之间都需要有非零间隙。

现在要修复它,如果我进行一个小的修改 - 将其中一个零替换为 0.1,如下所示:

nn <- c("DQ459412","DQ459413","DQ459415","DQ459418","DQ459419","DQ459420")
s1x <- c(0,1.584963,0,0,0.1,0)
s1y <- c(0,2.358379,0,0,0.1,0) 
s2x <- c(0,4.392317,0,0,4,0)
s2y <- c(0,3.085722,0,0,2.891544,0) 
df <- data.frame(transcriptID=nn,S1.x=s1x,S1.y=s1y,S2.x=s2x,S2.y=s2y)
print(df)

产量:

  transcriptID     S1.x     S1.y     S2.x     S2.y
1     DQ459412 0.000000 0.000000 0.000000 0.000000
2     DQ459413 1.584963 2.358379 4.392317 3.085722
3     DQ459415 0.000000 0.000000 0.000000 0.000000
4     DQ459418 0.000000 0.000000 0.000000 0.000000
5     DQ459419 0.100000 0.100000 4.000000 2.891544
6     DQ459420 0.000000 0.000000 0.000000 0.000000

然后我得到这个图而不是你的错误。

enter image description here You can let that 0.1 value approach zero, eventually it will not be able to calculate a distribution anymore and you will get your error again.

处理这种情况的一种通用方法是向数据中添加非常少量的噪声,模拟这样一个事实:任何基于连续分布的实际测量的有意义的计算都应该不受少量噪声的影响。

希望有帮助。

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

在 R 中使用 geom_密度_2d() 时出错:“stat_密度2d()”中计算失败:带宽必须严格为正数 的相关文章

  • 如何在 R 中为传单中的数值变量设置不对称颜色渐变

    我想让传单调色板以零为中心 红白绿发散 我已经尝试过中所说的这个帖子 https stackoverflow com questions 29262824 r center color palette on 0 当我尝试手动创建颜色时 我得
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 表单提交时出现 rvest 错误

    我想从以下网页中抓取数据 https swgoh gg u zozo collection 180 emperor palpatine https swgoh gg u zozo collection 180 emperor palpati
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • 替换字符串/文本中“从第 n 次到最后一次”出现的单词

    这个问题以前曾被问过 但尚未得到令提问者满意的答案 https stackoverflow com questions 36368712 how to use stringrs replace all function to replace
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以
  • 如何修改秤包生成的标签?

    所以我正在制作金字塔可视化 我在用着scale y continuous labels scales label number si accuracy 0 1 来生产标签 但是 我想去掉图表女性部分的负号 我认为保留 SI 后缀但删除负号的
  • 如何在我自己的网络服务器上导出并托管 ggvis 图表?

    据我了解 ggvis 运行在闪亮的之上 但我不知道如何在没有 R shiny 的情况下导出在网络服务器上运行单个 ggvis 图表所需的所有文件 这对于交互式绘图来说是不可能的 因为 每个交互式 ggvis 图都必须连接到正在运行的 R 会
  • 如何匹配R中列之间的多个对应值

    我有一个结构如下的数据框 ID Value1 Value2 1 a d g f 12 14 15 9 2 b c e 5 18 20 3 h i j 6 7 25 所以我有一个 ID 和两个值 对于值 1 有多个对应于值 2 的选项 我想最
  • r 谷歌搜索结果计数检索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用关键字 健康医院 搜索谷歌会返回大约 1 150 000 000 个结果 如何在 R 中以编程方式获得此计数 我见过这个lin ht
  • R中将矩阵拆分为子矩阵的函数

    我有一个 16 行 12 列的矩阵 M 我想将其拆分为 16 个矩阵的数组 每个矩阵有 4 行 3 列 我可以通过以下方式手动完成 M matrix sample 0 127 16 12 replace TRUE c 16 12 ma1 M

随机推荐

  • 在 matplotlib 中重用 patch 对象而不移动它们的位置

    我想自动生成一系列被剪裁成补丁的图 如果我尝试重复使用补丁对象 它会在画布上移动位置 该脚本 基于 Yann 对之前问题的回答 演示了正在发生的情况 import pylab as plt import scipy as sp import
  • 需要使用 StreamReader.ReadLine() 获取行终止符

    我编写了一个 C 程序来读取 Excel xls xlsx 文件并输出为 CSV 和 Unicode 文本 我编写了一个单独的程序来删除空白记录 这是通过读取每一行来完成的StreamReader ReadLine 然后逐个字符地遍历字符串
  • 如何使用 jQuery 模拟打字?

    就像如何click 可以用来触发元素上的点击事件 有什么方法可以模拟字符串的输入吗 您可以根据需要使用这些事件 keydown keypress keyup
  • 将日期增加一个月

    假设我有以下格式的日期 2010 12 11 年 周一 使用 PHP 我希望将日期增加一个月 并且希望年份在必要时自动增加 即从 2012 年 12 月增加到 2013 年 1 月 Regards time strtotime 2010 1
  • PayPal REST API 返回信用卡令牌的 500 服务器错误

    我正在尝试让 PayPal REST api 使用存储在保险库中的信用卡创建付款 但是 每当我尝试使用金库中的卡进行付款时 PayPal 的 API 都会挂起大约半分钟 然后给出以下 500 错误 Exception Got Http re
  • 我在控制器中的辅助方法

    我的应用程序应该呈现 html 以便在用户单击 ajax 链接时进行响应 我的控制器 def create user user User new params if user save status success link link to
  • 在 Node.js 中使用 JSON.stringify 会导致“进程内存不足”错误

    使用 Node 我尝试从 LDAP 服务器收集用户数据 然后将该数据写入 JSON 文件 我使用以下代码来执行此操作 fs writeFile data json JSON stringify data null 4 问题是JSON str
  • iOS 8:键盘扩展。添加弹出按键的问题

    我正在构建我的键盘扩展应用程序 并且当用户点击按钮时 我在按钮上添加了按键弹出动画 它适用于内部图像 但对于顶行图像 弹出区域会在剪辑子视图时被隐藏 我尝试使用 ClipToBound 属性并将其设置为 False 但仍然不起作用 有人知道
  • javascript 在逗号后截断字符串

    我正在寻找一种方法来删除字符串中的逗号及其后面的所有内容 例如 重要 又不那么重要 我想删除 不太重要 有任何想法吗 提前致谢 你可以这样做substring and indexOf str str substring 0 str inde
  • 如何在 Sitecore 中关闭 XHTML 验证?

    如何在工作流程中关闭 Sitecore 6 5 XHTML 页面验证 我正在开发并在尝试发布测试页面时不断遇到问题 因为它们出错了 我更愿意在浏览器中将错误作为堆栈跟踪获取 我不确定在此之前我是否已更改某些内容 但我最近承担了一个将 Sit
  • 刷新物化视图:并发、事务行为

    PostgreSQL 9 3 官方文档REFRESH MATERIALIZED VIEW尚未对其进行详细描述 引述自此blog Postgres 9 3 中的物化视图有一个严重的限制 即在刷新它时使用独占锁 这基本上会阻止在使用来自其父关系
  • Apache Spark 移动平均线

    我在 HDFS 中有一个巨大的文件 其中包含时间序列数据点 雅虎股票价格 我想找到时间序列的移动平均值 我该如何编写 Apache Spark 作业来做到这一点 您可以使用 MLLIB 中的滑动函数 它可能与丹尼尔的答案做同样的事情 在使用
  • git fatal:对象错误:unshallow

    我正在尝试取消浅层存储库 bin git clone shallow since 3 years https github com RobertAudi zsh hooks Cloning into zsh hooks remote Enu
  • 具有透明重定向功能的 PayPal PayFlow Pro - 用户身份验证失败问题/文档

    我在集成和查找当前文档时遇到一些困难 集成PayPal PayFlow 专业版进入我的网站 PayFlow Link 这里有一个类似的问题 https stackoverflow com questions 15808604 result
  • 在 woocommerce 中注册并重定向到登录页面时防止自动登录?

    我正在使用 woocommerce wordpress 设计一个网站 我通过参考将登录和注册页面分开这个解决方案 注册成功后 如何在未登录的情况下将注册页面重定向到登录页面 用户需要使用通过电子邮件发送的用户名和密码登录 我的登录页面是 w
  • 用于构建和查找整数范围集的数据结构

    我有一套uint32整数 集合中可能有数百万个项目 其中 50 70 是连续的 但在输入流中它们以不可预测的顺序出现 我需要 将此集合压缩为范围以实现空间有效的表示 已经使用简单的算法实现了这一点 因为仅计算一次的范围速度在这里并不重要 经
  • 如何使用非官方 Android Market API?

    我正在尝试来自的示例代码here 但我的应用程序崩溃了 我添加了日志记录 发现它崩溃了session flush 所以我删除了那条线 它不再崩溃了 但还没有达到onResult打回来 package com mytest app impor
  • XAML 中的多重绑定作为资源

    是否可以 如果是的话如何 添加多值绑定表达到资源中 我有一个多值绑定 它需要 2 个单独的绑定 并且其中一个绑定中包含转换器参数 我必须使用此绑定到 5 个不同的项目 并且这些绑定标签仅在转换器参数上有所不同 其余一切都一样 我会避免重复多
  • iPhone模拟器可以模拟打电话吗?

    我正在构建一个可以打电话的应用程序 如何在模拟器上测试此功能 我打电话时没有得到回应openURL 当然 这在实际设备上确实有效 还可以知道iPhone当前是否处于通话模式吗 对不起 朋友 您无法在模拟器上签入它 一切顺利
  • 在 R 中使用 geom_密度_2d() 时出错:“stat_密度2d()”中计算失败:带宽必须严格为正数

    在尝试使用 ggplot2 制作测试二维密度图时 我使用了代码片段 ggplot df aes x S1 x y S1 y geom point geom density 2d 我收到错误 计算失败stat density2d 带宽必须严格