是“3 + 0.5 * x”概率论中的真实拟合方法
is "3 + 0.5 * x" a real fit approach in probability theory
我正在通过这个 video 了解 Anscombe 的四重奏。
我正在尝试用 Python 画 Anscombe 的四重奏。
matplotlib doc 提供了一种方法。
def fit(x):
return 3 + 0.5 * x
这个叫fit的函数,是概率论中真正的拟合方法吗?
四重奏的要点是显示产生相同统计数据的非常不同的分布,因此是最佳线性拟合。要验证这一点:
>>> import pandas as pd
>>> from scipy.optimize import curve_fit
>>> def tofit(x,a,b): return a*x+b
>>> df = pd.read_csv('bla.dat',sep=' ')
>>> df
x0 y0 x1 y1 x2 y2 x3 y3
0 10.0 8.04 10.0 9.14 10.0 7.46 8.0 6.58
1 8.0 6.95 8.0 8.14 8.0 6.77 8.0 5.76
2 13.0 7.58 13.0 8.74 13.0 12.74 8.0 7.71
3 9.0 8.81 9.0 8.77 9.0 7.11 8.0 8.84
4 11.0 8.33 11.0 9.26 11.0 7.81 8.0 8.47
5 14.0 9.96 14.0 8.10 14.0 8.84 8.0 7.04
6 6.0 7.24 6.0 6.13 6.0 6.08 8.0 5.25
7 4.0 4.26 4.0 3.10 4.0 5.39 19.0 12.50
8 12.0 10.84 12.0 9.13 12.0 8.15 8.0 5.56
9 7.0 4.82 7.0 7.26 7.0 6.42 8.0 7.91
10 5.0 5.68 5.0 4.74 5.0 5.73 8.0 6.89
>>> for i in range(4): curve_fit(tofit,df['x%d'%i],df['y%d'%i])[0]
...
array([0.50009091, 3.00009091])
array([0.5 , 3.00090909])
array([0.49972727, 3.00245453])
array([0.49990909, 3.00172727])
四个不同的数组是为每个数据集拟合的斜率和截距。所有这些都与您在教程中看到的几乎相同,0.5x+3
。
如您所见,所有拟合产生几乎完全相同的函数,但您可以从它们的图中看出它们是完全不同的,尽管拟合本身从一开始就很糟糕——这是对普遍存在的盲目全局拟合的警告在我们这个时代。最好直观地理解有关分布的一些东西,而不是仅仅拟合和说 - 哦,看,我所有的集合都是一样的。
我正在通过这个 video 了解 Anscombe 的四重奏。
我正在尝试用 Python 画 Anscombe 的四重奏。
matplotlib doc 提供了一种方法。
def fit(x):
return 3 + 0.5 * x
这个叫fit的函数,是概率论中真正的拟合方法吗?
四重奏的要点是显示产生相同统计数据的非常不同的分布,因此是最佳线性拟合。要验证这一点:
>>> import pandas as pd
>>> from scipy.optimize import curve_fit
>>> def tofit(x,a,b): return a*x+b
>>> df = pd.read_csv('bla.dat',sep=' ')
>>> df
x0 y0 x1 y1 x2 y2 x3 y3
0 10.0 8.04 10.0 9.14 10.0 7.46 8.0 6.58
1 8.0 6.95 8.0 8.14 8.0 6.77 8.0 5.76
2 13.0 7.58 13.0 8.74 13.0 12.74 8.0 7.71
3 9.0 8.81 9.0 8.77 9.0 7.11 8.0 8.84
4 11.0 8.33 11.0 9.26 11.0 7.81 8.0 8.47
5 14.0 9.96 14.0 8.10 14.0 8.84 8.0 7.04
6 6.0 7.24 6.0 6.13 6.0 6.08 8.0 5.25
7 4.0 4.26 4.0 3.10 4.0 5.39 19.0 12.50
8 12.0 10.84 12.0 9.13 12.0 8.15 8.0 5.56
9 7.0 4.82 7.0 7.26 7.0 6.42 8.0 7.91
10 5.0 5.68 5.0 4.74 5.0 5.73 8.0 6.89
>>> for i in range(4): curve_fit(tofit,df['x%d'%i],df['y%d'%i])[0]
...
array([0.50009091, 3.00009091])
array([0.5 , 3.00090909])
array([0.49972727, 3.00245453])
array([0.49990909, 3.00172727])
四个不同的数组是为每个数据集拟合的斜率和截距。所有这些都与您在教程中看到的几乎相同,0.5x+3
。
如您所见,所有拟合产生几乎完全相同的函数,但您可以从它们的图中看出它们是完全不同的,尽管拟合本身从一开始就很糟糕——这是对普遍存在的盲目全局拟合的警告在我们这个时代。最好直观地理解有关分布的一些东西,而不是仅仅拟合和说 - 哦,看,我所有的集合都是一样的。