第14周 : Anscombe's quartet

about Anscombe's quartet

1973年,統計學家F.J. Anscombe構造出了四組奇特的數據。它告訴人們,在分析數據之前,描繪數據所對應的圖像有多麼的重要。
這四組數據中,x值的平均數都是9.0,y值的平均數都是7.5;x值的方差都是10.0,y值的方差都是3.75;它們的相關度都是0.816,線性迴歸線都是y=3+0.5x。單從這些統計數字上看來,四組數據所反映出的實際情況非常相近,而事實上,這四組數據有着天壤之別。

把它們描繪在圖表中,你會發現這四組數據是四種完全不同的情況。第一組數據是大多人看到上述統計數字的第一反應,是最“正常”的一組數據;第二組數據所反映的事實上是一個精確的二次函數關係,只是在錯誤地應用了線性模型後,各項統計數字與第一組數據恰好都相同;第三組數據描述的是一個精確的線性關係,只是這裏面有一個異常值,它導致了上述各個統計數字,尤其是相關度值的偏差;第四組數據則是一個更極端的例子,其異常值導致了平均數、方差、相關度、線性迴歸線等所有統計數字全部發生偏差。

參考:http://www.matrix67.com/blog/archives/2308



question:

code:

import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm

sns.set_context("talk")
anscombe = sns.load_dataset("anscombe")
dataset = anscombe.groupby("dataset")
print("x, y 的均值")
means = dataset.mean()
print(means, '\n')
print("x, y 的方差")
var = dataset.var()
print(var, '\n')

strings = ['I', 'II', 'III', 'IV']
datas = []
datas.append(anscombe.query("dataset == 'I'"))
datas.append(anscombe.query("dataset == 'II'"))
datas.append(anscombe.query("dataset == 'III'"))
datas.append(anscombe.query("dataset == 'IV'"))
print("x, y 的相關係數")
for i in range(0,4):
    corr = datas[i]['x'].corr(datas[i]['y'])        #計算相關係數
    print(strings[i], corr)
print("\nx, y 的線性迴歸方程")
for i in range(0,4):
    x = datas[i]['x']
    y = datas[i]['y']
    x = sm.add_constant(x)                          #添加一個常數係數
    res = sm.OLS(y,x).fit()                         #根據最小二乘法得出線性迴歸方程
    params = res.params
    print(strings[i], '\n', params)

result:


queation:

code:

graph = sns.FacetGrid(anscombe, col="dataset")
graph.map(plt.scatter, 'x', 'y')                             #繪製散點圖
plt.show()
result:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章