web-dev-qa-db-ja.com

Rの既知の固定切片を使用した線形回帰

Rのlm()関数を使用して線形回帰を計算します。さらに、lm()にインターセプトを明示的に与える回帰の勾配を取得します。

インターネットで例を見つけて、R-help "?lm"を読みました(残念ながら理解できません)が、成功しませんでした。誰が私の間違いがどこにあるか教えてもらえますか?

lin <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))
plot (lin$x, lin$y)

regImp = lm(formula = lin$x ~ lin$y)
abline(regImp, col="blue")

# Does not work:
# Use 1 as intercept
explicitIntercept = rep(1, length(lin$x))
regExp = lm(formula = lin$x ~ lin$y + explicitIntercept)
abline(regExp, col="green")

ご協力ありがとうございます。

34
R_User

回帰から明示的な切片を減算し、切片のないモデルに適合させることができます。

> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)

0 +は、lmによる切片の適合を抑制します。

編集近似をプロットするには、次を使用します

> abline(intercept, coef(fit))

追伸モデル内の変数は間違った方向に見えます。通常、y ~ xではなくx ~ yです(つまり、regressandは左側に、regressor(s)は右側にあるはずです)。

38
NPE

I()を使用した解決策を受け入れたことがわかります。私はoffset()ベースのソリューションはもっと明白だと思っていましたが、好みは異なり、offsetソリューションを試した後、I()ソリューションの経済性を評価できます:

with(lin, plot(y,x) )
lm_shift_up <- lm(x ~ y +0 + 
                       offset(rep(1, nrow(lin))), 
             data=lin)
abline(1,coef(lm_shift_up))
14
42-

オフセットとI()の両方を使用しました。また、インターセプトを設定できるため、(BondedDustなどの)オフセットの操作が簡単になります。

インターセプトが10であると仮定します。

plot (lin$x, lin$y) fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x))) abline(fit,col="blue")

1
stats_lover