在Python中线性拟合,在x和y坐标中具有不确定性[关闭] -- python 领域 和 curve-fitting 领域 和 linear-equation 领域 相关 的问题

Linear fitting in python with uncertainty in both x and y coordinates [closed]


9
vote

问题

中文
关闭。这个问题不符合堆栈溢出指南。它目前不接受答案。

想要改进这个问题?更新问题,所以它是关于堆栈溢出的主题。

closed 1年前

改善这个问题

嗨,我想问我的python用户如何执行它们的线性拟合。

我一直在搜索最后两周的方法/图书馆来执行这项任务,我想分享我的经验:

如果要基于最小二乘法执行线性拟合,则您有许多选项。例如,您可以在Numpy和Scipy中找到类。我自己已经选择了Linfit呈现的那个(遵循IDL中的LINFIT函数的设计):

http://nbviewer.ipython.org/github// djpine / linfit / blob / master / linfit.ipynb

此方法假定您正在介绍Y轴坐标中的SIGMAS以适合您的数据。

但是,如果您已经量化了x和y轴中的不确定性,则这些选项都没有那么多。 (在主要Python科学图书馆中没有IDL"Fitexy" 等价物)。到目前为止,我只发现了"kmpfit" 库来执行此任务。幸运的是,它有一个非常完整的网站,描述了其所有功能:

https://github.com/josephmeiring/kmpfit http://www.astro.rug.nl/software/kapteyn/kmpfittorial。 html#

如果有人知道额外的方法,我也很乐意了解它们。

在任何情况下,我希望这有帮助。

英文原文

Hi I would like to ask my fellow python users how they perform their linear fitting.

I have been searching for the last two weeks on methods/libraries to perform this task and I would like to share my experience:

If you want to perform a linear fitting based on the least-squares method you have many options. For example you can find classes in both numpy and scipy. Myself I have opted by the one presented by linfit (which follows the design of the linfit function in IDL):

http://nbviewer.ipython.org/github/djpine/linfit/blob/master/linfit.ipynb

This method assumes you are introducing the sigmas in your y-axis coordinates to fit your data.

However, if you have quantified the uncertainty in both the x and y axes there aren't so many options. (There is not IDL "Fitexy" equivalent in the main python scientific libraries). So far I have found only the "kmpfit" library to perform this task. Fortunately, it has a very complete website describing all its functionality:

https://github.com/josephmeiring/kmpfit http://www.astro.rug.nl/software/kapteyn/kmpfittutorial.html#

If anyone knows additional approaches I would love to know them as well.

In any case I hope this helps.

        

回答列表

21
 
vote
vote
最佳答案
 

正交距离回归 scipy允许您进行非线性使用 x y

如下所示的

是一个简单的示例,基于SCIPY页面上给出的示例。它试图适合某些随机数据的二次函数。

  import numpy as np import matplotlib.pyplot as plt from scipy.odr import *  import random  # Initiate some data, giving some randomness using random.random(). x = np.array([0, 1, 2, 3, 4, 5]) y = np.array([i**2 + random.random() for i in x])  x_err = np.array([random.random() for i in x]) y_err = np.array([random.random() for i in x])  # Define a function (quadratic in our case) to fit the data with. def quad_func(p, x):      m, c = p      return m*x**2 + c  # Create a model for fitting. quad_model = Model(quad_func)  # Create a RealData object using our initiated data from above. data = RealData(x, y, sx=x_err, sy=y_err)  # Set up ODR with the model and data. odr = ODR(data, quad_model, beta0=[0., 1.])  # Run the regression. out = odr.run()  # Use the in-built pprint method to give us results. out.pprint() '''Beta: [ 1.01781493  0.48498006] Beta Std Error: [ 0.00390799  0.03660941] Beta Covariance: [[ 0.00241322 -0.01420883]  [-0.01420883  0.21177597]] Residual Variance: 0.00632861634898189 Inverse Condition #: 0.4195196193536024 Reason(s) for Halting:   Sum of squares convergence'''  x_fit = np.linspace(x[0], x[-1], 1000) y_fit = quad_func(out.beta, x_fit)  plt.errorbar(x, y, xerr=x_err, yerr=y_err, linestyle='None', marker='x') plt.plot(x_fit, y_fit)  plt.show()   

示例输出显示数据并适合。

 

Orthogonal distance regression in Scipy allows you to do non-linear fitting using errors in both x and y.

