42

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")

あなたの助けに感謝します。

4

3 に答える 3

47

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

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

は、切片のフィッティングを。0 +で抑制しlmます。

編集フィットをプロットするには、

> abline(intercept, coef(fit))

PSモデルの変数は、見た目が間違っています。通常y ~ xはそうではありませんx ~ y(つまり、回帰変数は左側に、回帰変数は右側に配置する必要があります)。

于 2011-09-07T11:44:12.763 に答える
19

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))
于 2011-09-07T13:25:54.060 に答える
1

私はoffsetと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")

于 2015-10-18T07:34:21.397 に答える