[R]線形回帰に非負制約を入れるやり方 [データサイエンス、統計モデル]
線形回帰で、この変数は必ず0以上の値が欲しいという場合があるかもしれません。
基本的には、この様な制約は入れない方が良いです。
というのは、最尤法や最小二乗法で推定する場合、そのパラメータが負である場合が妥当だと推定しているにもかかわらず、無理やりに0以上にしてしまうわけです。
無理に非負制約を入れた結果、どうなるかと言えば、おそらく、推定されたパラメータは0になってしまいます。
(↑)という前提で・・・
通常のlmやglmではなく、lavaanというパッケージを使って、線形回帰に非負制約を入れるやり方について。
lavaanのモデルの書き方(制約なしの場合)
目的変数: y
説明変数: x1, x2
model_1 <- "
y ~ x1 + x2
myLable1 > 0
y ~ 1
"
lavaanのモデルの書き方(制約ありの場合)
目的変数: y
説明変数: x1, x2
制約: x1 > 0
model_1 <- "
y ~ myLable1 * x1 + x2
myLable1 > 0
y ~ 1
"
myLable1 > 0
という条件を加えるとできます。
基本的には、この様な制約は入れない方が良いです。
というのは、最尤法や最小二乗法で推定する場合、そのパラメータが負である場合が妥当だと推定しているにもかかわらず、無理やりに0以上にしてしまうわけです。
無理に非負制約を入れた結果、どうなるかと言えば、おそらく、推定されたパラメータは0になってしまいます。
(↑)という前提で・・・
通常のlmやglmではなく、lavaanというパッケージを使って、線形回帰に非負制約を入れるやり方について。
lavaanのモデルの書き方(制約なしの場合)
目的変数: y
説明変数: x1, x2
model_1 <- "
y ~ x1 + x2
myLable1 > 0
y ~ 1
"
lavaanのモデルの書き方(制約ありの場合)
目的変数: y
説明変数: x1, x2
制約: x1 > 0
model_1 <- "
y ~ myLable1 * x1 + x2
myLable1 > 0
y ~ 1
"
myLable1 > 0
という条件を加えるとできます。