回归检验

博客围绕多元回归残差检验展开,介绍了残差需满足的假定,详细阐述了正态性、方差齐性、独立性检验的方法及对应解决措施,如正态性不满足可对Y变量变换。还提及回归中异常点和共线性检验方法及处理办法,如异常点可删除或衍生哑变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景
1、多元回归的残差假定:

残差的期望为0;
残差对所有的x而言有同方差性;
残差是服从正态分布,且相互独立。
2、残差检验需要检验的部分

正态性检验
方差齐性检验
独立性(自相关性)检验
二、详细阐述
1、正态性检验
还有当模型的残差服从正态性假设时,才能保证模型偏回归系数对于的t值和模型的F值是有效的。

残差的正态性检验由两类方法:
定性的图形法(PP图和QQ图):当PP图和QQ图的点差不多集中在45度直线上时,则认为满足正态性;
定量的非参数法(Shapiro检验和K-S检验):如果p_value<0.05,则拒绝原假设,即不满足正态性假设。
解决措施:如果残差不服从正态分布的话,建议对Y变量进行box-cox变换处理(或者直接粗暴的做一个log变换,效果会好很多)。

知识点补充:
Q-Q图是一种散点图,对应于正态分布的Q-Q图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图. 要利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,而且该直线的斜率为标准差,截距为均值。
P-P图是根据变量的累积比例与指定分布的累积比例之间的关系所绘制的图形。通过P-P图可以检验数据是否符合指定的分布。当数据符合指定分布时,P-P图中各点近似呈一条直线。如果P-P图中各点不呈直线,但有一定规律,可以对变量数据进行转换,使转换后的数据更接近指定分布。

#####下面的操作建立在已经建立了一个多元线性模型的基础上,暂称其为model
###图形法(QQ图,PP图)
sm.qqplot(model.resid,fit=True,line="45")  #Q-Q 图
plt.title("Q-Q Plot")
plt.show()
sm.ProbPlot(model.resid).ppplot(line = '45')  #P-P图
plt.title('P-P plot')
plt.show()

###非参检验

KS检验

from scipy.stats import kstest
kstest(model.resid, 'norm')  #ks检验,当p值<0.05时,拒绝原假设,即不满足正态性假设

shapiro检验

from scipy import stats 
stats.shapiro(model.resid)   #这种检验方法比KS检验的P值略大,适合样本量在5000以内
 ##如果正态性检验未通过,考虑box-cox变换
import scipy.stats as stats
lamd = stats.boxcox_normmax(y, method = 'mle') # 找到box-cox变换的lambda系数
y = stats.boxcox(y, lamd) # 对Y进行变换

2、方差齐性检验
在线性回归建模中,如果模型表现的非常好的话,那么残差与拟合值之间不应该存在某些明显的关系或趋势。 如果模型的残差存在一定的异方差的话,会导致估计出来的偏回归系数不具备有效性,甚至导致模型的预测也不准确。

残差方差齐性检验的方法有两种:
图形法(残差与拟合值的散点图):如果残差在参考线(0值)两侧均匀分布,则意味着异方差性较弱;而如果呈现出明显的不均匀分布,则意味着存在明显的异方差性。
统计验证法:可以通过White检验和Breush-Pagan检验来完成定量化的异方差性检验,如果p_value<0.05,则拒绝原假设,即方差不满足齐性。

解决措施:如果模型的残差不服从齐性的话,可以考虑是模型变换法(log变换,box_cox变换)和加权最小二乘法。

####图形法
#拟合值与残差的图像
plt.plot(model.fittedvalues,model.resid,"o")
plt.xlabel("predicted_value")
plt.ylabel("residual")
plt.axhline(y=0,c="r")
plt.show()


####统计验证法
#这两种方法的均会返回四个值,其中第一个为拉格朗日乘数统计量,第二个为拉格朗日乘数测试的p值,第三个是误差方差不依赖于x的假设的f统计量,第四个是f统计量的p值。
#故可以参考输出的第二个值和第四个值
# White's Test
sm.stats.diagnostic.het_white(model.resid, exog = model.model.exog)  
# Breusch-Pagan
sm.stats.diagnostic.het_breushpagan(model.resid, exog_het = model.model.exog)

