R语言拟合自定义回归方程:lm用法及替代方案咨询
模型拟合方案解答
结论
你给出的线性模型完全可以使用lm()函数实现拟合,该模型所有项均为线性可加结构,分类变量type、month会被lm()自动处理为虚拟变量,完全匹配你预设的参数定义。
lm()实现步骤
1. 匹配时间序列变量到主数据集
你单独存储的XX是zoo格式时间序列,需要先按日期匹配合并到主数据集Data中,代码如下:
library(zoo) # 将XX转为带time列的数据框 xx_df <- data.frame(time = index(XX), xx = coredata(XX)) # 按日期左连接到主数据集 Data <- merge(Data, xx_df, by = "time", all.x = TRUE)
2. 调用lm()拟合模型
公式直接对应你给出的模型结构即可,无需额外处理分类变量:
fit <- lm(y ~ xx + type + month + M, data = Data) # 查看拟合参数结果 summary(fit)
拟合结果中:
- 截距项对应
Beta[0] xx的系数对应Beta[1]type各水平的系数对应Beta[2]month各水平的系数对应Beta[3]M的系数对应Beta[4]
可替代实现方案
- 如果你要处理该面板数据的固定/随机效应检验,可以使用
plm包的plm()函数,专门适配分组时间序列数据,语法和lm()高度兼容:library(plm) # 指定分组维度为type,时间维度为time fit_plm <- plm(y ~ xx + month + M, data = Data, index = c("type", "time"), model = "pooling") - 如果你需要处理高维固定效应、计算稳健标准误,可以使用
lfe包的felm()函数,运算效率远高于基础lm()。 - 如果你的数据存在误差项时间自相关、异方差问题,可以使用
nlme包的gls()函数自定义误差协方差结构,提升拟合统计有效性。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

