[解決済み] Rのユニルート解
2022-02-17 15:18:36
質問
次の関数の根を求めたい。
x=0.5
f <- function(y) ((1-pbeta(1-exp(-0.002926543
*( 107.2592+y)^1.082618 *exp(0.04097536*(107.2592+y))),shape1=0.2640229,shape2=0.1595841)) -
(1-pbeta(1-exp(-0.002926543*(x)^1.082618 *exp(0.04097536*(x))),shape1=0.2640229,shape2=0.1595841))^2)
sroot=uniroot(f, lower=0, upper=1000)$root
エラー in uniroot(f, lower = 0, upper = 1000) : 終了時の f() の値 の点が逆符号になっていない
どうすればこのエラーを解決できますか?
どのように解決するのですか?
uniroot()
と使用上の注意
uniroot
が実装されているのは、粗悪な
二等分法
. このような方法は,以下のように非常に単純です.
(準)ニュートン法
しかし、根が存在することを保証するために、より強い仮定が必要です。
f(lower) * f(upper) < 0
.
このような仮定は十分条件ではあっても必要条件ではないので、かなり面倒なことになります。実際には、もし
f(lower) * f(upper) > 0
しかし、これは100%確実ではないので、二等分法はそのリスクを負うことができません。
この例で考えてみましょう。
# a quadratic polynomial with root: -2 and 2
f <- function (x) x ^ 2 - 4
明らかに
[-5, 5]
. しかし
uniroot(f, lower = -5, upper = 5)
#Error in uniroot(f, lower = -5, upper = 5) :
# f() values at end points not of opposite sign
実際には、二等分法の使用には、次のような観察/検査が必要です。
f
そのため、ルートが存在する妥当な区間を提案することができます。Rでは
curve()
:
curve(f, from = -5, to = 5); abline(h = 0, lty = 3)
プロットから、ルートが存在するのは
[-5, 0]
または
[0, 5]
. なので、これらは問題なく動作します。
uniroot(f, lower = -5, upper = 0)
uniroot(f, lower = 0, upper = 5)
あなたの問題
では、あなたの作った関数を試してみましょう(読みやすくするために何行かに分けています。また、このようにすると正しさを確認しやすくなります)。
f <- function(y) {
g <- function (u) 1 - exp(-0.002926543 * u^1.082618 * exp(0.04097536 * u))
a <- 1 - pbeta(g(107.2592+y), 0.2640229, 0.1595841)
b <- 1 - pbeta(g(x), 0.2640229, 0.1595841)
a - b^2
}
x <- 0.5
curve(f, from = 0, to = 1000)
この関数が水平線であるわけがない。ルートがあるわけがない
-
を確認します。
f
上記は、本当にあなたが望む正しいことをしているのでしょうか?何かが間違っているのでは?g
括弧の位置が違うのでは? -
を取得したら
f
を使用します。curve
を使用して、ルートが存在する適切な区間を調べます。次にuniroot
.
関連
-
[解決済み] 変数の型(リスト)が無効です
-
[解決済み] write.tableしようとすると、未実装の型リストが表示される。
-
[解決済み】R 置換する項目数が置換長の倍数でない/しかし結果は正しい
-
[解決済み】Rで結果の行数がベクトル長(arg 2)の倍数でない件
-
[解決済み】 .subset2(x, i, exact = exact)のエラー:Rの添え字が範囲外である。
-
[解決済み】 eval(expr, envir, enclos) でのエラー : オブジェクトが見つかりません。
-
[解決済み] na.fail.defaultのエラー:オブジェクトの値が見つからない - しかし、値が見つからないことはありません。
-
[解決済み】行列式で「数値/複雑な行列/ベクトルの引数を必要とする」というエラーが発生する?
-
[解決済み] Rを再起動せずにパッケージをアンロードする方法
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
[解決済み】'builtin'型のオブジェクトはsubsetableではない【重複
-
[解決済み】RでのMLEエラー:'vmmin'の初期値が有限でない
-
[解決済み】 colMeans(x, na.rm = TRUE) のエラー : KNN分類では 'x' は数値でなければならない
-
[解決済み】「'dimnames' [1]の長さが配列の範囲と等しくない」とはどういう意味ですか?
-
[解決済み】 lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) のエラー : 'y' の NA/NaN/Inf, あらゆる方法を試したが解決しなかった。
-
[解決済み】Rはプロットするが、アブラインを描画しない
-
[解決済み】randomForestの実行予測で「NA/NaN/Inf in foreign function call (arg 7)」をなくすには?
-
[解決済み】dplyr: "Error in n(): 関数は直接呼ばれるべきではありません"
-
[解決済み】起動時にパーをデフォルト値にリセットする方法