оценка численного интегрирования для всех выборочных наблюдений - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно рассчитать эту интеграцию численно, а затем оценить ее значение для каждого наблюдения. Я пытался сделать это, используя функцию интегрирования, но каждый раз, когда я получал сообщение об ошибке. вот мой код:

    `rm(list = ls(all = TRUE)) # Remove all objects in R console
set.seed(123456) # Set the seed for reproducible results.default for the program to fix initial values to start with in each time.
install.packages("MASS")
library (MASS)  ## Simulate from a Multivariate Normal Distribution
n=10 # sample size
mu=c(0.3,0.7029) # true values of the mean vector of bivariate normal variables
var.cov<-matrix(c(10,0,0,10),nrow=2,ncol=2,byrow=T) #variance covariance matrix of the bivariate normal random variables    
y= mvrnorm(n, mu, var.cov)#generating the bivariate normal random variables
theta.rad=rep(NA,times=n)
for (ii in 1:n){
  if (y[ii,1] > 0 & y[ii,2]>=0) {theta.rad[ii]=atan(y[ii,2]/y[ii,1])}
  else if (y[ii,1] < 0) {theta.rad[ii]=(atan(y[ii,2]/y[ii,1]))+pi}
  else if (y[ii,1] > 0 & y[ii,2]<0) {theta.rad[ii]=atan(y[ii,2]/y[ii,1])+2*pi}
  else if (y[ii,1] == 0 & y[ii,2]>0) {theta.rad[ii]=pi/2}
  else if (y[ii,1] ==0 & y[ii,2]<0) {theta.rad[ii]=3*pi/2}
}# calculating the angles
u=cbind(cos(theta.rad),sin(theta.rad)) #constructing the main matrix (cos(theta,sin(theat)))
integral=function(uu){
  f=function(r){
  t=1/sqrt(var.cov[1,1])
  tt=t*uu%*%mu
  phi=log(1+((tt*pnorm(tt))/dnorm(tt)))
  aa=r*(exp((log(r/var.1))-(r^2/(2*var.1))+(r*(uu%*%mu)/var.1)-phi))
  return(aa)
  }
  integrate(f,0,Inf)
}
integral(u)

Я получил эти сообщения об ошибках: Ошибка в f (x, ...): тусклые [продукт 10] не соответствуют длине объекта [15] Дополнительно: предупреждающее сообщение: В r * (uu% *% mu): длинная длина объекта не кратна короткой длине объекта

Ошибка в f (x, ...): тусклые [продукт 10] не соответствуют длине объекта [15] Дополнительно: предупреждающее сообщение: В r * (uu% *% mu): длинная длина объекта не кратна короткой длине объекта

1 Ответ

0 голосов
/ 07 ноября 2018

Для интеграции требуется векторизованная функция f. Извлеките свое f из вложенной интегральной функции. Проверьте f с помощью входов 1 и 1:10 и посмотрите, что произойдет. integrate пытается умножить вектор r на матрицу n * 2 (uu %*% mu) и не может этого сделать, потому что r не обязательно имеет длину n (или ее кратное число).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...