mcSimulation {decisionSupport} | R Documentation |
Perform a Monte Carlo simulation.
Description
This function generates a random sample of an output distribution defined as the transformation of an input distribution by a mathematical model, i.e. a mathematical function. This is called a Monte Carlo simulation. For details cf. below.
Usage
mcSimulation(
estimate,
model_function,
...,
numberOfModelRuns,
randomMethod = "calculate",
functionSyntax = "data.frameNames",
relativeTolerance = 0.05,
verbosity = 0
)
Arguments
estimate |
|
model_function |
|
... |
Optional arguments of |
numberOfModelRuns |
The number of times running the model function. |
randomMethod |
|
functionSyntax |
|
relativeTolerance |
|
verbosity |
|
Details
This method solves the following problem. Given a multivariate random variable x =
(x_1,\ldots,x_k)
with joint probability distribution P
, i.e.
x \sim P.
Then the continuous function
f:R^k \rightarrow R^l, y = f(x)
defines another random variable with distribution
y \sim f(P).
Given a probability density \rho
of x that defines P
the problem is the determination
of the probability density \phi
that defines f(P)
. This method samples the
probability density \phi
of y
as follows: The input distribution P
is provided
as estimate
. From estimate
a sample x
with numberOfModelRuns
is
generated using random.estimate
. Then the function values y=f(x)
are
calculated, where f
is model_function
.
functionSyntax
defines the syntax of model_function
, which has to be used, as
follows:
"data.frameNames"
-
The model function is constructed, e.g. like this:
profit<-function(x){ x[["revenue"]]-x[["costs"]] }
or like this:
profit<-function(x){ x$revenue-x$costs }
"matrixNames"
-
The model function is constructed, e.g. like this:
profit<-function(x){ x[,"revenue"]-x[,"costs"] }
"plainNames"
-
model_function
is constructed, e.g. like this:profit<-function(x){ revenue-costs }
Note: this is the slowest of the possibilities for
functionSyntax
.
Value
An object of class mcSimulation
, which is a list
with elements:
$x
-
data.frame
containing the sampledx -
(input) values which are generated fromestimate
. $y
-
data.frame
containing the simulatedy -
(output) values, i.e. the model function values forx
.The return of the decision model function may include the assignment of names for the output variables, e.g. like this:profit <- function(x){ revenue - costs return(list(Revenue = revenue, Costs = cost)) }
See Also
print.mcSimulation
, summary.mcSimulation
, hist.mcSimulation
, estimate
, random.estimate
Examples
#############################################################
# Example 1 (Creating the estimate from the command line):
#############################################################
# Create the estimate object:
variable=c("revenue","costs")
distribution=c("norm","norm")
lower=c(10000, 5000)
upper=c(100000, 50000)
costBenefitEstimate<-as.estimate(variable, distribution, lower, upper)
# (a) Define the model function without name for the return value:
profit1<-function(x){
x$revenue-x$costs
}
# Perform the Monte Carlo simulation:
predictionProfit1<-mcSimulation( estimate=costBenefitEstimate,
model_function=profit1,
numberOfModelRuns=10000,
functionSyntax="data.frameNames")
# Show the simulation results:
print(summary(predictionProfit1))
hist(predictionProfit1,xlab="Profit")
#############################################################
# (b) Define the model function with a name for the return value:
profit1<-function(x){
list(Profit=x$revenue-x$costs)
}
# Perform the Monte Carlo simulation:
predictionProfit1<-mcSimulation( estimate=costBenefitEstimate,
model_function=profit1,
numberOfModelRuns=10000,
functionSyntax="data.frameNames")
# Show the simulation results:
print(summary(predictionProfit1, classicView=TRUE))
hist(predictionProfit1)
#########################################################
# (c) Using plain names in the model function syntax
profit1<-function(){
list(Profit=revenue-costs)
}
# Perform the Monte Carlo simulation:
predictionProfit1<-mcSimulation( estimate=costBenefitEstimate,
model_function=profit1,
numberOfModelRuns=1000,
functionSyntax="plainNames")
# Show the simulation results:
print(summary(predictionProfit1, probs=c(0.05,0.50,0.95)))
hist(predictionProfit1)
#########################################################
# (d) Using plain names in the model function syntax and
# define the model function without name for the return value:
profit1<-function() revenue-costs
# Perform the Monte Carlo simulation:
predictionProfit1<-mcSimulation( estimate=costBenefitEstimate,
model_function=profit1,
numberOfModelRuns=1000,
functionSyntax="plainNames")
# Show the simulation results:
print(summary(predictionProfit1, probs=c(0.05,0.50,0.95)))
hist(predictionProfit1, xlab="Profit")
#############################################################
# Example 2(Reading the estimate from file):
#############################################################
# Define the model function:
profit2<-function(x){
Profit<-x[["sales"]]*(x[["productprice"]] - x[["costprice"]])
list(Profit=Profit)
}
# Read the estimate of sales, productprice and costprice from file:
inputFileName=system.file("extdata","profit-4.csv",package="decisionSupport")
parameterEstimate<-estimate_read_csv(fileName=inputFileName)
print(parameterEstimate)
# Perform the Monte Carlo simulation:
predictionProfit2<-mcSimulation( estimate=parameterEstimate,
model_function=profit2,
numberOfModelRuns=10000,
functionSyntax="data.frameNames")
# Show the simulation results:
print(summary(predictionProfit2))
hist(predictionProfit2)