Математическая проблема в формуле, поиск прямой математической функции

#math #plot #formula #calculation

#математика #график #формула #вычисление

Вопрос:

Зная x, p и s, я пытаюсь решить эту проблему в R: найти N таких, как qnorm (p, N, s) = q

Пример: Найдите N таких, как 30==qnorm(0.05, N, 3)

Мое решение:

 x<-seq(30, 50, 0.1)
y<-qnorm(0.05, x, 3)
plot(x,y)
  

Глядя на график, решение составляет около 35.
Я могу уточнить ответ, следуя этому пробному методу.

Мой вопрос: есть ли прямая функция для решения этой проблемы?

Ответ №1:

Ключевым моментом здесь является понимание того, что qnorm(0.05, N, 3) это то же qnorm(0.05, 0, 3) N самое, что и, поскольку все mean , что делает параметр, — это смещение всего распределения влево или вправо. Итак, если мы возьмем 30 = qnorm(0.05, N, 3) и изменим ее, мы получим:

 N <- 30 - qnorm(0.05, 0, 3)

N
#> [1] 34.93456
  

Или обобщить:

 inv.qnorm <- function(goal, sd, p) goal - qnorm(p, 0, sd)
  

Это дает нам ответ с большей точностью, скоростью и использованием памяти, чем можно было бы достичь с помощью подхода поиска последовательностей.

Ответ №2:

По сути, я создаю вектор средних значений, центрированный на цели с длиной 2*standard_deviation*qnorm(1-p/2) , а затем получаю элемент этого вектора, который имеет минимальное расстояние от цели, и возвращаю его

 inv.qnorm <- function(goal, sd, p, precision=.0001){
  x <- seq(goal - sd* qnorm(1-p/2), goal   sd* qnorm(1-p/2), precision)
  x[which.min(abs(qnorm(p, x, sd)-goal))]
}
inv.qnorm(30, 3, .05)
#> [1] 34.93461