我正在为一些有限大小的物理系统进行计算机模拟,之后我正在对无穷大进行外推(热力学极限).一些理论认为数据应该随着系统规模线性扩展,所以我做的是线性回归.
我的数据有噪音,但对于每个数据点,我可以估算出错误.因此,例如数据点看起来像:
x_list = [0.3333333333333333, 0.2886751345948129, 0.25, 0.23570226039551587, 0.22360679774997896, 0.20412414523193154, 0.2, 0.16666666666666666]
y_list = [0.13250359351851854, 0.12098339583333334, 0.12398501145833334, 0.09152715, 0.11167239583333334, 0.10876248333333333, 0.09814170444444444, 0.08560799305555555]
y_err = [0.003306749165349316, 0.003818446389148108, 0.0056036878203831785, 0.0036635292592592595, 0.0037034897788415424, 0.007576672222222223, 0.002981084130692832, 0.0034913019065973983]
Run Code Online (Sandbox Code Playgroud)
假设我试图在Python中执行此操作.
我知道的第一种方式是:
m, c, r_value, p_value, std_err = scipy.stats.linregress(x_list, y_list)
Run Code Online (Sandbox Code Playgroud)
我理解这给了我结果的错误栏,但这没有考虑初始数据的错误栏.
我知道的第二种方式是:
m, c = numpy.polynomial.polynomial.polyfit(x_list, y_list, 1, w = [1.0 / ty for ty in y_err], full=False)
Run Code Online (Sandbox Code Playgroud)这里我们使用每个点的误差条的倒数作为在最小二乘近似中使用的权重.因此,如果一个点不是那么可靠,那么它不会对结果造成太大影响,这是合理的.
但我无法弄清楚如何获得结合这两种方法的东西.
我真正想要的是第二种方法的作用,意思是当每个点都影响不同权重的结果时使用回归.但与此同时,我想知道我的结果有多准确,这意味着,我想知道结果系数的误码是什么.
我怎样才能做到这一点?
我有时间序列,并且我将一些用户定义的函数应用于时间序列中的每个W元素.
现在我只是使用for循环,大小为W的幻灯片窗口在每次迭代时将我的函数应用于窗口中的元素.
我正在使用Matlab,并且使用"for循环"效率很低,所以我很乐意对此操作进行矢量化.
作为解决方案,我看到将长度为N的信号转换为具有大小(N-1,W)的矩阵,其中每行是不同窗口中的时间序列并将函数应用于该矩阵.
所以,我的问题是:
例:
假设我的时间序列是:
T = [1, 5, 6, 8, 10, 14, 22]
W = 3
X = 1
Run Code Online (Sandbox Code Playgroud)
=>我很想得到
[[1, 5, 6],
[5, 6, 8],
[6, 8, 10],
[8, 10, 14],
[10, 14, 22]]
Run Code Online (Sandbox Code Playgroud)
如果
W = 3
X = 2
Run Code Online (Sandbox Code Playgroud)
=>我很想得到
[[1, 5, 6],
[6, 8, 10],
[10, 14, 22]]
Run Code Online (Sandbox Code Playgroud)