@@ -169,6 +169,9 @@ Context d {T : measurableType d} {R : realType} (P : probability T R).
169169Variable X : {RV P >-> R}.
170170Local Open Scope ereal_scope.
171171
172+ Lemma cdf_def r : cdf X r = P [set x | (X x <= r)%R].
173+ Proof . by[]. Qed .
174+
172175Lemma cdf_ge0 r : 0 <= cdf X r. Proof . by []. Qed .
173176
174177Lemma cdf_le1 r : cdf X r <= 1. Proof . exact: probability_le1. Qed .
@@ -353,6 +356,12 @@ Context d {T : measurableType d} {R : realType} (P : probability T R).
353356Variable X : {RV P >-> R}.
354357Local Open Scope ereal_scope.
355358
359+ Lemma ccdf_def r : ccdf X r = P [set x | (r < X x)%R].
360+ Proof .
361+ rewrite /ccdf/distribution/pushforward/preimage/=.
362+ by under eq_set do rewrite in_itv/= andbT.
363+ Qed .
364+
356365Lemma cdf_ccdf_1 r : cdf X r + ccdf X r = 1.
357366Proof .
358367rewrite /cdf/ccdf -measureU//= -eq_opE; last exact: disjoint_rays.
@@ -483,6 +492,85 @@ End expectation_lemmas.
483492#[deprecated(since="mathcomp-analysis 1.8.0", note="renamed to `expectationZl`")]
484493Notation expectationM := expectationZl (only parsing).
485494
495+ Section tail_expectation_formula.
496+ Local Open Scope ereal_scope.
497+ Context d (T : measurableType d) (R : realType) (P : probability T R).
498+
499+ Let mu : {measure set _ -> \bar R} := @lebesgue_measure R.
500+
501+ Lemma expectation_nonneg_tail (X : {RV P >-> R}) : (forall x, 0 <= X x)%R ->
502+ 'E_P[X] = \int[mu]_(r in `[0%R, +oo[) ccdf X r.
503+ Proof .
504+ pose GR := measurableTypeR R.
505+ pose distrX := distribution P X.
506+ pose D : set R := `[0%R, +oo[%classic.
507+ move=> X_ge0.
508+ transitivity (\int[P]_x ((EFin \_ D) \o X) x).
509+ rewrite expectation_def /comp; apply: eq_integral => x _.
510+ by rewrite /D patchE ifT// set_itvE inE /=.
511+ transitivity (\int[distrX]_r (EFin \_ D) r).
512+ rewrite ge0_integral_distribution -?measurable_restrictT /D //.
513+ by apply: erestrict_ge0 => r /=; rewrite in_itv/= andbT lee_fin.
514+ transitivity (\int[distrX]_r (\int[mu]_(s in D) (\1_`]-oo, r[ s)%:E)).
515+ apply: eq_integral => r _.
516+ rewrite integral_indic /D//= setIC -(set_itv_splitI `[0%R, r[).
517+ rewrite lebesgue_measure_itv/= lte_fin patchE.
518+ have [r_pos | r_neg | r0] := ltgtP.
519+ - by rewrite ifT/= -?EFinD ?subr0// inE/= in_itv/= ltW.
520+ - rewrite ifF//; apply/negP.
521+ by rewrite inE/= in_itv/= andbT; apply/negP; rewrite -ltNge.
522+ - by rewrite ifT -r0 // inE /= bound_itvE.
523+ transitivity (\int[distrX]_r (\int[mu]_s (\1_`[0, r[ s)%:E)).
524+ apply: eq_integral => r _; rewrite /D integral_mkcond.
525+ apply: eq_integral => s _ /=.
526+ have [s_ge0 | s_lt0] := (leP 0%R s).
527+ - have [s_ltr | s_ger] := (ltP s r).
528+ + rewrite indicE mem_set/=; last by rewrite in_itv/= s_ge0 s_ltr.
529+ by rewrite patchE/= ifT ?indicE mem_set//= in_itv/= andbT.
530+ + rewrite indicE memNset/=; last by
531+ rewrite in_itv/= => /andP [] _ /(le_lt_trans s_ger); rewrite ltxx.
532+ rewrite patchE/= ifT//; last by rewrite mem_set//= in_itv/= andbT.
533+ rewrite indicE memNset//= in_itv/=.
534+ by move=> /(le_lt_trans s_ger); rewrite ltxx.
535+ - rewrite indicE memNset/=; last by
536+ rewrite in_itv/= => /andP [] /(lt_le_trans s_lt0); rewrite ltxx.
537+ rewrite patchE/= ifF// memNset//= in_itv/= andbT.
538+ by move=> /(lt_le_trans s_lt0); rewrite ltxx.
539+ transitivity (\int[mu]_s (\int[distrX]_r (\1_`[0, r[ s)%:E)).
540+ rewrite (fubini_tonelli (fun p : R * GR => (\1_`[0, p.1[ p.2)%:E))//=.
541+ apply: measurableT_comp =>//; apply: measurable_indic =>/=.
542+ pose fsnd := (fun p : R * GR => (0 <= p.2)%R).
543+ pose f21 := (fun p : R * GR => (p.2 < p.1)%R).
544+ have ->: (fun p : R * GR => is_true (p.2 \in `[0%R, p.1[)) =
545+ fsnd @^-1` [set true] `&` f21 @^-1` [set true].
546+ by apply/seteqP; split => p; rewrite in_itv/= => /andP.
547+ apply: measurableI.
548+ - have : measurable_fun setT fsnd by exact: measurable_fun_ler.
549+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
550+ - have : measurable_fun setT f21 by exact: measurable_fun_ltr.
551+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
552+ transitivity (\int[mu]_(s in D) (\int[distrX]_r (\1_`[0, r[ s)%:E)).
553+ rewrite [in RHS]integral_mkcond/=.
554+ apply: eq_integral => s _; rewrite patchE /D.
555+ have [s_ge0 | s_lt0] := (leP 0%R s);
556+ first by rewrite ifT// in_setE/= in_itv andbT.
557+ rewrite ifF; last by
558+ rewrite memNset//= in_itv/= ?andbT => /(lt_le_trans s_lt0); rewrite ltxx.
559+ by apply: integral0_eq => r _; rewrite indicE/= memNset//= in_itv/= =>
560+ /andP[] /(lt_le_trans s_lt0); rewrite ltxx.
561+ apply: eq_integral => s; rewrite /D inE/= in_itv/= andbT => s_ge0.
562+ rewrite integral_indic //=.
563+ rewrite /distribution/pushforward/preimage setIT/= ccdf_def.
564+ by under eq_set do rewrite in_itv/= s_ge0.
565+ pose fgts := fun r : R => (s < r)%R.
566+ have : measurable_fun setT fgts by exact: measurable_fun_ltr.
567+ suff ->: (fun r : R => is_true (s \in `[0%R, r[)) = fgts @^-1` [set true].
568+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
569+ by apply: eq_set => r; rewrite in_itv/= s_ge0.
570+ Qed .
571+
572+ End tail_expectation_formula.
573+
486574HB.lock Definition covariance {d} {T : measurableType d} {R : realType}
487575 (P : probability T R) (X Y : T -> R) :=
488576 'E_P[(X \- cst (fine 'E_P[X])) * (Y \- cst (fine 'E_P[Y]))]%E.
0 commit comments