在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
相关产品推荐
相关产品推荐

