#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