net.finmath.montecarlo.conditionalexpectation.MonteCarloConditionalExpectationRegression Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of finmath-lib Show documentation
Show all versions of finmath-lib Show documentation
finmath lib is a Mathematical Finance Library in Java.
It provides algorithms and methodologies related to mathematical finance.
/*
* (c) Copyright Christian P. Fries, Germany. All rights reserved. Contact: [email protected].
*
* Created on 13.08.2004
*/
package net.finmath.montecarlo.conditionalexpectation;
import net.finmath.functions.LinearAlgebra;
import net.finmath.stochastic.RandomVariableInterface;
/**
* A service that allows to estimate conditional expectation via regression.
* In oder to estimate the conditional expectation, basis functions have to be
* specified.
*
* The class can either estimate and predict the conditional expectation within
* the same simulation (which will eventually introduce a small foresight bias)
* or use a different simulation for estimation (using basisFunctionsEstimator
)
* to predict conditional expectation within another simulation
* (using basisFunctionsPredictor
). In the latter case, the
* basis functions have to correspond to the same entities, however, generated in
* different simulations (number of path, etc., may be different).
*
* @author Christian Fries
*/
public class MonteCarloConditionalExpectationRegression implements MonteCarloConditionalExpectation {
private RandomVariableInterface[] basisFunctionsEstimator = null;
private RandomVariableInterface[] basisFunctionsPredictor = null;
/**
* Creates a class for conditional expectation estimation.
*
* @param basisFunctions A vector of random variables to be used as basis functions.
*/
public MonteCarloConditionalExpectationRegression(RandomVariableInterface[] basisFunctions) {
super();
this.basisFunctionsEstimator = basisFunctions;
this.basisFunctionsPredictor = basisFunctions;
}
/**
* Creates a class for conditional expectation estimation.
*
* @param basisFunctionsEstimator A vector of random variables to be used as basis functions for estimation.
* @param basisFunctionsPredictor A vector of random variables to be used as basis functions for prediction.
*/
public MonteCarloConditionalExpectationRegression(RandomVariableInterface[] basisFunctionsEstimator, RandomVariableInterface[] basisFunctionsPredictor) {
super();
this.basisFunctionsEstimator = basisFunctionsEstimator;
this.basisFunctionsPredictor = basisFunctionsPredictor;
}
@Override
public RandomVariableInterface getConditionalExpectation(RandomVariableInterface randomVariable) {
// Get regression parameters x as the solution of XTX x = XT y
double[] linearRegressionParameters = getLinearRegressionParameters(randomVariable);
// Calculate estimate, i.e. X x
RandomVariableInterface[] basisFunctions = getNonZeroBasisFunctions(basisFunctionsPredictor);
RandomVariableInterface conditionalExpectation = basisFunctions[0].mult(linearRegressionParameters[0]);
for(int i=1; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy