在 R 中使用“lm”时获取缩放预测值
Obtain scaled predictor values when using `lm` in R
我在 R 中使用 lm
进行简单的多元线性回归。这是一个示例模型:
m <- lm(formula = t ~ a + b + 0, data = df1)
其中 t
、a
和 b
是 df1
中的列。该模型计算 2 个系数,我们称它们为 a.coef
和 b.coef
。如果我然后使用这个模型来预测一些其他数据,比如 df2
,我可以获得这样的预测值:
predict(m, df2)
如果我在 df2
中也有 a
和 b
列。它本质上是 returns
df2$a * a.coef + df2$b * b.coef
然而,我想要的是 df2$a * a.coef
和 df2$b * b.coef
列。 R 对它们求和并给出答案,但我想看看缩放比例如何影响这些值。
在 R 中是否有方便的方法(尤其是 lm
或 predict.lm
),还是我必须自己手动编写代码?我在 predict.lm
中使用了 terms
参数,但我无法得到任何结果。
感谢您的帮助!
编辑
我写了这个函数:
scaled.fn <- function(dt, x, y, i) {
# dt is data.table
# x is dependent column (col name as str)
# y are predictor columns (col names as vector of str)
# i is name of column to multiply, as str
dep = paste(y, collapse = " + ")
my.formula = paste(x, " ~ ", dep, sep = "")
m = lm(formula = my.formula, data = dt)
# column names in dt are named in y
return(dt[, get(i) * coef(m)[i]])
}
试试这个:
sweep(df2, MARGIN = 2, coef(m), '*')
编辑:更具体的解决方案:
sweep(df2[,c("a","b")], MARGIN = 2, coef(m), '*')
我在 R 中使用 lm
进行简单的多元线性回归。这是一个示例模型:
m <- lm(formula = t ~ a + b + 0, data = df1)
其中 t
、a
和 b
是 df1
中的列。该模型计算 2 个系数,我们称它们为 a.coef
和 b.coef
。如果我然后使用这个模型来预测一些其他数据,比如 df2
,我可以获得这样的预测值:
predict(m, df2)
如果我在 df2
中也有 a
和 b
列。它本质上是 returns
df2$a * a.coef + df2$b * b.coef
然而,我想要的是 df2$a * a.coef
和 df2$b * b.coef
列。 R 对它们求和并给出答案,但我想看看缩放比例如何影响这些值。
在 R 中是否有方便的方法(尤其是 lm
或 predict.lm
),还是我必须自己手动编写代码?我在 predict.lm
中使用了 terms
参数,但我无法得到任何结果。
感谢您的帮助!
编辑 我写了这个函数:
scaled.fn <- function(dt, x, y, i) {
# dt is data.table
# x is dependent column (col name as str)
# y are predictor columns (col names as vector of str)
# i is name of column to multiply, as str
dep = paste(y, collapse = " + ")
my.formula = paste(x, " ~ ", dep, sep = "")
m = lm(formula = my.formula, data = dt)
# column names in dt are named in y
return(dt[, get(i) * coef(m)[i]])
}
试试这个:
sweep(df2, MARGIN = 2, coef(m), '*')
编辑:更具体的解决方案:
sweep(df2[,c("a","b")], MARGIN = 2, coef(m), '*')