Learn R Programming

hpa (version 1.1.2)

etrhpa: Expected powered product hermite polynomial approximation for truncated distribution

Description

This function calculates expected powered product hermite polynomial approximation for truncated distribution.

Usage

etrhpa(
  tr_left = matrix(1, 1),
  tr_right = matrix(1, 1),
  pol_coefficients = numeric(0),
  pol_degrees = numeric(0),
  mean = numeric(0),
  sd = numeric(0),
  expectation_powers = numeric(0),
  is_parallel = FALSE
)

Arguments

tr_left

numeric matrix of left (lower) truncation limits. Note that tr_right rows are observations while variables are columns. If tr_left or tr_right is single row matrix then the same truncation limits would be applied to all observations that are determined by the first rows of these matrices.

tr_right

numeric matrix of right (upper) truncation limits. Note that tr_right rows are observations while variables are columns. If tr_left or tr_right is single row matrix then the same truncation limits would be applied to all observations that are determined by the first rows of these matrices.

pol_coefficients

numeric vector of polynomial coefficients.

pol_degrees

non-negative integer vector of polynomial degrees.

mean

numeric vector of expected values.

sd

positive numeric vector of standard deviations.

expectation_powers

integer vector of random vector components powers.

is_parallel

if TRUE then multiple cores will be used for some calculations. It usually provides speed advantage for large enough samples (about more than 1000 observations).

Value

This function returns numeric vector of expected powered product hermite polynomial approximations for truncated distribution.

Details

Expected powered product of random variables is expectation of their product given powers expectation_powers. Therefore in order to approximate expected value of i-th random vector component just set all expectation_powers to zero except it's i-th component which should be assigned 1.

Densities hermite polynomial approximation approach has been proposed by A. Gallant and D. W. Nychka in 1987. The main idea is to approximate unknown distribution density with hermite polynomial of degree pol_degree. In this framework hermite polynomial represents adjusted (to insure integration to 1) product of squared polynomial and normal distribution densities. Parameters mean and sd determine means and standard deviations of normal distribution density functions which are parts of this polynomial. For more information please refer to the literature listed below.

Parameters mean, sd, given_ind, omit_ind should have the same length as pol_degrees parameter.

References

A. Gallant and D. W. Nychka (1987) <doi:10.2307/1913241>

Examples

Run this code
# NOT RUN {
## Let's approximate some three truncated random variables powered
## product expectation for powers (3,2,1) with hermite polynomial of 
## (1,2,3) degrees which polynomial coefficients equals 1 except coefficient
## related to x1*(x^3) polynomial element which equals 2. Also suppose that 
## normal density related mean vector equals (1.1, 1.2, 1.3) while standard 
## deviations vector is (2.1, 2.2, 2.3). Suppose that lower and upper 
## truncation points are (-1.1,-1.2,-1.3) and (1.1,1.2,1.3) correspondingly.

# Prepare initial values
expectation_powers = c(3,2,1)
tr_left = matrix(c(-1.1,-1.2,-1.3), nrow = 1)
tr_right = matrix(c(1.1,1.2,1.3), nrow = 1)
mean <- c(1.1, 1.2, 1.3)
sd <- c(2.1, 2.2, 2.3)
pol_degrees <- c(1, 2, 3)

# Create polynomial powers and indexes correspondence matrix
pol_ind <- polynomialIndex(pol_degrees)
# Set all polynomial coefficients to 1
pol_coefficients <- rep(1, ncol(pol_ind))
pol_degrees_n <- length(pol_degrees)

# Assign coefficient 2 to the polynomial element(x1 ^ 1)*(x2 ^ 0)*(x3 ^ 2)
pol_coefficients[apply(pol_ind, 2, function(x) all(x == c(1, 0, 2)))] <- 2

# Visualize correspondence between polynomial elements and their coefficients
as.data.frame(rbind(pol_ind, pol_coefficients),
	row.names = c("x1 power", "x2 power", "x3 power", "coefficients"),
	optional = TRUE)
printPolynomial(pol_degrees, pol_coefficients)

# Calculate expected powered product approximation for truncated distribution
etrhpa(pol_coefficients = pol_coefficients, pol_degrees = pol_degrees,
	mean = mean, sd = sd, expectation_powers = expectation_powers,
	tr_left = tr_left, tr_right = tr_right)
# }

Run the code above in your browser using DataLab