Shown below is a simple example based on the example given on the scipy page. It attempts to fit a quadratic function to some randomised data.

import numpy as np import matplotlib.pyplot as plt from scipy.odr import *  import random  # Initiate some data, giving some randomness using random.random(). x = np.array([0, 1, 2, 3, 4, 5]) y = np.array([i**2 + random.random() for i in x])  x_err = np.array([random.random() for i in x]) y_err = np.array([random.random() for i in x])  # Define a function (quadratic in our case) to fit the data with. def quad_func(p, x):      m, c = p      return m*x**2 + c  # Create a model for fitting. quad_model = Model(quad_func)  # Create a RealData object using our initiated data from above. data = RealData(x, y, sx=x_err, sy=y_err)  # Set up ODR with the model and data. odr = ODR(data, quad_model, beta0=[0., 1.])  # Run the regression. out = odr.run()  # Use the in-built pprint method to give us results. out.pprint() '''Beta: [ 1.01781493  0.48498006] Beta Std Error: [ 0.00390799  0.03660941] Beta Covariance: [[ 0.00241322 -0.01420883]  [-0.01420883  0.21177597]] Residual Variance: 0.00632861634898189 Inverse Condition #: 0.4195196193536024 Reason(s) for Halting:   Sum of squares convergence'''  x_fit = np.linspace(x[0], x[-1], 1000) y_fit = quad_func(out.beta, x_fit)  plt.errorbar(x, y, xerr=x_err, yerr=y_err, linestyle='None', marker='x') plt.plot(x_fit, y_fit)  plt.show() 

Example output showing the data and fit.

 
 
   
   
7
 
vote

您可以使用与最大特征值相关联的协方差矩阵的特征向量,以执行线性拟合。

  $time = date("Y-m-d", $timestamp/1000); echo $time; // output: 2015-03-31 0  

输入图像描述

 

You can use eigenvector of covariance matrix associated with the largest eigenvalue to perform linear fitting.

import numpy as np import matplotlib.pyplot as plt  x = np.arange(6, dtype=float) y = 3*x + 2 x += np.random.randn(6)/10 y += np.random.randn(6)/10  xm = x.mean() ym = y.mean()  C = np.cov([x-xm,y-ym]) evals,evecs = np.linalg.eig(C)  a = evecs[1,evals.argmax()]/evecs[0,evals.argmax()] b = ym-a*xm  xx=np.linspace(0,5,100) yy=a*xx+b  plt.plot(x,y,'ro',xx,yy) plt.show() 

enter image description here

 
 
 
 

相关问题

0  从HTML元素下载图像  ( Download image from html element ) 
我需要下载包含图像的SRC文件。我们可以在下一个选项卡上复制源并粘贴它,以便我们可以下载图像。但是我需要下载图像递归i.e 1000图像。此外,我正在使用的网站包含CAPTCHA的登录。是否有任何方法可以通过dev控制台或任何可能的方式 ...

0  使用Pandas将对象(数值)转换为DateTime  ( Convert object numeric value to datetime using pandas ) 
我的数据具有时间表,如下所示,如何将其转换为使用Pandas 的日期和时间 ...

0  使用命令buildozer android部署运行,但每次我收到以下错误  ( Using command buildozer android deploy run but every time i am getting the foll ) 
我一直在遵循YouTube关于制作Android应用程序的教程。由Youtuber制作的应用程序正常工作。但是,当我对应用程序进行了一些修改时,它在我的电脑上完美运行,但是当谈到在Android设备II上部署应用程序时,需要编写Buildozer命令 buildozer android deploy run ,每件事...

0  使用多处理嵌套并行进程  ( Nesting parallel processes using multiprocessing ) 
是否有一种方法在已经并行化的函数中并行运行函数?我知道使用multiprocessing.pool()这是不可能作为守护进程无法创建子进程。我相当新的并行计算,并努力找到解决方法。 我目前有几千个计算,需要使用其他一些商业上可用的量子机械码I接口并行运行。每个计算,有三个后续计算,需要在父计算的正常终止时并行执行,如...

0  KIVY - 如何将滚动视图拖放到另一个布局的项目?  ( Kivy how to drag and drop items from scrollview to another layout ) 
我试图拖动排列在GridLayout(确实在滚动视图内)的一些图像到外布局。 要拖动的图像具有其 on_touch_down 事件定义,当单击映像时,父父级将从 WidgetMenu 更改为 MainLayout 所以它可以是拖动在这些小部件之间。当前问题是当我触摸图像时,拖船丢失了。 完整代码: import...

