使用numpy进行多项式拟合,针对具有不同统计显著性水平的数据。

4

Polyfit是一个很好的工具,可以将一组点拟合成一条直线。但是我的数据具有不同程度的统计显著性。

例如,对于一个点(x1,y2),我可能只有10个观测值,而对于另一个点(x2,y2),我可能有10,000个观测值。通常我至少有10个点,并且在使用polyfit时我想根据统计显著性对每个点进行加权。是否有任何方法(或类似的函数)允许这样做?

3个回答

3
一种可能的方法是在statsmodels中使用加权最小二乘法来完成。大致如下:y为响应变量或内生变量(endog),x为您的一维自变量,w为权重数组,权重越高,对该观察值的关注度就越高。通过获取多项式矩阵并拟合来实现。
import numpy as np
import statsmodels.api as sm
exog = np.vander(x, degree+1)
result = sm.WLS(y, exog, weight=w).fit()

参数在result.params中。拟合值在result.fittedvalues中。

预测在不同版本间有所改变。使用0.4版本时,您可以使用:

result.predict(np.vander(x_new, degree+1))

2
更简单明了:
import numpy as np
result = np.polynomial.polynomial.polyfit(x,y,deg,w=weight of each observation)

1

我不了解numpy,但你可以编写自己的polyfit函数。Polyfit只是解线性方程的过程。

http://en.wikipedia.org/wiki/Polynomial_regression#Matrix_form_and_calculation_of_estimates
(在你的情况下,epsilon可能为0)

你可以看到,你所要做的就是将y中的每一行和x中的每一行乘以你的系数。
这应该只需要大约10行代码(我记得我自己重新发明最小二乘方程花了4个小时,但在MATLAB中只需要2行代码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接