- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在尝试使用 ggplot2 制作测试二维密度图时,我使用了代码片段:
ggplot(df, aes(x = S1.x, y = S1.y)) + geom_point() + geom_density_2d()
我收到错误:“stat_密度2d()
计算失败:带宽必须严格为正”
我的数据框如下所示:
> 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
此外,var(df[,"S1.x"]) > 0
和 var(df[,"S1.y"]) > 0
。
Fig 1 - 2d density plot with error
但是,我通过运行得到了没有错误的密度图:
ggplot(df, aes(x = S2.x, y = S2.y)) + geom_point() + geom_density_2d()
Fig 2 - density plot without error
如何解决图 1 中的错误?
最佳答案
所以真正的问题是 S1.x
和 S1.y
值在其列中只有一个非零值。事实证明,geom_密度_2d
无法真正仅用一两个值来估计密度。但请继续阅读...
这个问题之前已经被问过,答案通常是您的数据列需要有非零方差。 但是你确实有非零方差,那么为什么它不起作用呢?
geom_密度_2d
的内部结构,我们发现它使用 MASS::kde2d
包函数来计算分布。kde2d
,我们发现它使用 MASS::bandwidth.nrd(df$x)
来估计带宽。bandwidth.nrd
的帮助(其中包含代码),我们发现它使用了一个经验法则,获取分布的分位数
,并减去第一个分位数的第二个分位数以获得带宽估计。bandwidth.nrd
估计的带宽对原始数据运行 MASS::kde2d
会产生相同的错误: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))Error in MASS::kde2d(df$s1x, df$s1y, h = h, n = n, lims = c(0, 1, 0, 1)) : bandwidths must be strictly positive
因此,使用 geom_密度_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
然后我得到这个图而不是你的错误。
您可以让 0.1
值接近零,最终它将无法再计算分布,并且您将再次收到错误。
处理这种情况的一种通用方法是向数据中添加非常少量的噪声,这有点模拟这样一个事实:任何基于连续分布的实际测量的有意义的计算都应该不受那少量噪声的影响。噪音。
希望有帮助。
关于r - 在 R : Computation failed in `stat_density2d()` : bandwidths must be strictly positive 中使用 geom_密度_2d() 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53075331/
“Fail Early”是什么意思,在什么情况下这种方法最有用,你什么时候会避免这种方法? 最佳答案 本质上,快速失败 (又名 尽早失败 )是对您的软件进行编码,使得 当出现问题时,软件会尽快并尽可能
/* * 115200. Connect GPIO 0 of your ESP8266 to VCC and reset the board */ #include #include #inc
安装并注册 gitlab-runner 后,当我运行时 gitlab-runner start我收到此错误消息。这是什么原因? Runtime platform
我一直在尝试Windows Server 2016 TP5上的Windows容器。突然我在运行带有端口映射选项-p 80:80的容器时开始出错 c:\>docker run -it -p 80:80
我一直在关注 Hyperledger Fabric Multi-Org setup 的教程,我能够成功地做到这一点。现在我想根据我想要的组织名称对其进行自定义,并且在尝试连接网络时遇到以下错误。希望有
所以我不知道为什么这个测试失败了。当我运行 repl 中的语句时,一切似乎都正常工作,但 fiveam 测试失败。 以下要点中有一个测试用例:https://gist.github.com/Puerc
我安装了 Android Studio 1.2.1.1、Gradle 版本 2.2.1 和 Android 插件版本 1.2.3。我试图创建一个简单的 hello world 项目,它给了我一个构建失
我正在尝试设置一个简单的 WebTestCase,它使用 Symfony 4(和 "phpunit/phpunit": "^6.5")。但是,测试失败: Failed to start the ses
我已经使用 git clone 在本地克隆了一个包含 Vue 项目的 git 存储库. 然后我跑了npm install安装依赖项并获得 node_modules文件夹。 正在运行 npm run s
我有:http://windows.github.com/ 我当前的项目有大约 20k 个文件,大约 150MB(并且不说它有多慢而且我现在什么也做不了)它甚至不允许我提交!我收到此错误:提交失败:无
我正在使用 RxAndroidBle 库开发一个应用程序,该库大约每 30 秒定期执行 BLE 扫描,每分钟左右执行一些 BLE 操作。几个小时后,通常在 5 到 24 小时之间,扫描停止工作。每次应
每次我尝试使用 Pycharm 推送 GitHub 中的存储库时,它都会失败。 Push failed: fatal: Authentication failed for 'https://githu
此外,管理内置“管理结构”(如标题中的结构)的 Resque 的最佳实践是什么?我应该用 jedis.del(String key) 或类似的东西清除它们吗? 最佳答案 resque:failed 是
想象这样一种场景,我们想要在对“foo”和“bar”的并发请求成功完成后做一些事情,或者如果其中一个或两个失败则报告错误: $.when($.getJSON('foo'), $.getJSON('ba
这就是我所做的: 我使用的是 Windows XP SP3 我已经安装了 Python 2.7.1。 我下载了instantclient-basic-nt-11.2.0.3.0.zip,解压后放入C:
我已经设置了一个 vfsstream block 设备,我正在尝试对其调用 file_get_contents()。然而,对 vfsStreamWrapper::stream_open 的调用失败,因
我正在尝试在我的 React 应用程序中使用文件上传功能,但遇到了问题。当我尝试上传第一张图片时,它工作得很好。文件资源管理器对话框关闭并显示我的图片。用我的文件资源管理器中的另一张图片覆盖图片也可以
目标:将我的本地 mongodb 数据迁移到 mongodb atlas 集群。 尝试: 1.将本地数据导出为json。 2.导入json到集群。 操作系统:Linuxmint 19.1 Cinnam
我一直在从事一个需要在服务器(托管在 GCE 上)和多个客户端之间进行一些网络连接的项目。我创建了一个 Compute Engine 实例来运行 Python 脚本,如以下视频所示:https://w
我正在尝试使用 sqlx crate 和 Postgres 数据库连接到 Rust 中的数据库。 main.rs: use dotenv; use sqlx::Pool; use sqlx::PgPo
我是一名优秀的程序员,十分优秀!