1  根据条件平等查找DataFrame中的匹配对或链条  ( Find matching pairs or chains of persons in dataframe based on equality of cond ) 
我是Python的初学者 - 首先我想为我相当长的问题而道歉,我写的可能非常丑陋的程序来解决我的"问题" 。 问题如下:想象一下房屋的交换。人们可以互相交换他们的房子。 1人从"A" 想要去"B" ,从"B" 的人2想要去"A" 。然后实现了匹配或易货物,并且两者都不再可用于进一步匹配。此外,应涵盖案例,该人1希望从...

5  Python中的群集计算快速JSON序列化(和与泡块的比较)?  ( Fast json serialization and comparison with pickle for cluster computing in py ) 
我有一组数据点,每个数据点由字典描述。每个数据点的处理是独立的,我将每个数据作为单独作业提交给群集。每个数据点都有一个唯一的名称,我的群集提交包装器只需调用脚本,该脚本采用数据点的名称和描述所有数据点的文件。然后,该脚本从文件中访问数据点并执行计算。 由于每个作业必须加载所有点的集合,只能检索要运行的点,我想通过序列...

0  Boketh Plot隐藏HTML网站并仅在Jupyter中显示输出?  ( Boketh plot hide html site and show output only in jupyter ) 
使用散景包,我创建了一个图形可视化,并使用 WaitForMultipleObjects(...)2 输出显示在jupyter中,但也同时使用输出打开浏览器中的新选项卡。我只想将它绘制在Jupyter单元格中,而不将绘图打开作为新的HTML文件。这是不可分割的吗? WaitForMultipleObjects(....

1  为什么PIP显示包未安装到当前公共区域环境的网站包装?  ( Why does pip show packages which were not installed to the site packages of the ) 
我有Anaconda(带有Python 2版本的公共4.5.11),我始终使用PIP在我的环境中安装包(我不知道这是早些时候的次优)。然而,一些包装,例如,模拟,意外地在: 位置:$ HOME / .local / lib / python3.6 / site-packages (基于Pip Show Mock) ...

0  Python - 使用pyinstaller创建的exe文件在提供错误时继续崩溃  ( Python created exe file using pyinstaller keeps on crashing with error provide ) 
我正在将HL7apy模块导入脚本,看起来它正在寻找一些文件,但不确定如何获取所有这些文件。我正在附加我的代码,它是在.ipynb中,但使用ipython nbconvert转换为.py脚本。 covid.ipynb然后ran ran ran the命令pyinstaller - 所有。 covid.py。然而,当我...

1  如何用两组重新表达URL?  ( How to regex url with two groups ) 
我收到这个网址: private void playSound(String location) { try { Uri mp3 = Uri.parse("android.resource://" + getPackageName() + "/raw/" + l...

0  int函数及其参数  ( The int function and its parameters ) 
我正在研究这个系列问题。 我不了解问题11,使用 int() 的方式。我理解,将 x 直接转换为 int 导致一些零的丢失,所以这样做是不可能的,但我不理解什么 intp = int(p,2) 假设要做。打印出 intp 我得到以下值 4,3,10,9 。如何与 0100,0011,1010,1001 相...

0  在Django管理员内联的Autofill FookeKey  ( Autofill foreignkey in django admin inline ) 
我有 Employee 内联显示 Company 。 Employee 属于 Company 和一个公司特定的 Department 。 我必须自动填充当前公司到新的部门表格。 #models.py class Company(models.Model): name = models.CharF...

10  在熊猫列表中切割多个列,按名称列表  ( Slicing multiple ranges of columns in pandas by list of names ) 
我正在尝试用两种不同的方法选择熊猫DataFrame中的多列: 1)通过列数,例如,列1-3和列6。 和 2)通过列名列表,例如: years = list(range(2000,2017)) months = list(range(1,13)) years_month = list(["A", "B", "...

1  为Mac创建Python应用程序  ( Create python app for mac ) 
我已经建立了一个python命令提示程序,我想导出,以便在点击一个图标时,它将自动运行,就像应用程序一样,但我从未见过一个在终端中运行的应用程序。我应该尝试制作一个应用程序,如果是这样,这是怎么做的? (特别是Mac) ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.