3、残差独立性检验
两种检验方法:

DW检验:在模型的summary输出中,包含了残差的Durbin-Watson统计量值DW=2(1-p),如果该值越接近于2,则说明残差是独立。 (DW=0时,残差序列存在完全正自相关, DW=(0,2)时,残差序列存在正自相关, DW=2时,残差序列无自相关, DW=(2,4)时,残差序列存在负自相关, DW=4时,残差序列存在完全负自相关。 )
图形法:画残差与滞后一阶的散点图。如果图形呈现圆盘分布

###图形法
res1=model.resid[:-1]
res2=model.resid[1:]
plt.scatter(res1,res2)
plt.show()

三、回归中其它需要检验的部分
1、异常点检验
首先建立回归模型,关于异常点的检测方法,一般可以通过高杠杆值点(帽子矩阵)或DFFITS值、学生化残差、cook距离和covratio值来判断。

当高杠杆值点(或帽子矩阵)大于2(p+1)/n时,则认为该样本点可能存在异常(其中p为自变量的个数,n为观测的个数);
当DFFITS统计值大于2sqrt((p+1)/n)时 ,则认为该样本点可能存在异常;
当学生化残差的绝对值大于2,则认为该样本点可能存在异常;
对于cook距离来说,则没有明确的判断标准,一般来说,值越大则为异常点的可能性就越高;
对于covratio值来说,如果一个样本的covratio值离数值1越远,则认为该样本越可能是异常值。
对于异常值的处理,我们可以考虑下面几种办法:

当异常比例极低时(如5%以内),可以考虑直接删除;
当异常比例比较高时,可以考虑将异常值衍生为哑变量,即异常值对应到1,非异常值则对应到0;
将单独把异常值提取出来,另行建模;

####异常点检验
outliers = fit.get_influence()  #影响点
leverage = outliers.hat_matrix_diag # 高杠杆值点(帽子矩阵)
dffits = outliers.dffits[0]  # dffits值
resid_stu = outliers.resid_studentized_external  # 学生化残差
cook = outliers.cooks_distance[0]  # cook距离
covratio = outliers.cov_ratio # covratio值

# 将上面的几种异常值检验统计量与原始数据集合并
contat1 = pd.concat([pd.Series(leverage, name = 'leverage'),pd.Series(dffits, name = 'dffits'),
                     pd.Series(resid_stu,name = 'resid_stu'),pd.Series(cook, name = 'cook'),
                     pd.Series(covratio, name = 'covratio'),],axis = 1)
data_outliers = pd.concat([data,contat1], axis = 1)
data_outliers.head()

##计算异常点的比例
outliers_ratio = len(np.where(np.abs(data_outliers.resid_stu)>2)[0])/data_outliers.shape[0]
outliers_ratio
##删除异常点
data_outliers = data_outliers.loc[np.abs(data_outliers.resid_stu)<=2,]  #这里根据的是学生化残差

2、共线性检验
如果VIF大于10,则说明变量存在多重共线性。如果发现变量之间存在多重共线性的话,可以考虑删除变量和重新选择模型。


X=sm.add_constant(X) #加上一列常数项,必须
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] #variance_inflation_factor(X.values, i) 表示计算第i个变量的VIF
vif["features"] = X.columns
vif

<think>好的,用户的问题是关于如何对面板数据执行泊松回归并验证其假设,包括过度离散性检验。我需要先理清楚面板数据和泊松回归的基本概念,然后结合统计方法来解决这个问题。 首先,面板数据是同时包含横截面和时间维度的数据,比如多个个体在不同时间点的观测。处理面板数据常用的模型有固定效应模型和随机效应模型。而泊松回归适用于因变量是计数数据的情况,例如事件发生的次数。用户提到要验证假设,尤其是过度离散性,这意味着需要检查方差是否远大于均值,这可能导致泊松回归不合适,转而使用负二项回归。 接下来,我应该分步骤解答用户的疑问。首先是模型选择,面板泊松回归通常有固定效应和随机效应两种。固定效应通过引入个体效应来控制不随时间变化的变量,而随机效应则假设个体效应与解释变量无关。然后是具体的实现方法,可能需要使用统计软件如Stata或R。例如在Stata中,可以使用`xtpoisson`命令,并加上‘fe’或‘re’选项来选择模型类型。在R中,可以使用`glmmTMB`或`pglm`包来处理。 接下来是假设检验部分。泊松回归的关键假设包括:因变量服从泊松分布、均值等于方差(无过度离散)、以及独立性和线性关系。用户特别提到过度离散检验,这可以通过计算方差与均值的比率,或者使用拉格朗日乘数检验。如果存在过度离散,可能需要转向负二项回归。 此外,还需要考虑面板数据的特殊性,比如个体效应是否与解释变量相关,这涉及豪斯曼检验来选择固定效应还是随机效应模型。同时,时间效应和可能的自相关问题也需要处理,可能需要加入时间虚拟变量或使用更复杂的模型结构。 用户还可能关心如何实施这些步骤,所以给出具体的代码示例会很有帮助。例如在Stata中的命令,以及R语言中的包和函数调用。同时,提醒用户注意过度离散的处理方法,以及在模型选择时的检验流程。 最后,确保引用相关的参考文献,尤其是用户提供的引用内容。例如引用[1]提到泊松回归适用于Y呈现泊松分布的情况,而引用[2]和[3]讨论了数据归一化和稳健性检验的方法,这些可能在处理面板数据时需要考虑,比如数据预处理或增加样本进行稳健性检验。 总结回答的结构应该是:模型选择、实现步骤、假设验证方法(特别是过度离散)、软件操作示例,以及相关问题的扩展。这样用户能够逐步按照指导进行操作,并理解背后的统计原理。</think>### 面板数据泊松回归模型检验步骤 #### 1. **模型选择与设定** 面板数据泊松回归需区分**固定效应**和**随机效应**模型: - **固定效应模型**:假设个体效应与解释变量相关,通过引入虚拟变量或条件最大似然估计控制个体异质性。公式为: $$ \ln(\lambda_{it}) = \beta X_{it} + \alpha_i + \epsilon_{it} $$ 其中$\alpha_i$为个体固定效应[^1]。 - **随机效应模型**:假设个体效应与解释变量无关,通过广义最小二乘法(GLS)估计。公式为: $$ \ln(\lambda_{it}) = \beta X_{it} + u_i + \epsilon_{it} $$ 其中$u_i \sim N(0,\sigma_u^2)$[^3]。 #### 2. **实现方法** - **Stata示例**: ```stata * 固定效应模型 xtpoisson y x1 x2, fe * 随机效应模型 xtpoisson y x1 x2, re ``` - **R示例**: ```r library(glmmTMB) # 固定效应(需指定个体变量) model_fe <- glmmTMB(y ~ x1 + x2 + (1|id), family=poisson) # 随机效应 model_re <- glmmTMB(y ~ x1 + x2 + (1|id), family=poisson, REML=TRUE) ``` #### 3. **假设检验** - **过度离散检验**: 1. 计算方差与均值比:若比值显著大于1,存在过度离散。 2. 使用拉格朗日乘数检验(LM test): $$ LM = \frac{(残差 - 均值)^2 - 均值}{\sqrt{2 \cdot 均值^2}} $$ 若拒绝原假设(p<0.05),需改用负二项回归。 - **模型选择检验**: - 使用**Hausman检验**比较固定效应与随机效应: ```stata est store fe est store re hausman fe re ``` #### 4. **稳健性检验** - 通过**增加样本**或**调整数据维度**(如扩展城市级别[^3])验证结果一致性。 - 采用非线性归一化方法处理计数深度差异(如降采样[^2])。 --- ### 相关问题 1. 如何处理面板数据中的时间效应与个体效应交互? 2. 负二项回归与泊松回归的适用条件有何区别? 3. 如何检验面板数据中的自相关性与异方差性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值