非参数检验咨询:GLS替代方案及R代码正确性验证
问题解答
一、替代GLS的检验方法(针对线性假设不成立、因变量非正态)
因为你的因变量(收购溢价)不服从正态分布,且GLS要求的线性关系不成立,可以考虑以下几种实用方法:
- 分位数回归:完全不依赖正态分布假设,还能捕捉不同溢价水平下Beta的影响差异,适配偏态数据。可使用R的
quantreg包,通过rq()函数拟合后,分组对比危机与正常时期的Beta系数。 - 非线性广义线性模型(GLM):若收购溢价为正偏态数据,可选择Gamma或逆高斯分布族,搭配对数连接函数拟合非线性关系,同时加入交互项检验Beta在不同时期的影响差异,用基础包的
glm()函数即可实现。 - 半参数/非参数回归:比如用
mgcv包的广义可加模型(GAM),无需预设全局线性关系,能灵活捕捉变量间的非线性趋势,之后通过分组分析对比危机和正常时期的Beta效应。 - Bootstrap分组检验:将样本拆分为危机组和正常组,分别拟合适配的模型(哪怕是非线性),用Bootstrap方法计算两组Beta系数差异的置信区间,若区间不包含0则说明存在显著差异,这种方法对分布和线性假设要求极低。
二、你的R代码检验内容说明
首先,你当前的模型gls(X1.Month.Equity.Premium ~ crisis + Beta)是拟合收购溢价对crisis(危机虚拟变量)和Beta的加性线性模型,但这个设定无法检验Beta在危机/正常时期的影响差异——必须加入crisis和Beta的交互项才能实现你的研究目标。
然后看linearHypothesis(financial_model, c("crisis + Beta = 0")):这个命令既不是检验因变量与两个自变量的线性关系(那是模型整体显著性检验,用anova(financial_model)),也不是检验crisis和Beta之间的关系,它是检验crisis的回归系数与Beta的回归系数之和是否等于0,这和你的研究目标完全无关。
如果要检验Beta在不同时期的影响差异,正确的代码应该是:
# 加入crisis与Beta的交互项,核心是检验该交互项的显著性 financial_model <- gls(`X1.Month.Equity.Premium` ~ crisis + Beta + crisis:Beta, data = financial_subset, method = "ML") # 检验交互项系数是否显著(即Beta的影响在危机和正常时期是否有差异) linearHypothesis(financial_model, c("crisis:Beta = 0")) # 或者直接查看模型摘要里的交互项p值 summary(financial_model)
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

