3
$\begingroup$

I have to implement this formula:

$K(x) = \int_{0}^{0.5}q_{\theta}(x)d{\theta}$

where $q_{\theta}(x)$´s are the conditional quantiles in some $\theta$.

using a range of $\theta = [0.45; 0.40; 0.35; 0.3; 0.25; 0.2; 0.15; 0.1; 0.05]$

Note that i am integrating in $\theta$ not in $x$.

The idea is, when im in $\theta=.05$ i automatically have $q_{.05}(x)$ through:

q_theta<-rq(Y~x,tau = .05)

and so on through in the interval $\theta = [0.45; 0.40; 0.35; 0.3; 0.25; 0.2; 0.15; 0.1; 0.05]$.

q_theta<-rq(Y~x,tau = .45)
q_theta<-rq(Y~x,tau = .35)
q_theta<-rq(Y~x,tau = .3)
q_theta<-rq(Y~x,tau = .25)
q_theta<-rq(Y~x,tau = .2)
q_theta<-rq(Y~x,tau = .15)
q_theta<-rq(Y~x,tau = .1)

And i proceed to the integration, where i have no idea how to do:

My data:

set.seed(33)
N<-100
Y<- rnorm(N,0,3)
x<- runif(N)

And then, i calculate: $K(x) = \int_{0}^{0.5}q_{\theta}(x)d{\theta}$

I hope I have been clear, otherwise I redo the question.

I dont know how to build this integral function.

Any sugestion?

Thanks.

$\endgroup$

1 Answer 1

1
$\begingroup$

I guessed $d\theta$ to be $dx$. Because I can't conclude Y to be a fixed vector, I used x and y as integral function's arguments.

integrate(f, lower, upper, ...) is adaptive quadrature of functions of one variable over a finite or infinite interval. f is an R function taking a numeric first argument and returning a numeric vector of the same length.

library(quantreg)

# explanatory simple function (this function can treat only one theta)
K0 <- function(x, y){
  temp <- rq(y ~ x, tau = theta)$coef - rq(y ~ x, tau = .50)$coef
  f <- function(x) temp[1] + temp[2] * x
  integrate(f, 0, 0.5)
}
# rq(Y ~ x, tau = theta)$coef are it's coefficients. 
# Because of a primary expression,  ~[1] is a intercept, ~[2] is a slope.
# The same is true of (q_theta$coef - q_theta_50$coef), so make it a function(x) to integrate.

set.seed(33)
N<-100
Y<- rnorm(N,0,3)
x<- runif(N)        # the same length of x and y is essential
one_theta <- 0.9
K0(x = x, y = Y)
# 1.604942 with absolute error < 1.8e-14

# improvement to treat multi theta
K <- function(x, y){
  temp <- NULL
  for(i in seq.int(theta)) temp <- rbind(temp, rq(y ~ x, tau = theta[i])$coef - rq(y ~ x, tau = .50)$coef)
  temp2 <- apply(temp, 1, function(a) {
    f <- function(x) a[1] + a[2] * x
    integrate(f, 0, 0.5)
  })
  names(temp2) <- paste0("theta = ", theta)
  temp2
}

theta <- c(0.99, 0.975, 0.95, 0.90, 0.85, 0.80, 0.75)
K(x = x, y = Y)
#  :
# $`theta = 0.9`
# 1.604942 with absolute error < 1.8e-14

# $`theta = 0.85`
# 1.148646 with absolute error < 1.3e-14
# :
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.