У меня есть функция, которая выглядит так: g(x) = f(x) - a^b/f(x)^b
g(x) - известная функция, предоставлен вектор данных.
f(x) - скрытый процесс.
a,b - параметры этой функции.
Из вышеизложенного получаем соотношение:
f(x) = inverse(g(x))
Моя цель — оптимизировать параметры a и b таким образом, чтобы f(x) была как можно ближе
к нормальному распределению. Если мы посмотрим на нормальный график f(x) Q-Q (прилагается), моя цель состоит в том, чтобы минимизировать расстояние между f(x) и прямой линией, представляющей нормальное распределение, путем оптимизации параметров a и < сильный>б.
Я написал следующий код:
g_fun <- function(x) {x - a^b/x^b}
inverse = function (f, lower = 0, upper = 2000) {
function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1]
}
f_func = inverse(function(x) g_fun(x))
enter code here
# let's made up an example
# g(x) values are known
g <- c(-0.016339, 0.029646, -0.0255258, 0.003352, -0.053258, -0.018971, 0.005172,
0.067114, 0.026415, 0.051062)
# Calculate f(x) by using the inverse of g(x), when a=a0 and b=b0
for (i in 1:10) {
f[i] <- f_fun(g[i])
}
У меня два вопроса:
- Как передать параметры a и b в функции?
- Как выполнить эту задачу оптимизации, то есть найти такие a и b, чтобы f(x) аппроксимировало нормальное распределение.
G(x)
(обратная функция). Это не будетf(x)
, так что ваша проблема неправильно сформулирована. - person Carl Witthoft   schedule 28.11.2013