簡體   English   中英

如何擬合知道R的最大值的二次模型?

[英]How to fit a quadratic model knowing the maximum in R?

我有一個數據框x和y,我知道y的最大值。 我想將此數據擬合為二次模型。 如何在R中知道最大值? 如果我不知道最大值,則將其與lm(y〜x + I(x ^ 2))擬合。 誰能對此有所了解? 提前致謝!

您必須根據約束最小化平方和; lm不允許這樣的約束,因此您必須使用通用優化函數,例如optim 這是可以完成的一種方法。

整理一些數據。 在這里,我會說已知的最大值是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

創建一個函數,以給定x處具有給定的二次系數和線性系數以及給定的最大M值獲得二次曲線。 有關詳細信息,請參見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適合和我適合的圖像

我將使用微積分來計算最大點的表達式。 微分將消除方程中的某些常數,因此,如果您知道該最大值需要多少,則計算會更容易。

如果我沒記錯的話,一個簡單的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

將第二個方程設置為零以獲得固定點,然后將x的值放到第三個方程中以找出它是最大值還是最小值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM