Как решить выражение с 2 переменными, которые находятся в pchisq () в R? - PullRequest
0 голосов
/ 11 октября 2018

Я новичок и пытаюсь решить математическое выражение, которое имеет две переменные, ca и y , и на самом деле я хочу знать только значение переменной ca, потому что переменнаяy будет интегрирован, как показано ниже:

#---time start---#
ptm <- proc.time()

library(pracma)

U = 14; L = 7; d = (U-L)/2;
T = ( 3*U+L )/(3+1); 
Du = U-T; Dl = T - L; d_star = min(Du,Dl);
du = d/Du; dl = d/Dl;
alpha = 0.05;
aLe = 0.05;
n = 100;

ksi_given = -3;

if (ksi_given <= 0){
  sigma = fzero(function(x) aLe - (x^2)*(  (dl^2*ksi_given^2+1)/d_star^2  ), c(0,0.5) )$x ;
  mu = ksi_given*sigma + T;
  B = n*(  (dl*ksi_given)^2 + 1  )/aLe;
  C = (dl*ksi_given)^2/(d_star/sigma)^2 + 1/(d_star/sigma)^2;
  b = d_star/sigma;
}else{
  sigma = fzero(function(x) aLe - (x^2)*(  (du^2*ksi_given^2+1)/d_star^2  ), c(0,0.5) )$x ;
  mu = ksi_given*sigma + T;
  B = (   n*(  (du*ksi_given)^2 + 1  )   )/aLe;
  C = (du*ksi_given)^2/(d_star/sigma)^2 + 1/(d_star/sigma)^2;
  b = d_star/sigma;
}


fun = function(ca,y) { pchisq( B*ca-y, n-1)* ( 1/ (2*sqrt(y)) )* (   (dl^-1)*normpdf( (dl^-1)*sqrt(y) + sqrt(n)*(ksi_given) ) + (du^-1)*normpdf( (du^-1)*sqrt(y) - sqrt(n)*(ksi_given) )    ) };

fun2 = function(ca)  alpha - integrate(fun(ca,y),lower = 0.0001,upper = B*ca);

ca = fzero(function(ca) alpha - integrate(function(ca,y) { pchisq( B*ca-y, n-1)* ( 1/ (2*sqrt(y)) )* (   (dl^-1)*normpdf( (dl^-1)*sqrt(y) + sqrt(n)*(ksi_given) ) + (du^-1)*normpdf( (du^-1)*sqrt(y) - sqrt(n)*(ksi_given) )    ) },lower = 0.0001,upper = B*ca), aLe);

О выражении, которое я буду использовать для решения fzero (), оно создается с помощью следующих шагов:

  1. Существуетпервоначально выражение fun , которое имеет две переменные, ca и y.
  2. Я буду использовать integrate () для интегрирования fun по переменной y, а затем получу fun2 .

Наконец, я попытаюсь использовать fzero (), чтобы решить значение ca в fun2, как моя последняя строка кода.

К сожалению, R возвращает сообщение об ошибке, например:

Ошибка в pchisq (B * ca - y, n - 1): аргумент "y" отсутствует, по умолчанию нет

Я также пробовал этот модифицирующий код

ca = fzero(function(ca) fun2(ca), aLe);

, но он не работает.

Кто-нибудь может дать мне несколько советов по моей проблеме, чтобы правильнополучить значение ca?

Означает ли это, что pchisq () не может использовать переменные в качестве своих параметров?или я неправильно понял использование function () или integrate () или fzero ()?

Надеюсь, вы можете дать мне несколько советов!Спасибо!

...