1. 程式人生 > >檢驗某個變量是否服從正太分布

檢驗某個變量是否服從正太分布

ann 取數 圖片 top 排列 位數 adl imp readline

檢驗同一個熱點,同一個采樣點,同一個channel的csi值(500個)是否符合正太分布,或者符合其他什麽分布?

采用Q-Q圖。

參考資料:https://wenku.baidu.com/view/c661ebb365ce050876321319.html

用QQ圖檢驗一序列是否服從正太分布,序列為X=(x1,x2,…,xi,…xN),(N>0)

  1. 將原序列按從小到大的順序排列: x1 <= x2 <= … <= xi <= … <= xN
  2. 計算QQ序列:

樣本均值和標準差分別為avg = 1/n * sum(xi), std = np.sqrt(1/(N-1) * sum (np.square(xi-avg)))

分位數Qi = (xi – avg) / std, ti = (i-0.5)/N

數據序列

x1

xi

xN

Q

Q1 = (xi-avg)/std

Qi = (xi-avg)/std

QN = (xi-avg)/std

t

t1 = (1-0.5)/N

ti = (i-0.5)/N

tN=(N-0.5)/N

Q’

由t1查表得出

查表

查表

  3. 畫出Q-Q’圖,與y=kx+b比較,若基本與之吻合則原序列服從N(b,k)的正態分布,若不為直線,則不服從正態分布。

import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pylab 
import scipy.stats as stats
import statsmodels.api as sm

#讀取數據
num_sample = 500;
with open("data/clean_data/training_csi.csv", "rb") as fi:
    with open("data/clean_data/for_qq_plot.csv",wb) as fo:
        fo.write(fi.readline())
        
for i in range(num_sample): fo.write(fi.readline()); samples = pd.read_csv(data/clean_data/for_qq_plot.csv) csi540 = np.array(samples[csi540]) sm.qqplot(csi540, line=45) pylab.show()

技術分享圖片

由圖可以看出,散點近似和直線y=x+3重合,所以該變量近似服從正太分布,均值約為3,方差約為1

檢驗某個變量是否服從正太分布