TransWikia.com

Empirical mean excess plot of (μ, e(μ))

Mathematica Asked on August 15, 2021

Say I generated n random variates from the standard cauchy distribution. I want to construct the empirical mean excess plot of (μ, e(μ)) , where
e(μ)={Σ(xi-μ) *I {xi>=μ}}/Nμ . Nμ is the number of values xi that exceed the μ and the summation part is all xi that exceed the μ(the threshold value), i=1,…,n. Could someone know how to plot this? Thanks!

3 Answers

Spit-balling a little here, based on my best understanding of your definition:

n = 500;
variates = RandomVariate[CauchyDistribution[], n];

ClearAll[meanExcess]
meanExcess[data_, mu_] := 
 Total[#]/Length[#]& @ Cases[data, x_?(# > mu &) :> x - mu]

Plot[meanExcess[variates, mu], {mu, 0, 10}]

proposed plot

Correct answer by MarcoB on August 15, 2021

Three additional ways to implement empirical mean excess using

  1. TruncatedDistribution + EmpiricalDistribution

  2. UnitStep + Pick

  3. Clip + DeleteCases

ClearAll[eme1, eme2, eme3]

eme1[data_, μ_] := Mean @ TruncatedDistribution[{μ, ∞}, EmpiricalDistribution @ data]

eme2[data_, μ_] := Mean @ Pick[data, UnitStep[data - μ], 1]

eme3[data_, μ_] := Mean @ DeleteCases[Null] @ Clip[data, {μ, ∞}, {Null, ∞}]

Examples:

SeedRandom[1]
rv = RandomVariate[CauchyDistribution[], 100];

Verify that all three methods give the same result when the threshold parameter is within the sample range:

Max @ Chop[{Norm[eme1[rv, #] - eme2[rv, #]], 
     Norm[eme1[rv, #] - eme3[rv, #]], 
     Norm[eme2[rv, #] - eme3[rv, #]]} & /@ RandomReal[MinMax[rv], 500]]
 0
Plot[{eme1[rv, x], eme2[rv, x], eme3[rv, x]}, {x, 0, 10}, 
 PlotStyle -> {Directive[AbsoluteThickness[7], Red], 
   Directive[AbsoluteThickness[3], Blue], Directive[Thin, Green]}, 
 ImageSize -> Large, PlotLegends -> {"eme1", "eme2", "eme3"}]

enter image description here

Answered by kglr on August 15, 2021

Following an example, I tried to make it this way:

    n = 100000;
SeedRandom[123456];
x = RandomVariate[CauchyDistribution[0, 1], n];
x = Sort[x, Greater];
meanExcess =Table[{x[[k + 1]], Mean[x[[1 ;; k]] - x[[k + 1]]]}, {k, 1, 99999}];
ListPlot[meanExcess, AxesLabel -> (Style[#, 18, Italic, Bold] &) /@ {"x[[k+1]]", 
"meanExcess"}, Joined -> True, PlotRange -> All]

enter image description here

Answered by Leslie Chiu on August 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP