分析建模窜觉,日常問題整理(二十四)
2019.4.10~2019.4.28
- 相關檢驗
# 相關系數(shù)
pd.DataFrame(pd.DataFrame([[1,1,0,0,0],[0,1,1,0,3]]).T.rename(columns = {0:'A',1:'B'})).corr()
- 正態(tài)檢驗
import scipy
import scipy.stats as scs
import scipy.stats as scs
def normality_tests(arr):
"""
Tests for normality distribution of given data set
:param arr: ndarray
object to generate statistics on
:return:
"""
print("Skew of data set %14.3f" % scs.skew(arr))
print("Skew test p-value %14.3f" % scs.skewtest(arr)[1])
print("Kurt of data set %14.3f" % scs.kurtosis(arr))
print("Kurt test p-value %14.3f" % scs.kurtosistest(arr)[1])
print("Norm test p-value %14.3f" % scs.normaltest(arr)[1])
normality_tests([-1,-0.5,-0.4,-0.3,-0.2,0,0.2,0.3,0.4,0.5,1])
# Skew of data set 0.001
# Skew test p-value 0.292
# Kurt of data set 0.001
# Kurt test p-value 0.625
# Norm test p-value 0.509
KS檢驗
scipy.stats.kstest (rvs, cdf, args = ( ), N = 20, alternative ='two-sided', mode ='approx')
Anderson 檢驗揩瞪,該方法是由 scipy.stats.kstest 改進而來的史飞,可以做正態(tài)分布尉间、指數(shù)分布锹引、Logistic 分布冶伞、Gumbel 分布等多種分布檢驗。默認參數(shù)為 norm恳蹲,即正態(tài)性檢驗虐块。
scipy.stats.anderson (x, dist ='norm' )
Shapiro-Wilk test檢驗
scipy.stats.shapiro(x)
- 卡方檢驗
目的:判別兩組數(shù)據(jù)是否有差別?比較理論頻數(shù)和實際頻數(shù)的吻合程度或者擬合優(yōu)度問題嘉蕾?比較實際數(shù)據(jù)和理論分布之間的差異有多大贺奠。
原假設
H0:兩組數(shù)據(jù)無差異(一般選擇有絕對優(yōu)勢出現(xiàn)的事件,如果發(fā)生的小概率事件就不得不拒絕掉原假設)
H1:兩組數(shù)據(jù)不是無差異
卡方統(tǒng)計量=荆针,在0假設成立的情況下服從自由度為k-1的卡方分布敞嗡。
表示理論分布出現(xiàn)的頻數(shù)或者值,
表示實際值航背。
from scipy.stats import chi2_contingency
kf = chi2_contingency(np.array([[1,2,1,1,2,1],[1,2,2,1,1,2]]))
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
表1:第X1個變量出現(xiàn)的實際值
Y | V1 | V2 | V3 | 總計 |
---|---|---|---|---|
0 | 4 | 7 | 6 | 17 |
1 | 1 | 3 | 6 | 10 |
總計 | 5 | 10 | 12 | 27 |
表2:第X1個變量出現(xiàn)的理論值
Y | V1 | V2 | V3 | 總計 |
---|---|---|---|---|
0 | 5*17/27=3.1 | 6.3 | 7.6 | 17 |
1 | 5*10/27=1.9 | 3.7 | 4.4 | 10 |
總計 | 5 | 10 | 12 | 27 |
卡方值 =
兩個表的數(shù)字差距越大,兩個表的獨立性越強約偏離均勻的分布棱貌,01在各組的分布越不均勻玖媚,粗分類結果越好(對y的區(qū)分效果越好)。
卡方檢驗和IV值都可以用來評價變量的作用婚脱。
from scipy.stats import chi2_contingency
kf = chi2_contingency(np.array([[4,7,6],[1,3,6]]))
# 這里需要算0兩類的變量分布
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
output:
chisq-statistic=1.6994, p-value=0.4275, df=2 expected_frep=[[ 3.14814815 6.2962963 7.55555556]
[ 1.85185185 3.7037037 4.44444444]]
- T檢驗
T檢驗今魔,亦稱student t檢驗(Student's t test)勺像,主要用于樣本含量較小(例如n < 30)错森,總體標準差未知的總體吟宦。T檢驗是用t分布理論來推論差異發(fā)生的概率,從而比較兩個平均數(shù)的差異是否顯著涩维。
單總體檢驗殃姓,t分布
雙總體檢驗,t分布
H0:
單總體瓦阐,樣本均值是否等于總體均值20蜗侈,結論:P<0.05,等于總體均值
from scipy import stats
import pandas as pd
dataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
pop_mean=20
t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
p_oneTail = p_twoTail/2
print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
output:t= -3.00164952589 p_twoTail= 0.0149164142489 p_oneTail = 0.00745820712445
H0:兩樣本均值無差異
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
# 檢驗兩樣本均值是否有顯著差異
# 首先睡蟋,檢驗方差是否相等
stats.levene(rvs1, rvs2)
# 如果p>0.05方差相等
stats.ttest_ind(rvs1,rvs2)
# 如果p<0.05方差不相等
stats.ttest_ind(rvs1,rvs2, equal_var = False)
- 卡方檢驗和T檢驗區(qū)別
T檢驗主要檢驗均值踏幻,卡方檢驗主要檢驗整體差異?
- jupyter進度條展示
from tqdm import tqdm_notebook,tnrange
for i in tqdm_notebook(range(0, new_loc.shape[0], 10),desc = 'lst loop'):
print(i)