Находите выход, устанавливая критерии в R? - PullRequest
0 голосов
/ 06 июля 2018

Для набора ввода ( см. Ниже ), когда я запускаю следующий код R, я получаю два ответа, сохраненных в ncp. Теперь предположим, что я хочу, чтобы разница между двумя ответами в ncp (т.е. abs(ncp[2] - ncp[1])) была 1.4.

В таком случае, возможно ли вместо этого решить для наименьшего возможного df (в настоящее время df находится на входе)?

alpha = c(.025, .975);  df = 29;  q = 3   # The input

f <- function(ncp, alpha, q, df){     # Notice `ncp` is the unknown
 alpha - suppressWarnings(pt(q, df, ncp, lower.tail = FALSE)) # The function
 }

ncp <- sapply(c(alpha[1], alpha[2]),     # Root finding: finds `ncp`
     function(x) uniroot(f, c(-q, q+15), alpha = x, q = q, df = df)[[1]])    

1 Ответ

0 голосов
/ 06 июля 2018

Так как все остальные значения являются постоянными, мы можем написать функцию ncp, которая просто принимает аргумент df

ncp=function(df){
  sapply(c(alpha[1], alpha[2]),     # Root finding
         function(x) uniroot(f, c(-q, q+15), alpha = x, q = q, df = df)[[1]]/sqrt(30))
}

ncp(29)
[1] 0.1592547 0.9280011

После этого вы можете написать функцию, которая принимает абсолютную разницу значений ncp, и мы вычтем

m=function(df,y=0){
  abs(abs(diff(ncp(df)))-y)
}
Короче

, m(df,0) дает абсолютную разницу по сравнению с нулем. тогда как m(df,0.4) будет абсолютной разностью значений ncp - 0,4. Наша цель - минимизировать эту разницу абсолютных значений и y. Я подробно остановлюсь на этом.

При минимизации функции m с соответствующим значением y:

Например, давайте попробуем найти df, в котором все остальные (альфа и q) остаются постоянными, так что абсолютная разница значений ncp равна 1:

(a=optimise(m,c(1,100000),y=1))#default for minimization ie maximum=FALSE
$`minimum`
[1] 4.415955

$objective
[1] 3.798379e-08

Целевое значение равно 0, поэтому мы нашли правильное значение df, так как мы минимизировали.

ncp(a$minimum)
[1] 0.03385211 1.03385215

Из приведенных выше значений ncp вы можете сказать, что разница между этими двумя значениями действительно равна 1. Таким образом, df = 4.415955 даст нам абсолютную разницу ncp, равную 1, с указанными выше значениями alpha и q

b=ncp(a$minimum)
abs(b[2]-b[1])
[1] 1

так что я тоже могу сделать:

m(a$minimum)
[1] 1

Я склонен полагать, что теперь ясно, что означает y в качестве аргумента m.

Теперь, чтобы найти разницу в 0,4, мы просто делаем то же самое:

 optimise(m,c(1,1000000),y=0.4,maximum = F)
$`minimum`
[1] 1e+06

$objective
[1] 0.315684

Что касается этого, мы видим, что объективное значение не равно нулю, поэтому мы не сходились. Даже если мы увеличим наш диапазон, цель не изменится. Это означает, что наименьшая разница равна objective(0.315684) +0.4 =0.715684. Это наименьшая абсолютная разница для значений ncp с этими альфа и q. т.е.

m(Inf)
[1] 0.7156824

Таким образом, мы не можем иметь абсолютную разницу 0,4, но если мы изменим альфа и q, мы получим абсолютную разницу 0,4

Для всех значений oy y таких, что m(Inf)<y<m(1), мы получим df, который будет удовлетворять условию

...