當前位置:
首頁 > 最新 > K-S檢驗,皮爾遜相關係數,spearman相關係數總結

K-S檢驗,皮爾遜相關係數,spearman相關係數總結

K-S檢驗

Kolmogorov-smirnov是一個比較頻率分布f(x)與理論分布g(x)或者兩個觀測值分布的檢驗辦法

假設檢驗問題

H0:樣本的分布服從某個特定分布

H1:樣本的分布不服從某個特定分布

F(X):樣本的累計分布函數

F0(X)理論分布的分布函數

D=max|F(X)- F0(X)|

D>D(n,α)相比較

p>0.05接受H0,p

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,

76,80,81,75,77,72,81,72,84,86,80,68,77,87,

76,77,78,92,75,80,78]

df = pd.DataFrame(data, columns =["value"])

u = df["value"].mean()

std = df["value"].std()

print("樣本均值為:%.2f,樣本標準差為:%.2f" % (u,std))

print("------")

2計算相關的 指標

#統計個數並排序

s=df["value"].value_counts().sort_index()

df_s=pd.DataFrame({"血糖濃度":s.index,"次數":s.values})

df_s["累計次數"]=df_s["次數"].cumsum()

df_s["累計頻率"]=df_s["累計次數"]/len(data)

df_s["標準化取值"]=(df_s["血糖濃度"]-u)/std

df_s["理論分布"] =[0.0244,0.0968,0.2148,0.2643,0.3228,0.3859,0.5160,0.5832,0.7611,0.8531,0.8888,0.9803] # 通過查閱正太分布表

df_s["D"] = np.abs(df_s["累計頻率"] - df_s["理論分布"])

dmax = df_s["D"].max()

#這步結束之後,可以查表找到p介於0.2-0.4之間

#方法二:直接調用函數,求出相應的P值

from scipy import stats

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,

76,80,81,75,77,72,81,72,84,86,80,68,77,87,

76,77,78,92,75,80,78]

df = pd.DataFrame(data, columns =["value"])

u = df["value"].mean()

std = df["value"].std()

stats.kstest(df["value"],"norm",(u,std))

3畫圖

2 pearson correlation coeffcient 和 sperman秩相關係數

2.1pearson相關係數(注意:描述的是兩個樣本的線性相關性,服從正態分布的連續變數

實現過程

1 構造相關數據

# 創建三個數據:data1為0-100的隨機數並從小到大排列,data2為0-50的隨機數並從小到大排列,data3為0-500的隨機數並從大到小排列,

fig = plt.figure(figsize = (9,4))

ax1 = fig.add_subplot(1,2,1)

ax1.scatter(data1, data2)

plt.grid()

ax2 = fig.add_subplot(1,2,2)

ax2.scatter(data1, data3)

plt.grid()

#計算pearson相關係數

data = pd.DataFrame({"value1":data1.values,

"value2":data2.values})

data["(x-u1)*(y-u2)"] = (data["value1"] - u1) * (data["value2"] - u2)

data["(x-u1)**2"] = (data["value1"] - u1)**2

data["(y-u2)**2"] = (data["value2"] - u2)**2

r = data["(x-u1)*(y-u2)"].sum() / (np.sqrt(data["(x-u1)**2"].sum() * data["(y-u2)**2"].sum()))

print("Pearson相關係數為:%.4f" % r)

方法二:直接調用函數

2 spearman相關係數例子

data = pd.DataFrame({"智商":[106,86,100,101,99,103,97,113,112,110],

"每周看電視小時數":[7,0,27,50,28,29,20,12,6,17]})

data.sort_values("智商", inplace=True)

data["range1"] = np.arange(1,len(data)+1)

data.sort_values("每周看電視小時數", inplace=True)

data["range2"] = np.arange(1,len(data)+1)

data["d"] = data["range1"] - data["range2"]

data["d2"] = data["d"]**2

n = len(data)

rs = 1 - 6 * (data["d2"].sum()) / (n * (n**2 - 1))

print("spearman相關係數為:%.4f" % rs)

方法二

說明看電視和智商不存在特別大的線性相關關係

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 馬小白成長記 的精彩文章:

TAG:馬小白成長記 |