ceRtainty: Certainty Equivalent in R"


The Certainty Equivalent analysis for financial projects and, specifically agricultural treatments, is so far implemented by commercial software, to be installed as plugins into Microsoft Excel. The ceRtainty is a small package that allows performing this analysis through R, which is free and where the data management procedures are incredibly more flexible and powerful than excel sheets.

The Stochastic Efficiency with respect to a Function (SERF) method presented by [@Hardaker2004] is currently a widely used approach in the risk-efficient evaluation treatments. Mainly SERF offers a bounded estimation, allowing researchers or analysts to use any utility function to represent the decision-maker risk profile. Additionally, unlike other methods, the analyst doesn’t need to know a priori decision-maker’s risk aversion coefficient [@Richardson2008].

SERF methodology has been used to rank treatments either in controlled or in non-controlled experiments. The SERF requires only a small set of data and makes a minimum of assumptions. Specifically, the critical data is a time-series vector of profit values for each treatment and a utility function that represents a farmer’s risk preference. With those elements, we can compute the Certainty Equivalence (CE) and the Risk Premium (RP) for every treatment.

The CE represents the sure amount for which a decision-maker remains indifferent between his/her current wealth and the risky outcome [@Hardaker2004]. The RP is the cost of the risk measure in terms of the production yield. SERF provides to decision-makers a very intuitive tool to make risk-efficient decisions by simply choosing the best-ranked treatment based on the CEs.

The ceRtainty package computes the CE values from a profit dataset and its respective risk premiums. Through this vignette, I will present how to use this package.


The package is installed by the command:

> install.packages("ceRtainty")

When the package is already installed, should be loaded by:

> library(ceRtainty)

For a complete functionality, ceRtainty also requieres:


At this time ceRtainty package is able to perform two measures:

Also is necessary to consider, even though CE can be computed for an extensive set of utility functions, the current version of ceRtainty package allows two of the most used functions (this list will increase in following versions):

Data set in ceRtainty

The ceRtainty package offers a unique (but small) dataset collected from agricultural experimental trials that were used and presented by @sotocaro2019. This data set considers three pesticide treatments plus a non-treated (control) case, in strawberry fields, for seasons 2014-15 & 2015-16. Such experiments were conducted by the Gulf Coast Research and Education Center, University of Florida. Each value represents the farmer's profit, and there are four values for each season.

The data can be invoked in following way:

> data("profitSWG")
> head(profitSWG)
     control   fracture  milstop serenade
1   539.4105 4808.04725 6277.187 6625.230
2  9923.6830 3838.34400 8709.806 7738.285
3  4136.7481  984.85261 2495.159 4479.759
4  -464.1482   22.20683 3077.641 5823.031
5 12744.1448 7932.79606 1375.915 5425.849
6  3923.3339 6313.64550 1299.130 5325.025

Computing the CEs

The function to perform the certainty equivalent is certainty(). Is very important to be clear that, depending on the utility function, the RAC should be a relative or an absolute value: $$r_a(w)=\frac{r_r(w)}{w}$$ Where $w$ is the original or initial agent's wealth, $r_a$ is the absolute RAC, and $r_r$ is the relative RAC. Power Utility function uses relative RAC, and Exponential Negative function uses absolute RAC. This is selected into the certainty function automatically when the user defines the parameter utility. That is why the user can print the RAC values employed into the CE computation, as in the following example:

# Computing the CE values, for a RAC range of 0.5-4.0, and Power utility function.

# Obtaining the CE table
certainty(data = profitSWG, ival = 0.5, fval = 4, utility = "Power")$CE_values
# Obtaining the RAC vector
# Performing the CE plot

The initial and final values of the absolute RAC vector are the parameters ival and fval respectively. The parameter wealth is 0 by default. The code computes one observation of the CE for each observation on the profit vectors. That means, when the profit vector has a length of $n$, then certainty compute a RAC vector with $n$ values between ival and fval.

When the analysis considers too many projects or treatments simultaneously, the plot could be unclear and analyze the table instead is recommended. It is possible to perform this analysis with only one project, but with at least three observation per project.

Computing the RP

The risk premium is a measure to compare among CEs. In consequence, before to compute the RP is required to compute the CE values. Therefore, the procedure is: compute the CEs, stored them in an object, and then considered such an object as the dataset for the premium function. An example of this is presented below:

# Computing and storing the CE values using Power utility function
ces <- certainty(data = profitSWG, ival = 0.5, fval = 4, utility = "Power")

ces_values  <- ces$CE_values  # store CE table
ces_rac     <- ces$RAC        # store RAC vector

# Computing the RP values respect to SERENADE treatment
premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$PremiumRisk

# Computing the RP values in percentage respect to SERENADE treatment
premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$PremiumRiskPer100

# Plotting the RP absolute values
premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$RP_plot()

The user must incorporate the utility function manually, and have to be the same employed in the CE computation.

Generating Risk Aversion Coefficients

According to @Hardaker2004 the Power utility function, which uses relative RAC, must adjust the RAC regarding the number of digits in the profit, following the formula: $$RAC_a = 1 - RAC^{d(|int(max(\pi))|-1)}$$ Where $RAC_a$ is the adjusted RAC, $\pi$ is the profit vector, $int$ is the integer operator, and $d$ is operator to obtain the amount or number of digits for a certain number.

In this case, the user must consider the RAC to employ here have to be a relative RAC (RRAC). Is not necessary this adjustment for the absolute RAC (ARAC). When the user performs the CE computation with certainty function, the adjusted RAC is computed automatically. But, if the user only wants to calculate the RACa, can employ the function rac_generator through setting the initial and final value (ini and fin respectively) of the RAC vector, and the profit dataset:


rac_generator(data = profitSWG$control, ini = 0.5, fin = 4.0)


Try the ceRtainty package in your browser

Any scripts or data that you put into this service are public.

ceRtainty documentation built on June 14, 2019, 5:04 p.m.