如何基于预设线性方程构建模型对象并检验数据拟合度?
解决方案
方法一:使用fixest包(简便推荐)
fixest包支持固定系数的回归建模,无需手动计算统计量,直接调用summary()就能得到所需的拟合指标。
操作步骤:
- 安装并加载
fixest包:
install.packages("fixest") library(fixest)
- 基于给定方程构建模型,指定固定系数:
假设你的数据存储在数据框df中,包含变量e(利率)、x1(通胀)、x2(产出):
# 用feols()固定系数,fixef.coef参数传入预设的系数值 mod <- feols(e ~ 1 + x1 + x2, data = df, fixef.coef = c(`(Intercept)` = 2, x1 = 1.5, x2 = 0.5))
- 查看拟合指标:
summary(mod)
输出结果会包含调整R²、系数的标准误、t值、p值等你需要的统计量。
方法二:基础R手动构建lm对象
如果不想额外安装包,可以手动修改lm模型对象的组件,让summary()能正确计算指标:
操作步骤:
- 先创建一个空的lm模型框架(用于获取结构):
mod <- lm(e ~ x1 + x2, data = df)
- 替换模型的系数为预设值:
mod$coefficients <- c(2, 1.5, 0.5)
- 重新计算拟合值和残差:
mod$fitted.values <- predict(mod, newdata = df) mod$residuals <- df$e - mod$fitted.values
- 计算并填充关键统计量:
# 残差自由度 mod$df.residual <- nrow(df) - length(mod$coefficients) # 残差平方和与总平方和 rss <- sum(mod$residuals^2) tss <- sum((df$e - mean(df$e))^2) # R²与调整R² mod$r.squared <- 1 - rss/tss mod$adj.r.squared <- 1 - (rss/mod$df.residual)/(tss/(nrow(df)-1)) # 残差标准差 mod$sigma <- sqrt(rss/mod$df.residual) # 计算系数的方差-协方差矩阵 X <- model.matrix(mod) mod$vcov <- mod$sigma^2 * solve(t(X) %*% X)
- 查看结果:
summary(mod)
此时summary()会输出包含调整R²、系数的标准误、p值等指标的结果。
内容的提问来源于stack exchange,提问作者nivet3426
相关产品推荐
相关产品推荐

