首页 > 其他分享 >计量经济学(十)——正态性检验(Normality Test)

计量经济学(十)——正态性检验(Normality Test)

时间:2024-10-17 22:20:54浏览次数:1  
标签:数据 模型 检验 Normality 假设 Test 正态性 正态分布

正态性检验(Normality Test)是一种用于判断数据是否服从正态分布的重要统计方法,广泛应用于时间序列分析、回归分析等模型的构建与诊断中。许多统计模型,如线性回归、VAR模型等,要求残差或误差项服从正态分布。这一假设是保证模型估计有效性和推断准确性的关键条件,误差项的正态性有助于确保参数估计无偏、方差最小以及检验结果的可靠性。在时间序列分析中,正态性假设的验证是确保模型预测准确性和稳定性的必要步骤。违反正态性假设可能导致参数估计不准确、显著性检验失效,因此,正态性检验是模型诊断中不可忽视的一环。

一、正态性检验的意义

在许多统计模型中,如线性回归模型、VAR(向量自回归)模型、ARIMA模型等,残差或误差项的正态性假设是非常关键的一部分。这一假设的主要目的是确保参数估计的有效性、渐近正态性以及最小方差无偏估计(BLUE)的实现。在这些模型中,误差项是否符合正态分布直接影响到参数估计、显著性检验以及推断统计的准确性。

正态性假设在统计模型中占据核心地位,尤其是在线性回归、VAR和ARIMA等时间序列模型中,正态性假设为模型的健全性提供了理论基础。具体来说,正态性假设有助于:
参数估计的有效性:假设残差服从正态分布,可以通过最小二乘法(OLS)或最大似然估计法(MLE)得到最优的参数估计值。当残差符合正态分布时,这些估计值不仅是无偏的,而且具有最小方差,从而确保了模型的可靠性。
渐近正态性:即便在样本量较小时,正态性假设也有助于参数估计在样本量增大的过程中逐渐呈现正态分布,这一性质称为渐近正态性。这使得在大样本条件下,参数的估计量可以更准确地接近其真实值。
推断统计的有效性:在许多经典的统计推断方法中,如t检验、F检验等,都依赖于正态分布的假设。正态性假设确保了这些检验方法的适用性,使得我们能够对回归系数的显著性、模型整体的显著性以及置信区间的构建进行合理的判断。

然而,正态性假设在实际应用中并非总是成立。当误差项不服从正态分布时,可能会带来以下问题:

参数估计不准确:当残差不服从正态分布时,最小二乘法或最大似然估计可能不再是最优的。这意味着所估计的模型参数可能会产生偏差,尤其是在样本量有限的情况下,这种偏差会更加明显。参数估计的误差不仅影响模型解释,还可能导致对未来数据的错误预测。
置信区间与显著性检验失效:正态性假设的违反会影响标准误差的估计。由于t检验和F检验的推导依赖于正态分布,误差项非正态分布时,这些检验的结果可能会不准确。具体来说,过度估计或低估了模型参数的显著性,导致假阳性或假阴性结果。这种情况下,研究者可能会错误地判断模型是否具有统计显著性,进而影响决策。

二、常见的正态性检验方法

正态性检验是统计分析中非常重要的一步,它可以帮助我们判断数据是否符合正态分布,从而决定是否使用基于正态分布假设的统计方法。以下是几种常见的正态性检验方法,包括它们的检验统计量、判断过程和适用情况。

2.1 图示法

图示法是一种直观的检验方法,主要通过绘制QQ图或残差直方图来判断数据的正态性。

QQ图(Quantile-Quantile Plot)
  • 检验统计量:QQ图没有特定的检验统计量,而是通过视觉判断数据点是否大致沿着一条直线分布。
  • 判断过程
    • 绘制QQ图,将实际数据的分位数与正态分布的理论分位数进行比较。
    • 如果数据点基本沿着一条直线分布,则表明数据符合正态分布。
    • QQ图特别适合用来检测数据在尾部是否偏离正态分布。
直方图
  • 检验统计量:直方图同样没有特定的检验统计量,而是通过视觉判断数据分布的形状。
  • 判断过程
    • 绘制残差的直方图,可以直观地判断数据分布的形状。
    • 如果直方图呈现钟形且对称,则数据大致服从正态分布。

2.2 Jarque-Bera检验

