You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中基于残差平方和法的F检验:如何构建受约束回归模型?

构建受约束回归模型的步骤

首先得把你的假设转化为模型参数的约束条件,先拆解无约束模型和假设逻辑:

无约束模型形式

你已经建立的无约束回归:

unrestricted_model <- lm(WAGE ~ MALE + SCHOOL + EXPER, data = wages)

对应的数学表达式为:

WAGE = β₀ + β₁×MALE + β₂×SCHOOL + β₃×EXPER + ε

推导约束条件

你的核心假设是:受教育年限相同时,z年经验男性的工资与z+7年经验女性的工资相等

分别写出两类人群的工资表达式:

  • 男性(MALE=1):β₀ + β₁×1 + β₂×SCHOOL + β₃×z
  • 女性(MALE=0):β₀ + β₁×0 + β₂×SCHOOL + β₃×(z+7)

令两者相等并化简,最终得到参数约束:β₁ = 7β₃ → β₁ - 7β₃ = 0

构造受约束回归模型

把β₁=7β₃代入无约束模型,整理后得到受约束模型的表达式:

WAGE = β₀ + β₂×SCHOOL + β₃×(EXPER + 7×MALE) + ε

对应到R里有两种实现方式:

方式1:直接在公式中构造组合变量

用I()函数保留算术表达式的原始计算逻辑,避免被公式解析器误判:

restricted_model <- lm(WAGE ~ SCHOOL + I(EXPER + 7*MALE), data = wages)

方式2:先创建新变量再建模

先构造调整后的经验变量,再代入模型:

wages$EXPER_ADJ <- wages$EXPER + 7*wages$MALE
restricted_model <- lm(WAGE ~ SCHOOL + EXPER_ADJ, data = wages)

用残差平方和做F检验

你可以手动计算F统计量,或者直接用anova()函数自动完成模型对比:

# 手动计算RSS和F统计量
rss_unrestricted <- sum(resid(unrestricted_model)^2)
rss_restricted <- sum(resid(restricted_model)^2)
n <- nrow(wages)
k_unrestricted <- length(coef(unrestricted_model)) # 无约束模型参数数:4个(截距+3变量)
k_restricted <- length(coef(restricted_model)) # 受约束模型参数数:3个(截距+2变量)

f_stat <- ((rss_restricted - rss_unrestricted)/(k_unrestricted - k_restricted)) / 
          (rss_unrestricted/(n - k_unrestricted))

# 更简便的方式:直接用anova函数对比模型
anova(restricted_model, unrestricted_model)

anova()的输出会给出F统计量和对应p值,直接用来验证假设即可。

内容的提问来源于stack exchange,提问作者RStudent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:14