2011-09-07 24 views
28

Rのlm()関数を使って線形回帰を計算したいと思います。さらに回帰の勾配を求めたいと思います。既知の固定切片を使った線形回帰R

私はインターネット上の例を見つけましたが、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") 

あなたの助けになるでしょう。

答えて

33

あなたはregressandからの明示的な切片を減算して、切片のないモデルを当てはめることができます:

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

0 +lmによってインターセプトのフィッティングを抑制することができます。

編集は、フィット感をプロット

> abline(intercept, coef(fit)) 

P.S.を使用するにはモデル内の変数は、通常y ~ xではなく、x ~ yではありません(つまり、回帰記号は左側に、回帰記号は右側に表示されます)。

+3

または 'I(X - 1.0)であると仮定〜Y-1 'は、同様に切片のフィッティングをsurpresses。 –

+2

@Joris Meys:はい。私は2つの方法が同義であると信じています。私は2つの「-1」という用語を避け、どちらがどちらであるかを説明しなければならないもう一つの方法を選んだ。 – NPE

+0

しかし、回帰曲線のアブライン(regExp、col = "green")をプロットすると、1を通らない。私はlm ouputからスロープ(および/またはインターセプト)を抽出する方法を理解していない。私にとっては、coef配列の値の位置を常に知っている必要があり、(そして位置が正しいことを期待して)抽出しているように見えます。したがって、正しい回帰曲線をプロットするために、次のコードを「ゴールデン・ウェイ」としますか? –

13

私はあなたが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)) 
1

をそして私()。私はまた、あなたがあなたの傍受を設定することができるので、(BondedDustのような)より簡単に作業することができます。

インターセプトが10

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

関連する問題