【发布时间】:2017-01-18 22:22:46
【问题描述】:
我正在尝试使用 R 插入符号对我的线性回归模型进行交叉验证。在某些情况下,我想通过 0 强制拦截。我尝试了以下方法,使用标准 lm 语法:
regressControl <- trainControl(method="repeatedcv",
number = 4,
repeats = 5
)
regress <- train(y ~ 0 + x,
data = myData,
method = "lm",
trControl = regressControl)
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) x
-0.0009585 0.0033794 `
此语法似乎适用于标准的“lm”函数,但不适用于 caret 包。有什么建议吗?
test <- lm(y ~ 0 + x,
data = myData)
Call:
lm(formula = y ~ 0 + x, data = myData)
Coefficients:
x
0.003079
【问题讨论】:
-
我相信您希望公式
y ~ -1 + x明确排除截距。 -
@aichao 这两个在大多数函数中都可以工作,但是
caret的实现使得如果不编辑源代码就很困难。 -
@Chrisss:谢谢!很高兴知道。
-
如果你
scale你所有的数据,你的拦截将[有效地]为零。