No.15423 Re: Rによる回帰分析について 【青木繁伸】 2011/10/01(Sat) 18:44
> 「勾配が特異です」とエラーが出てしまい
というのは,初期値が悪いからです(他に問題がないとすれば)。何らかの方法で,「ましな」初期値を探索するしかないですね。
> 回帰式中に場合分けを含む場合の記述(ifelseを用いての記述)が間違っているのでしょうか?
そんなことはないですよ。以下のようにテストデータを作って,「適切な」初期値でやれば,ちゃんと答えが出ます。初期値として,全部1を与えたのですが,「適切」だったようです。b1 <- 1.1実行結果は以下の通り。
b2 <- 2.2
b3 <- 3.3
b4 <- 4.4
set.seed(12345)
x1 <- rnorm(100)
x2 <- rnorm(100)
y <- round(b1*ifelse(b3*x1-b4-x2 > 0, 1, 0)+
b2*(1-ifelse(b3*x1-b4-x2 > 0, 1, 0))*(b3*x1-b4-x2), 2)
(ans <- nls(y ~ b1*ifelse(b3*x1-b4-x2 > 0, 1, 0)+
b2*(1-ifelse(b3*x1-b4-x2 > 0, 1, 0))*(b3*x1-b4-x2),
start=list(b1=1, b2=1, b3=1, b4=1)))Nonlinear regression model
model: y ~ b1 * ifelse(b3 * x1 - b4 - x2 > 0, 1, 0) +
b2 * (1 - ifelse(b3 * x1 - b4 - x2 > 0, 1, 0)) * (b3 * x1 - b4 - x2)
data: parent.frame()
b1 b2 b3 b4
1.100 2.200 3.300 4.401
residual sum-of-squares: 0.0005689
Number of iterations to convergence: 3
Achieved convergence tolerance: 3.734e-07
No.15434 Re: Rによる回帰分析について 【FE】 2011/10/03(Mon) 00:01
ifelseの記述に間違いがないのならば,やはり初期値の問題なのですね。
わざわざテストデータを作成して実行して頂き,ありがとうございます。
今後は自分もテストデータで試してみることを考えてみます。
初期値の探索は地道にやってみます!
ありがとうございました
● 「統計学関連なんでもあり」の過去ログ--- 044 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る