Learn R Programming

hpa (version 1.0.1)

dhpa: Density function hermite polynomial approximation

Description

This function calculates density function hermite polynomial approximation.

Usage

dhpa(x = matrix(1, 1), pol_coefficients = numeric(0),
  pol_degrees = numeric(0), given_ind = logical(0),
  omit_ind = logical(0), mean = numeric(0), sd = numeric(0))

Arguments

x

numeric matrix of density function arguments. Note that x rows are observations while variables are columns.

pol_coefficients

numeric vector of polynomial coefficients.

pol_degrees

non-negative integer vector of polynomial degrees.

given_ind

logical vector indicating wheather corresponding component is conditioned. By default it is a logical vector of FALSE values.

omit_ind

logical vector indicating wheather corresponding component is omitted. By default it is a logical vector of FALSE values.

mean

numeric vector of expected values.

sd

positive numeric vector of standard deviations.

Value

This function returns density function hermite polynomial approximation at point x.

Details

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 random variables joint density function
##at point (0,1, 0.2, 0.3) 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).

#Prepare initial values
x <- matrix(c(0.1, 0.2, 0.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[which(colSums(pol_ind == c(1, 0, 2)) == pol_degrees_n)] <- 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 density approximation at point x
dhpa(x = x,
	pol_coefficients = pol_coefficients, pol_degrees = pol_degrees,
	mean = mean, sd = sd)
	
#Condition second component to be 0.5
#Substitute x second component with conditional value 0.5
x <- matrix(c(0.1, 0.5, 0.3), nrow = 1)
#Set TRUE to the second component indicating that it is conditioned
given_ind <- c(FALSE, TRUE, FALSE)

#Calculate conditional (on x2=0.5) density approximation at point x
dhpa(x = x,
	pol_coefficients = pol_coefficients, pol_degrees = pol_degrees,
	mean = mean, sd = sd,
	given_ind = given_ind)
	
#Consider third component marginal distribution
#conditioned on the second component 0.5 value
#Set TRUE to the first component indicating that it is omitted
omit_ind <- c(TRUE, FALSE, FALSE)

#Calculate conditional (on x2=0.5) marginal (for x3) density approximation
#at point x
dhpa(x = x,
	pol_coefficients = pol_coefficients, pol_degrees = pol_degrees,
	mean = mean, sd = sd,
	given_ind = given_ind, omit_ind = omit_ind)
# }

Run the code above in your browser using DataLab