r - 如何在 R、Excel/VBA 中对解释变量的所有不同组合的时间序列数据运行不同的多元线性回归?
问题描述
我是编码和 R 的新手,希望得到您的帮助。对于我的分析,我试图对具有 1 个因变量(Y)和 4 个自变量(X1、X2、X3、X4)的时间序列数据进行回归。所有这些变量(Y 和 X)都有 4 种不同的变换(例如,对于 X1 - X1、SQRT(X1)、Square(X1) 和 Ln(X1))。我想对 Y (Y, SQRT(Y), Square(Y), Ln(Y)) 的所有可能组合和 X 值的所有组合运行回归,以便最后我可以通过查看R 平方值在其转换中选择哪个变量。
我目前正在使用 R 中的代码进行线性回归并手动更改变量,这需要花费大量时间。也许有一个循环或我可以用于回归的东西?等待您的热心帮助。谢谢
lm(Y ~ X1 + X2 + X3 + X4)
lm(SQRT(Y) ~ X1 + X2 + X3 + X4)
lm(Square(Y) ~ X1 + X2 + X3 + X4)
lm(Ln(Y) ~ 1 + X2 + X3 + X4)
lm(Y ~ SQRT(X1) + X2 + X3 + X4)
lm(Y ~ Square(X1) + X2 + X3 + X4)
....
lm(ln(Y)~ ln(X1) + ln(X2) + ln(X3) + ln(X4))
这是我的原始代码。
Regression10 <- lm(Final_Data_v2$`10 KW Installations (MW)`~Final_Data_v2$`10 KW Prio Installations (MW)`+Final_Data_v2$`FiT 10 KW (Cent/kWh)`+Final_Data_v2$`Electricity Prices 10 kW Cent/kW`+Final_Data_v2$`PV System Price (Eur/W)`)
summary(Regression10)
Regressionsqrt10 <- lm(Final_Data_v2$`SQRT(10 KW Installations (MW))`~Final_Data_v2$`10 KW Prio Installations (MW)`+Final_Data_v2$`FiT 10 KW (Cent/kWh)`+Final_Data_v2$`Electricity Prices 10 kW Cent/kW`+Final_Data_v2$`PV System Price (Eur/W)`)
summary(Regressionsqrt10)
等等..
这是我的数据的链接:链接
解决方案
考虑expand.grid
所有系数组合,使用 . 过滤每个列名grep
。然后调用模型函数,该函数采用带有Map
(wrapper to mapply
) 的动态公式来构建lm
N=1,024 项的对象列表(等于所有系数组合)。
下面运行平方根和平方的等效多项式运算。注意:grep
仅需要对实际变量名称进行调整。
coeffs <- c(names(Final_Data_v2),
paste0("I(", names(Final_Data_v2), "^(1/2))"),
paste0("I(", names(Final_Data_v2), "^2)"),
paste0("log(", names(Final_Data_v2), ")"))
# BUILD DATA FRAME OF ALL COMBNS OF VARIABLE AND TRANSFORMATION TYPES
all_combns <- expand.grid(y_var = coeffs[grep("10 KW Installations (MW)", coeffs)],
x_var1 = coeffs[grep("10 KW Prio Installations (MW)", coeffs)],
x_var2 = coeffs[grep("FiT 10 KW (Cent/kWh)", coeffs)],
x_var3 = coeffs[grep("Electricity Prices 10 kW Cent/kW", coeffs)],
x_var4 = coeffs[grep("PV System Price (Eur/W)", coeffs)],
stringsAsFactors = FALSE)
# FUNCTION WITH DYNAMIC FORMULA TO RECEIVE ALL POLYNOMIAL TYPES
proc_model <- function(y, x1, x2, x3, x4) {
myformula <- paste0("`",y,"`~`",x1,"`+`",x2,"`+`",x3,"`+`",x4,"`")
summary(lm(as.formula(myformula), data=Final_Data_v2))
}
# MAP CALL PASSING COLUMN VALUES ELEMENTWISE AS FUNCTION PARAMS
lm_list <- with(all_combns, Map(proc_model, y_var, x_var1, x_var2, x_var3, x_var4))
推荐阅读
- python-3.x - 如何使用 print() 在变量前面添加字符
- typescript - 如何使用 JSDoc 为递归闭包编写显式返回类型注释
- spring - 为什么在 Spring MVC 中发送 json 请求并使用 json 时出现 415 错误?
- vue.js - Vue 为突变初始化数据的道具,但数据()中的错误:“TypeError:无法读取未定义的属性'propsTitle'”
- azure - 在 ARM 模板中使用 dependsOn 属性
- android - NativeScript TextView:textTransform 无法更新
- sql - 如何让 SQL Pivot 显示多于一行
- android - 无法从服务生成的广播接收器获取数据?
- javascript - 如何在 React.JS 中将状态从子组件传递给父组件?
- javascript - fromcharcode 的正则表达式示例