Hướng dẫn normality test python - python kiểm tra bình thường


Nhiều thử nghiệm thống kê đưa ra giả định rằng các bộ dữ liệu thường được phân phối.

Có bốn cách phổ biến để kiểm tra giả định này trong Python:

1. (Phương pháp trực quan) Tạo biểu đồ.

  • Nếu biểu đồ có hình chuông gần như, thì dữ liệu được giả định là được phân phối bình thường.

2. (Phương pháp trực quan) Tạo biểu đồ Q-Q.

  • Nếu các điểm trong biểu đồ gần như rơi dọc theo một đường chéo thẳng, thì dữ liệu được giả định là được phân phối bình thường.

3. (Kiểm tra thống kê chính thức) Thực hiện thử nghiệm Shapiro-Wilk.

  • Nếu giá trị p của thử nghiệm lớn hơn α = 0,05, thì dữ liệu được giả định là được phân phối bình thường.

4. (Thử nghiệm thống kê chính thức) Thực hiện thử nghiệm Kolmogorov-Smirnov.

  • Nếu giá trị p của thử nghiệm lớn hơn α = 0,05, thì dữ liệu được giả định là được phân phối bình thường.

4. (Thử nghiệm thống kê chính thức) Thực hiện thử nghiệm Kolmogorov-Smirnov.

Các ví dụ sau đây cho thấy cách sử dụng từng phương pháp này trong thực tế.

Phương pháp 1: Tạo biểu đồ

import math
import numpy as np
from scipy.stats import lognorm
import matplotlib.pyplot as plt

#make this example reproducible
np.random.seed(1)

#generate dataset that contains 1000 log-normal distributed values
lognorm_dataset = lognorm.rvs(s=.5, scale=math.exp(1), size=1000)

#create histogram to visualize values in dataset
plt.hist(lognorm_dataset, edgecolor='black', bins=20)

Hướng dẫn normality test python - python kiểm tra bình thường

Mã sau đây cho thấy cách tạo biểu đồ cho bộ dữ liệu theo phân phối log-bình thường:

Chỉ cần nhìn vào biểu đồ này, chúng ta có thể nói bộ dữ liệu không thể hiện một hình chuông hình chuông và thường không được phân phối.

Phương pháp 2: Tạo biểu đồ Q-Q

import math
import numpy as np
from scipy.stats import lognorm
import statsmodels.api as sm
import matplotlib.pyplot as plt

#make this example reproducible
np.random.seed(1)

#generate dataset that contains 1000 log-normal distributed values
lognorm_dataset = lognorm.rvs(s=.5, scale=math.exp(1), size=1000)

#create Q-Q plot with 45-degree line added to plot
fig = sm.qqplot(lognorm_dataset, line='45')

plt.show()

Hướng dẫn normality test python - python kiểm tra bình thường

Mã sau đây cho thấy cách tạo biểu đồ Q-Q cho bộ dữ liệu theo phân phối log-bình thường:

Nếu các điểm trên lô rơi xuống một đường chéo thẳng, thì chúng ta thường giả sử một bộ dữ liệu thường được phân phối.

Tuy nhiên, các điểm trên cốt truyện này rõ ràng don don rơi dọc theo đường màu đỏ, vì vậy chúng tôi sẽ không cho rằng bộ dữ liệu này thường được phân phối.

Điều này có ý nghĩa khi xem xét chúng tôi đã tạo dữ liệu bằng hàm phân phối thông thường.

Phương pháp 3: Thực hiện kiểm tra Shapiro-Wilk

import math
import numpy as np
from scipy.stats import shapiro 
from scipy.stats import lognorm

#make this example reproducible
np.random.seed(1)

#generate dataset that contains 1000 log-normal distributed values
lognorm_dataset = lognorm.rvs(s=.5, scale=math.exp(1), size=1000)

#perform Shapiro-Wilk test for normality
shapiro(lognorm_dataset)

ShapiroResult(statistic=0.8573324680328369, pvalue=3.880663073872444e-29)

Mã sau đây cho thấy cách thực hiện một bộ dữ liệu Shapiro cho một bộ dữ liệu theo phân phối thông thường log-thông thường:0.857 and the corresponding p-value is 3.88e-29 (extremely close to zero).

Từ đầu ra, chúng ta có thể thấy rằng thống kê kiểm tra là & nbsp; 0,857 và giá trị p tương ứng là & nbsp; 3.88e-29 & nbsp; (cực kỳ gần với 0).

Vì giá trị p nhỏ hơn 0,05, chúng tôi bác bỏ giả thuyết khống về thử nghiệm Shapiro-Wilk.

Điều này có nghĩa là chúng tôi có đủ bằng chứng để nói rằng dữ liệu mẫu không đến từ phân phối bình thường.

Phương pháp 4: Thực hiện thử nghiệm Kolmogorov-Smirnov

import math
import numpy as np
from scipy.stats import kstest
from scipy.stats import lognorm

#make this example reproducible
np.random.seed(1)

#generate dataset that contains 1000 log-normal distributed values
lognorm_dataset = lognorm.rvs(s=.5, scale=math.exp(1), size=1000)

#perform Kolmogorov-Smirnov test for normality
kstest(lognorm_dataset, 'norm')

KstestResult(statistic=0.84125708308077, pvalue=0.0)

Mã sau đây cho thấy cách thực hiện thử nghiệm Kolmogorov-Smirnov cho bộ dữ liệu theo phân phối thông thường log-bình thường:0.841 and the corresponding p-value is 0.0.

Từ đầu ra, chúng ta có thể thấy rằng thống kê kiểm tra là & nbsp; 0,841 và giá trị p tương ứng là 0,0.

Vì giá trị p nhỏ hơn 0,05, chúng tôi bác bỏ giả thuyết khống về thử nghiệm Shapiro-Wilk.

Điều này có nghĩa là chúng tôi có đủ bằng chứng để nói rằng dữ liệu mẫu không đến từ phân phối bình thường.

Phương pháp 4: Thực hiện thử nghiệm Kolmogorov-Smirnov

Mã sau đây cho thấy cách thực hiện thử nghiệm Kolmogorov-Smirnov cho bộ dữ liệu theo phân phối thông thường log-bình thường:Transform the values from x to log(x).

Từ đầu ra, chúng ta có thể thấy rằng thống kê kiểm tra là & nbsp; 0,841 và giá trị p tương ứng là 0,0.Transform the values from x to x.

Vì giá trị p nhỏ hơn 0,05, chúng tôi bác bỏ giả thuyết khống của thử nghiệm Kolmogorov-Smirnov.Transform the values from x to x1/3.

Cách xử lý dữ liệu không bình thường

Nếu một bộ dữ liệu nhất định không được phân phối bình thường, chúng ta thường có thể thực hiện một trong các biến đổi sau để làm cho nó được phân phối bình thường hơn: