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")
ご協力ありがとうございます。
回帰から明示的な切片を減算し、切片のないモデルに適合させることができます。
> 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)は右側にあるはずです)。
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))
オフセットと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")