Jarque-Bera(简称JB)检验是一种基于偏度和峰度的正态性检验方法。

  • 检验统计量

    \[JB = \frac{n}{6} \left( S^2 + \frac{(K - 3)^2}{4} \right) \]

    其中,\(S\)为偏度(Skewness),\(K\)为峰度(Kurtosis),\(n\)为样本容量。

  • 判断过程

    • 对于正态分布,偏度应接近0,峰度应接近3。
    • 计算JB检验统计量,若JB检验的p值小于给定的显著性水平(如0.05),则拒绝原假设,表明数据不符合正态分布。

2.3. Shapiro-Wilk检验

Shapiro-Wilk检验是一种用于判断数据正态性的统计方法,特别适用于小样本数据。它通过将样本数据排序后,比较其与正态分布理论值的偏差来判断数据的正态性。

  • 检验统计量
    Shapiro-Wilk检验的检验统计量较为复杂,具体表达式如下:

\[W = \frac{\left( \sum_{i=1}^{n} a_i x_{(i)} \right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \]

其中:\(x_{(i)}\)为排序后的样本数据;\(\bar{x}\)为样本均值;\(a_i\)是依赖于正态分布的常数。

  • 判断过程
    • Shapiro-Wilk检验的p值越大,越表明数据接近正态分布;
    • 若p值较小(如小于0.05),则拒绝原假设,认为数据不符合正态分布。

2.4 Kolmogorov-Smirnov检验

Kolmogorov-Smirnov(简称K-S)检验是一种非参数检验方法。

  • 检验统计量

    \[D = \max \left| F_n(x) - F(x) \right| \]

    其中,\(F_n(x)\)是样本数据的累积分布函数,\(F(x)\)是理论分布(如正态分布)的累积分布函数。

  • 判断过程

    • 通过比较样本数据的累积分布函数与理论分布的累积分布函数之间的差异,来判断样本是否服从正态分布。
    • 尽管K-S检验对数据规模较大的情况下较为敏感,但其主要问题在于对样本分布形状的微小偏差也非常敏感,可能导致过于保守的检验结果。

正态性检验是数据分析中的重要步骤,选择合适的检验方法可以帮助我们更准确地理解数据的特性。图示法提供了直观的视觉判断,而Jarque-Bera检验、Shapiro-Wilk检验和Kolmogorov-Smirnov检验则提供了基于统计量的定量判断。在实际应用中,可以根据数据的样本量和分布特性选择合适的检验方法。

三、案例分析

一家加工食品生产公司的科研人员想评估本公司生产的瓶装酱料的脂肪百分比。宣传的百分比为 15%。科研人员测量了 20 个随机样本的脂肪百分比数据见下表,试判定其分布是否正态。

样本 ID 脂肪百分比 样本 ID 脂肪百分比
1 15.2 11 18.5
2 12.4 12 16.3
3 15.4 13 20.0
4 16.5 14 19.2
5 15.9 15 12.3
6 17.1 16 12.8
7 16.9 17 17.9
8 14.3 18 16.3
9 19.1 19 18.7
10 18.2 20 16.2
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
from statsmodels.graphics.gofplots import qqplot
from scipy.stats import jarque_bera, shapiro, kstest

# 数据
fat_percent = np.array([15.2, 12.4, 15.4, 16.5, 15.9, 17.1, 16.9, 14.3, 19.1, 18.2, 
                        18.5, 16.3, 20.0, 19.2, 12.3, 12.8, 17.9, 16.3, 18.7, 16.2])

# 绘制直方图
plt.hist(fat_percent, bins=5, edgecolor='black', alpha=0.7)
plt.title('Fat Percentage Histogram')
plt.xlabel('Fat Percentage')
plt.ylabel('Frequency')
plt.show()

# 绘制QQ图
qqplot(fat_percent, line='s')
plt.title('QQ Plot of Fat Percentage')
plt.show()

# Jarque-Bera 检验
jb_stat, jb_p = jarque_bera(fat_percent)
print(f"Jarque-Bera Test: Stat = {jb_stat:.4f}, p-value = {jb_p:.4f}")

# Shapiro-Wilk 检验
sw_stat, sw_p = shapiro(fat_percent)
print(f"Shapiro-Wilk Test: Stat = {sw_stat:.4f}, p-value = {sw_p:.4f}")

# Kolmogorov-Smirnov 检验
ks_stat, ks_p = kstest(fat_percent, 'norm', args=(np.mean(fat_percent), np.std(fat_percent)))
print(f"Kolmogorov-Smirnov Test: Stat = {ks_stat:.4f}, p-value = {ks_p:.4f}")

# 正态性检验总结
if jb_p > 0.05 and sw_p > 0.05 and ks_p > 0.05:
    print("根据各项检验,数据接近正态分布。")
else:
    print("数据可能不符合正态分布。")
直方图 Q-Q图

总结

正态性检验是统计模型中重要的诊断步骤,尤其在时间序列分析和回归模型中,确保数据或残差的正态分布至关重要。它不仅帮助验证模型的适用性,还对提高参数估计的精确性和统计推断的可靠性有重要意义。通过正态性检验,研究者可以判断数据是否符合正态分布假设。如果残差不服从正态分布,可能会导致参数估计偏差、置信区间不准确、显著性检验失效等问题。为此,在模型诊断阶段,图示法(如QQ图、直方图)和统计检验法(如Jarque-Bera检验、Shapiro-Wilk检验等)被广泛应用。这些方法结合使用,能够帮助研究者更准确地判断数据分布特性。如果正态性假设不成立,研究者可通过数据变换或选择其他方法来提高模型的准确性和稳健性,从而为研究结论提供更可靠的支持。

参考资料

  1. 正态性检验
  2. 正态性检验全流程

标签:数据,模型,检验,Normality,假设,Test,正态性,正态分布
From: https://www.cnblogs.com/haohai9309/p/18473046

相关文章

  • python: unittest
     '''生成测试报告https://www.lambdatest.com/blog/generating-xml-and-html-report-in-pyunit-for-test-automation/unittesthttps://codedec.com/tutorials/how-to-generate-html-report-for-pytest-execution/https://docs.pytest.org/en/7.1.x/_modules/......
  • The 2024 CCPC National Invitational Contest (Northeast) ADEJ
    The2024CCPCNationalInvitationalContest(Northeast)ADEJA.PaperWatering思路:有两种类型的操作,对一个数开根号或平方。平方没有什么问题,开根号由于是向下取整再平方就会产生不一样的数。那么做法也很简单了。对于一个数\(x\),\(k\)步,首先它能平方往后变\(k\)步,往前能......
  • CMSC Manual testing Completeness SNU Score
    Homework#3Due:Friday,October18that4:00pmCSTTableofContentsHomework#3GettingstartedManualtestingCompletenessSNUScoreCodeQualitySubmissionThepurposeofthisassignmentistogiveyouexperiencewithconditionals,lists,andloops.......
  • FSFOtest
    测试场景1(模拟NHSITE故障,OB在NH)【推荐】--masterobserver维护DRSITE:prdb19DGMGRL>showobserverConfiguration-dg_configPrimary:orcl2dgActiveTarget:orcl0dgObserver"prdb19"-MasterHostName:prdb19L......
  • TestNG学习
    TestNG学习笔记TestNG学习笔记常用注解TestNG最常使用的是它的注解。注解描述属性例子@Test表示方法是一个基于TestNG的测试用例enabled,priority,invocationCount,dependsOnMethods@Test(enabled=false)例子@Test(invocationCount=3,priority=1)publ......
  • CtsBiometricsTestCases 测试fail,解决方法。
    平台:高通C6490,android13测试结果:arm64-v8a CtsBiometricsTestCasesTestResultDetailsandroid.server.biometrics.BiometricActivityTests#testBiometricOrCredential_credentialButtonInvoked_biometricNotEnrolledfailjava.lang.AssertionError:AuthSessionState......
  • CtsPermissionTestCases之android.permission.cts.DebuggableTest#testNoDebuggable
    平台:高通C6490,android13测试结果:android.permission.cts.DebuggableTest#testNoDebuggablefailjunit.framework.AssertionFailedError:Packagesmarkeddebuggable:[com.skyworthdigital.autotest.all] 这个问题是该测试对应的app是否有debugable的标签。解决......
  • HIAST Collegiate Programming Contest 2024(非完全题解)
    C题HZY做的,等他补题解//#pragmaGCCoptimize("O3,unroll-loops")//#pragmaGCCtarget("avx2,bmi,bmi2,lzcnt,popcnt")////如果在不支持avx2的平台上将avx2换成avx或SSE之一#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecon......
  • python: pytest in thonny IDE
     classStudentData:""""""def__init__(self):self.__data=Nonedefconnect(self,datafile):withopen(datafile)asjsonfile:self.__data=json.load(jsonfile)defgetda......
  • AtCoder Beginner Contest 374 (A-E)
    AtCoderBeginnerContest374(A-E)比赛链接A-Takahashisan2#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;voidShowball(){strings;cin>>s;intn=s.size();cout<<(s.substr(n-3)=="san"......