15

R では、切片のないモデルを次のように指定します。

data(iris)
lmFit <- lm(Sepal.Length ~ 0 + Petal.Length + Petal.Width, data=iris)
> round(coef(lmFit),2)
Petal.Length  Petal.Width 
        2.86        -4.48 

ただし、同じモデルをキャレットで適合させると、結果のモデルには切片が含まれます。

library(caret)
caret_lmFit <- train(Sepal.Length~0+Petal.Length+Petal.Width, data=iris, "lm")
> round(coef(caret_lmFit$finalModel),2)
 (Intercept) Petal.Length  Petal.Width 
        4.19         0.54        -0.32 

caret::trainインターセプト項を除外するにはどうすればよいですか?

4

2 に答える 2

7

@rcs は、どの関数のどの行を変更する必要があるかを既に伝えています。

traceその関数を変更するために使用するだけです:

trace(caret::createModel, 
       quote(modFormula <- as.formula(".outcome ~ .-1")), at=5, print=FALSE)
caret_lmFit <- train(Sepal.Length~0+Petal.Length+Petal.Width, data=iris, "lm")
round(coef(caret_lmFit$finalModel),2)
#Petal.Length  Petal.Width 
#        2.86        -4.48 
untrace(caret::createModel)

ただし、キャレットは使用しません。予期しない結果が生じる可能性があります。また、切片をモデルから除外することは、多くの場合、良い考えではありません。

于 2013-11-29T23:29:18.857 に答える