R:数据点与高斯函数的稳健拟合

2023-12-20

我需要进行一些稳健的数据拟合操作。

I have bunch of (x,y) data, that I want to fit to a Gaussian http://en.wikipedia.org/wiki/Gaussian_function (aka normal) function. The point is, I want to remove the ouliers. As one can see on the sample plot below, there is another distribution of data thats pollutting my data on the right, and I don't want to take it into account to do the fitting (i.e. to find \sigma, \mu and the overall scale parameter). sample data plot

R 似乎是适合这项工作的工具,我找到了一些软件包(robust http://cran.r-project.org/web/packages/robust/, 坚固的基础 http://cran.r-project.org/web/packages/robustbase/, MASS http://cran.r-project.org/web/packages/MASS/例如)与稳健拟合相关。

然而,他们假设用户已经对 R 有了很强的了解,这不是我的情况,并且文档仅作为一种参考手册提供,没有教程或等效内容。我的统计背景相当低,我尝试阅读与 R 拟合的参考资料 http://cran.r-project.org/doc/contrib/Ricci-distributions-en.pdf,但这并没有真正帮助(而且我什至不确定这是正确的方法)。 但我感觉这其实是一个很简单的操作。

我已经检查过这个相关问题 https://stackoverflow.com/questions/14511454/(以及链接的),但是它们将单个值向量作为输入,并且我有一个成对的向量,所以我不知道如何转置。

任何有关如何执行此操作的帮助将不胜感激。


对数据进行高斯曲线拟合,其原理是最小化拟合曲线与数据的平方和差,所以我们定义f我们的目标函数和运行optim on it:

fitG =
function(x,y,mu,sig,scale){

  f = function(p){
    d = p[3]*dnorm(x,mean=p[1],sd=p[2])
    sum((d-y)^2)
  }

  optim(c(mu,sig,scale),f)
 }

现在,将其扩展到两个高斯:

fit2G <- function(x,y,mu1,sig1,scale1,mu2,sig2,scale2,...){

  f = function(p){
    d = p[3]*dnorm(x,mean=p[1],sd=p[2]) + p[6]*dnorm(x,mean=p[4],sd=p[5])
    sum((d-y)^2)
  }
  optim(c(mu1,sig1,scale1,mu2,sig2,scale2),f,...)
}

使用第一次拟合的初始参数以及对第二个峰值的目测猜测进行拟合。需要增加最大迭代次数:

> fit2P = fit2G(data$V3,data$V6,6,.6,.02,8.3,0.10,.002,control=list(maxit=10000))
Warning messages:
1: In dnorm(x, mean = p[1], sd = p[2]) : NaNs produced
2: In dnorm(x, mean = p[4], sd = p[5]) : NaNs produced
3: In dnorm(x, mean = p[4], sd = p[5]) : NaNs produced
> fit2P
$par
[1] 6.035610393 0.653149616 0.023744876 8.317215066 0.107767881 0.002055287

这一切看起来是什么样的?

> plot(data$V3,data$V6)
> p = fit2P$par
> lines(data$V3,p[3]*dnorm(data$V3,p[1],p[2]))
> lines(data$V3,p[6]*dnorm(data$V3,p[4],p[5]),col=2)

但是,我对有关函数参数的统计推断持谨慎态度......

产生的警告消息可能是由于 sd 参数变为负值所致。您可以通过使用 L-BFGS-B 并设置下限来修复此问题并获得更快的收敛:

> fit2P = fit2G(data$V3,data$V6,6,.6,.02,8.3,0.10,.002,control=list(maxit=10000),method="L-BFGS-B",lower=c(0,0,0,0,0,0))
> fit2P
$par
[1] 6.03564202 0.65302676 0.02374196 8.31424025 0.11117534 0.00208724

正如所指出的,对初始值的敏感性始终是此类曲线拟合的问题。

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

R:数据点与高斯函数的稳健拟合 的相关文章

随机推荐

  • 使用 jFreeChart 在多个图形中绘制多个图形

    我正在尝试使用 jFreechart 生成两个数字 每个数字有 12 个图表 在 jFreeChart 中称为系列 然而 有些图表被简单地跳过了 我知道我在这里遇到同步问题 并尝试使用用户 trashgod 提供给我的方法here http
  • Python json.dumps() 输出缩小的json?

    有没有办法让python的json dumps
  • 如何在 Azure AD B2C 中停用和重新激活用户

    有什么方法可以停用并重新激活 Azure AD B2C 用户 我想实现切换 Azure AD 用户状态的功能 如果 停用并重新激活 是指阻止用户登录 目前 这仅适用于本地帐户 不适用于来自社交提供商的帐户 Facebook Google 等
  • 如何设置SWFUpload上传的文件夹?

    我在文档中没有看到如何使用 SWFUpload 设置上传的文件文件夹 有人能指出我正确的方向吗 如果有帮助的话我正在使用 PHP 5 您所做的就是调用 PHP 脚本 该脚本会处理文件上传 您可以打开调试 这将为您提供一个非常好的调试视图 了
  • gridview 中的分页

    我的网格视图
  • 动态缩略图/调整图像大小生成[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 动态调整图像大小与存储调整大小的图像 https stackoverflow com questions 2823600 php image resize on the fly vs stor
  • 未找到 glib.h 和 gtk.h

    大家好 我有一个程序 其中包括 gtk gtk h glib h 我使用过以下命令 sudo apt get install libgtk2 0 dev glib sudo apt get install glade 但我仍然收到 glib
  • 本机 xml 数据库中的唯一性插入

    我正在开发一个基于XML 的项目 我使用 Sedna 数据库来存储我的集合 其中包含 XML 文件及其 XSD 架构文件 我在这些方案中定义了主键 唯一键 但到目前为止我可以将重复值 通过 XQuery 更新插入命令 插入到主键字段中 为了
  • 内存泄漏和处置

    我可能不理解这个概念或者我做错了什么 我对 NET 中的内存管理有一些疑问 想象一下情况 Form1是大人窗体 作为 MDI 父级和一点FormChild 被绑定为子项 public partial class Form1 Form pub
  • 如何使用 @output 将布尔值从子级发送到父级

    嗨 有角的社区 我想使用 Output 触发一个事件来隐藏或打开 关闭包含其他组件的 div 这很简单 但我以前从未使用过 EventEmitter 所以我希望当调用 hideDem 时 它会根据来自 child ts 的其他属性隐藏或打开
  • 如何增加android中线性布局中元素之间的空间? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我使用了 Linearlayout 其中有 3 个 EditText 元素 现在我想增加 Edittext 元素之间的空间 填充 是否可以 基本上这是相对于你的边框而言的 如果你想在边框内的元素
  • 使用该 exe 的 VM 参数在 Maven 中创建一个 exe 文件

    我目前正在开发一个 Java 项目 该项目需要指定 java library path 的 VM 参数 当从 Eclipse 中运行我的程序时 没问题 我可以轻松指定我的 VM 参数 现在我想通过 Maven 构建我的项目 但还没有找到向该
  • 如何将二进制字符串写入文件 C#

    我有一个二进制数字符串 例如 temp 0101110011 我想将其另存为文件 该 Temp 有 10 个字符 如何将此字符串保存到 10 位长度的文件中 void Save Data string temp bool BoolArray
  • 使用 NSXMLParserDelegate 构建项目时出错

    TurbineXMLParser h import
  • VBA - 文件夹选择器 - 设置从哪里开始[重复]

    这个问题在这里已经有答案了 我有一个小型 Access VBA 应用程序 需要用户选择一个文件夹 我想知道是否有办法告诉 VBA 启动文件夹选择器的路径 即启动文件夹选择器C data forms 目前看来是从以前使用的目录开始的 还有一种
  • WebDriver / 将元素读入变量并重新使用它们

    我有一个大问题Webdriver 硒2 在我的测试代码中 我找到测试开始时的所有元素 并对它们执行一些操作 例如click 检查属性等 我的问题是我的页面刷新并重新加载我的元素 而 Webdriver 不知道再次识别这些元素 我知道我可以再
  • 即使调整窗口大小,也保持背景图像居中

    我有一个容器 div 另一个 div 居中 里面有背景图像 当我调整浏览器窗口大小时 我希望图像保持居中 即使浏览器窗口的宽度为smaller比图像的宽度 这是一些代码 CSS wrap width 100 height 357px bac
  • Git 推送在 TOTAL 上挂起

    Git 突然开始挂起PUSH命令 我 搜索了其他问题 但解决方案不起作用 我使用的是 ubuntu 12 04 Counting objects 18 done Delta compression using up to 2 threads
  • 我可以将 Snapchat SDK (SnapKit) 与 SwiftUI 结合使用吗?

    我正在尝试整合Snapkit https docs snapchat com 使用 iOS 应用程序 但我想使用 SwiftUI 而不是 UIKit 我已经使用 Snapkit 完成了所需的设置 现在我正在尝试让 Snapchat 登录按钮
  • R:数据点与高斯函数的稳健拟合

    我需要进行一些稳健的数据拟合操作 I have bunch of x y data that I want to fit to a Gaussian http en wikipedia org wiki Gaussian function