混合线性模型如何检测固定因子和随机因子的显著性以及计算R2

本文详细介绍了如何使用R语言的lme4包及其扩展包lmerTest和sjstats进行混合线性模型分析,包括固定因子和随机因子的显著性检验、R2计算、方差组分提取等关键步骤,并通过具体实例演示了整个分析流程。

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

很多朋友写信问我, 像要知道固定因子的显著性和随机因子的显著性如何计算,他们使用的是lme4这个R包, 但是这个包使用anova时没有P值,还要手动计算, 随机因子也需要自己计算loglikehood值, 然后使用LRT的卡方检验进行显著性检验, 其实lme4包有扩展的包可以非常友好的做这件事情.

1. 载入数据和软件包

###载入软件包和数据
library(lme4)
library(lmerTest)
library(sjstats)
library(learnasreml)
data(fm)

2. 软件包介绍

lme4

  • R语言中最流行的混合线性包
  • 结果不太友好, 所以才有下面两个包作为辅助
  • 安装方法
install.packages("lme4")

lmerTest

  • 主要是用于检测lme4对象的固定因子和随机因子,它有两个函数:
  • lmerTest::anova.lmerModLmerTest用于检测固定因子的显著性, 方差分析表采用III平方和的形式.
  • lmerTest::ranova用于检测随机因子的显著性, 使用的是LRT检验, 给出的是卡方结果.
  • 安装方法
install.packages("lmerTest")

sjstats

  • 可以计算R2
  • 可以提取方差组分
  • 安装方法
install.packages("lmerTest")

3. 使用lme4进行混合线性分析

模型介绍

  • 固定因子: Spacing + Rep
  • 随机因子: Fam

建模

### 固定因子: Spacing+Rep, 随机因子: Fam
fm1 <- lmer(h1 ~Spacing + Rep + (1|Fam), fm)

固定因子检验

anova(fm1) # 固定因子显著性检验
Sum SqMean SqNumDFDenDFF valuePr(>F)
Spacing1775.888 1775.888 1 786.2359 34.98368 4.957481e-09
Rep5339.632 1334.908 4 781.5386 26.29670 1.762292e-20

可以看到Spacing 和Rep都达到极显著

随机因子显著性检验

ranova(fm1) # 随机因子显著性检验,LRT
nparlogLikAICLRTDfPr(>Chisq)
<none>8 -2831.504 5679.008 NA NA NA
(1 | Fam)7 -2876.161 5766.323 89.31466 1 3.367543e-21

可以看到Fam达到极显著

计算R2

r2(fm1) # 计算R2
R-Squared for Generalized Linear Mixed Model

[34mFamily : gaussian (identity)
Formula: h1 ~ Spacing + Rep + (1 | Fam)

[39m   Marginal R2: 0.116
Conditional R2: 0.277

计算固定因子每个水平的P值


p_value(fm1) # 计算每个水平的显著性

termp.valuestd.error
(Intercept) 1.535094e-1270.7915991
Spacing3 4.957481e-090.5463546
Rep2 2.886600e-010.8082299
Rep3 7.443430e-080.8218056
Rep4 1.720753e-100.7995633
Rep5 4.635631e-010.7663026

提取方差组分

re_var(fm1) # 计算方差组分
_sigma_2
50.7633345854535
Fam_tau.00
11.3168413429073

4. 使用asreml进行对照

建模

library(asreml)
fm2 = asreml(h1 ~ Spacing + Rep, random = ~ Fam, data=fm,trace=F)

固定因子检验

anova(fm2) # 固定因子显著性检验, 这里anova 是anova.asreml
DfSum of SqWald statisticPr(Chisq)
(Intercept) 1 253059.466464985.08358 0.000000e+00
Spacing 1 1164.71720 22.94406 1.667844e-06
Rep 4 5339.63197 105.18678 0.000000e+00
residual (MS)NA 50.76333 NA NA

随机因子显著性检验

这里首先构建一个空模型, 然后使用LRT检验

fm_Null = asreml(h1 ~ Spacing + Rep, data=fm,trace=F)

lrt.asreml(fm2,fm_Null) # 随机因子显著性检验LRT
DfLR statisticPr(Chisq)
fm2/fm_Null1 89.314660
summary(fm2)$varcomp[,1:2] # 方差组分
gammacomponent
Fam!Fam.var0.222933411.31684
R!variance1.000000050.76333

5. 关于混合线性模型计算R2

还有一个包叫MuMIn,也可以计算R2

library(MuMIn)
r.squaredLR(fm1)#计算R2

0.217233511687581

6. 完整代码分享

# 混合线性模型, 如何检测固定因子和随机因子

###载入数据
library(lme4)
library(lmerTest)
library(sjstats)
library(learnasreml)
data(fm)
str(fm)

### 固定因子: Spacing+Rep, 随机因子: Fam
fm1 <- lmer(h1 ~Spacing + Rep + (1|Fam), fm)
summary(fm1)

anova(fm1) # 固定因子显著性检验
ranova(fm1) # 随机因子显著性检验,LRT

r2(fm1) # 计算R2

p_value(fm1) # 计算每个水平的显著性

re_var(fm1) # 计算方差组分


### 对比asreml
fm2 = asreml(h1 ~ Spacing + Rep, random = ~ Fam, data=fm)
anova(fm2) # 固定因子显著性检验, 这里anova 是anova.asreml
fm_Null = asreml(h1 ~ Spacing + Rep, data=fm)
lrt.asreml(fm2,fm_Null) # 随机因子显著性检验LRT
summary(fm2)$varcomp[,1:2] # 方差组分


library(MuMIn)
r.squaredLR(fm1)#计算R2

在这里插入图片描述

### 实现四因子模型的数据分析 为了在 Stata 中实现四因子模型并进行数据分析,可以遵循以下方法: #### 数据准备 确保拥有必要的数据集,这些应包括但不限于综合月市场回报率、资产负债表、月个股回报率、无风险利率以及特定于四因子模型的因素数据。对于四因子模型而言,在 Fama-French 的基础上通常会加入动量因子 (MOM),因此还需要获取有关股票过去表现的信息来构建此额外因素[^2]。 #### 编写回归命令 利用 `regress` 命令执行多变量线性回归分析,其中因变量是个股超额收益率(即扣除无风险利率后的实际收益),自变量则为四个选定的风险溢价因子——市值规模效应(SMB)、账面市值比(HML)、盈利能力(RMW) 动量(MOM)。 ```stata * 加载数据 use "path_to_your_datafile.dta", clear * 计算各期超额回报 gen excess_return = stock_return - risk_free_rate * 执行四因子回归 regress excess_return SMB HML RMW MOM, vce(robust) * 输出结果至表格形式便于报告解读 esttab using results.txt, se r2 star(* 0.1 ** 0.05 *** 0.01) ``` 上述代码片段展示了如何加载外部 `.dta` 文件格式的数据集,并通过生成新的变量表示每只股票的超额回报来进行四因子回归分析。最后一步将估计的结果保存成文本文件以便后续查看或发表论文时引用。 #### 解读输出结果 关注 R&sup2; 值了解所选因子解释了多少比例的投资组合波动;同时注意各个系数及其显著水平(p-value),判断哪些因子对投资绩效有重要影响。如果某些因子并不具备统计学意义上的显著性,则可能需要重新考虑其纳入与否或者探索其他潜在的影响要素。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值