0

データフレームxとyがあり、yの最大値を知っています。このデータを2次モデルに適合させたいと思います。最大値を知っているRでどうすればそれを行うことができますか?最大値がわからない場合は、lm(y〜x + I(x ^ 2))に適合させます。誰かがこれについて考えを持っていますか?前もって感謝します!

4

2 に答える 2

8

制約の対象となる二乗和を最小化する必要があります。lmこのような制約は許可されていないため、などの一般的な最適化関数を使用する必要がありますoptim。これがそれを行うことができる1つの方法です。

いくつかのデータを作成します。ここでは、既知の最大値は50であると言います。

set.seed(5)
d <- data.frame(x=seq(-5, 5, len=51))
d$y <- 50 - 0.3*d$x^2 + rnorm(nrow(d))
M <- 50

与えられた二次および線形係数と与えられた最大Mを持つxの点の二次曲線を取得する関数を作成します。微積分は簡単です。詳細については、duffymoの回答を参照してください。

qM <- function(a, b, x, M) {
  c <- M - (3*b^2)/(4*a)
  a*x^2 + b*x + c
}

与えられた二次および線形係数を持つ二次曲線とdのデータの間の二次和を取得する関数を作成します。

ff <- function(ab, d, M) {
  p <- qM(ab[1], ab[2], d$x, M)
  y <- d$y
  sum((p-y)^2)
}

開始値として使用する通常のlm近似を取得します。

m0 <- lm(y ~ I(x^2) + x, data=d)
start <- coef(m0)[2:3]

関数の係数を最適化しffます。

o <- optim(start, ff, d=d, M=M)
o$par

フィットの最大値が50であることを示すプロットを作成します。元のlmフィット感はありません。

plot(d)
xs <- seq(-5, 5, len=101)
lines(xs, predict(m0, newdata=data.frame(x=xs)), col="gray")
lines(xs, qM(o$par[1], o$par[2], xs, M))
abline(h=50, lty=3)

lmフィットとmyフィットを比較した画像

于 2011-10-27T15:46:31.633 に答える
0

微積分を使用して、最大点の式を計算します。微分すると方程式の定数の一部が削除されるため、その最大値が何である必要があるかがわかっていると、計算が簡単になります。

正しく思い出せば、1変数の単関数はf'(x)=0およびf''(x)<0で最大値を持ちます。これを確認してください。

したがって、関数がf(x)の場合:

f(x) = a0 + a1*x + a2*x*x
f'(x) = a1 + 2*a2*x
f''(x) = 2*a2

2番目の方程式をゼロに設定して停留点を取得し、次にそのxの値を3番目の方程式に入れて、それが最大か最小かを調べます。

于 2011-10-27T15:11:29.657 に答える