4

一部のデータで最小二乗回帰を行っています。関数の形式は次のとおりです

y ~ a + b*x

回帰直線が特定の点 P(x,y) (原点ではない) を通過するようにします。どうやってやるの?

R では lm コマンドを使用し、Matlab では基本的なフィッティング GUI を使用しています。constrOptim コマンド (R) を使用するか、原点を点 P に変換できると思いますが、それを行うための特定のコマンドがあるかどうか疑問に思っています。

これらのプログラムの 1 つのソリューションのみが必要で、他のプログラムで係数を使用できます。

4

1 に答える 1

5

データを適切に中央に配置し、「原点」を通じて回帰を強制するだけです。

lm(y ~ I(x-x0)-1, offset=rep(y0,nrow(dat)) data=dat)

それに応じて切片係数を調整する必要がある場合があります。

編集済み:offset正しい長さのベクトルである必要があります。これを行う別の方法は次のとおりです。

set.seed(1)
d <- data.frame(x=1:10,y=rnorm(10,mean=1:10,sd=0.1))
x0 <- 3
y0 <- 3
(lm1 <- lm(y ~ I(x-x0)-1, offset=y0, data=data.frame(d,y0)))

これにより、勾配は 1.005 になります。切片は になるcoef(lm1)*(-y0/x0)と思います。

于 2013-06-03T13:34:44.110 に答える