(* ::Package:: *)

(************************************************************************)
(* This file was generated automatically by the Mathematica front end.  *)
(* It contains Initialization cells from a Notebook file, which         *)
(* typically will have the same name as this file except ending in      *)
(* ".nb" instead of ".m".                                               *)
(*                                                                      *)
(* This file is intended to be loaded into the Mathematica kernel using *)
(* the package loading commands Get or Needs.  Doing so is equivalent   *)
(* to using the Evaluate Initialization Cells menu command in the front *)
(* end.                                                                 *)
(*                                                                      *)
(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
(* automatically each time the parent Notebook file is saved in the     *)
(* Mathematica front end.  Any changes you make to this file will be    *)
(* overwritten.                                                         *)
(************************************************************************)



(*   par Marcel D\[EAcute]l\[EGrave]ze   *)


BeginPackage["Statistique`"]


diagrammeBatons::usage=
	"diagrammeBatons[c_List, f_List] graphique des fr\[EAcute]quences sous la forme de b\[AHat]tons\nc est la liste des valeurs de la variable discr\[EGrave]te\nf est la liste des fr\[EAcute]quences correspondantes.\nOn peut rajouter une ou plusieurs options graphiques: diagrammeBatons[c_List, f_List, opt_]."


diagrammeCumulatif::usage=
	"diagrammeCumulatif[c_List, f_List] graphique des fr\[EAcute]quences cumul\[EAcute]es sous la forme d'un escalier\nc est la liste des valeurs de la variable discr\[EGrave]te\nf est la liste des fr\[EAcute]quences correspondantes, non cumul\[EAcute]es.\nOn peut rajouter une ou plusieurs options graphiques: diagrammeCumulatif[c_List, f_List, opt]."


fctFrequenceCumulee::usage=
	"fctFrequenceCumulee[b_List, f_List, x_] valeur en x de la fonction fr\[EAcute]quence cumul\[EAcute]e\nb est la liste des bornes des classes de la variable discr\[EGrave]te\nf est la liste des fr\[EAcute]quences correspondantes."


amplitudes::usage=
	"amplitudes[b_List] liste des amplitudes des classes\nb est la liste des bornes des classes."


sommesCumulees::usage=
	"sommesCumulees[f_List] produit la liste des sommes cumul\[EAcute]es de f\nqui d\[EAcute]bute par 0."


densites::usage=
	"densites[b_List,f_List] liste des densit\[EAcute]s de chaque classe\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences des classes."


fctDensite::usage=
	"fctDensite[b_List, f_List, x_] valeur en x de la fonction densit\[EAcute] (histogramme)\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes."


noeudsPolygonaux::usage=
	"noeudsPolygonaux[u_List] liste des abscisses du polygone de densit\[EAcute]."


frequenceCumuleeContinue::usage=
	"frequenceCumuleeContinue[b_List, f_List] graphique des fr\[EAcute]quences cumul\[EAcute]es sous la forme d'une ligne polygonale\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes, non cumul\[EAcute]es.\nOn peut rajouter une ou plusieurs options graphiques: frequenceCumuleeContinue[b_List, f_List, opt]."


histogramme::usage=
	"histogramme[b_List, f_List] graphique de la densit\[EAcute] la forme de rectangles\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes.\nOn peut rajouter une ou plusieurs options graphiques: histogramme[b_List, f_List, opt]."


polygoneDeDensite::usage=
	"polygoneDeDensite[b_List, f_List] graphique de la densit\[EAcute] la forme d'une ligne polygonale\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes.\nOn peut rajouter une ou plusieurs options graphiques: polygoneDeDensite[b_List, f_List, opt]."


densiteContinue::usage=
	"densiteContinue[b_List, f_List, x_] valeur en x de la fonction densit\[EAcute] (polygone de densit\[EAcute])\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes."


distributionContinue::usage=
	"distributionContinue[b_List, f_List, x_] valeur en x de la fonction fr\[EAcute]quence cumul\[EAcute]e (interpolation lin\[EAcute]aire)\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes, non cumul\[EAcute]es."


frequenceCumuleeLissee::usage=
	"frequenceCumuleeLissee[b_List,f_List] graphique des fr\[EAcute]quences cumul\[EAcute]es sous la forme d'une ligne polygonale\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes, non cumul\[EAcute]es.\nOn peut rajouter une ou plusieurs options graphiques: frequenceCumuleeLissee[b_List, f_List, opt]."


distributionLissee::usage="distributionLissee[b_List, f_List, x_] valeur en x de la fonction fr\[EAcute]quence cumul\[EAcute]e liss\[EAcute]e (du 2-\[EGrave]me degr\[EAcute] par morceaux)\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences correspondantes, non cumul\[EAcute]es."


quantileC::usage=
	"quantileC[b_List, f_List, q_] quantile en q via les fr\[EAcute]quences cumul\[EAcute]es continues (interpolation lin\[EAcute]aire)\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences non cumul\[EAcute]es."


quantileLisse::usage=
	"quantileC[b_List, f_List, q_] quantile en q via les fr\[EAcute]quences cumul\[EAcute]es liss\[EAcute]es (polygone de densit\[EAcute])\nb est la liste des bornes des classes de la variable continue\nf est la liste des fr\[EAcute]quences non cumul\[EAcute]es."


StandardDeviationMLE::usage=
	"StandardDeviationMLE[data_] calcule l'\[EAcute]cart-type de donn\[EAcute]es brutes (\[EAcute]chantillon)."


VarianceMLE::usage=
	"VarianceMLE[data_] calcule la variance de donn\[EAcute]es brutes (\[EAcute]chantillon)."


InterpolatedQuantile::usage=
	"InterpolatedQuantile[data_List, q_] calcule le quantile interpol\[EAcute] lin\[EAcute]airement."


Begin["`Private`"]


(* Initialisations *)


Needs["BarCharts`"]


sommesCumulees[f_List]:=Prepend[Accumulate[f],0]


fctConst[x_List, y_List,t_]:=Module[{i},
Piecewise[Table[{y[[i]], x[[i]]<=t<x[[i+1]]},{i,1,Length[y]}],0]]


fctConst01[x_List, y_List,t_]:=Module[{i},
Piecewise[Prepend[Table[{y[[i]], x[[i]]<=t<x[[i+1]]},{i,1,Length[x]-1}], {0, t<x[[1]]}],1]]


fctLin[x_List, y_List,t_]:=Module[{i},
Piecewise[Table[{y[[i]]+(t-x[[i]])/(x[[i+1]]-x[[i]]) (y[[i+1]]-y[[i]]), x[[i]]<=t<x[[i+1]]},{i,1,Length[x]-1}],0]]


fctLin01[x_List, y_List,t_]:=Module[{i},
Piecewise[Prepend[Table[{y[[i]]+(t-x[[i]])/(x[[i+1]]-x[[i]]) (y[[i+1]]-y[[i]]), x[[i]]<=t<x[[i+1]]},{i,1,Length[x]-1}], {0, t<x[[1]]}],1]]


(* Distributions discr\[EGrave]tes *)


diagrammeBatons[c_List, f_List,opt__:{}]:=Module[{h, largBar,c0,entree},h=(Max[c]-Min[c])/80;
largBar=Table[h,{Length[c]}];
c0=8/7 Min[c]-1/7 Max[c];
entree=Transpose[{c,f,largBar}];
GeneralizedBarChart[entree,opt, BarStyle->Black, AxesOrigin->{c0,0},AspectRatio->0.6,ImageSize->{400,240}]]


fctFrequenceCumulee[c_List,f_List, t_]:=fctConst01[c,Accumulate[f],t]


diagrammeCumulatif[c_List,f_List, opt__:{}]:=Module[{v,fc,i},
v[0]:=8/7 Min[c]-1/7 Max[c];
Do[v[i_]:=c[[i]],{i,1,Length[c]}];
v[Length[c]+1]:=8/7 Max[c]-1/7 Min[c];
fc[0]=0;
Do[fc[i_]:=Accumulate[f][[i]],{i,1,Length[f]}];
Graphics[{AbsoluteThickness[2],Table[Line[{{v[i],fc[i]},{v[i+1],fc[i]}}],{i,0,Length[c]}],AbsolutePointSize[5],Table[Point[{v[i],fc[i]}],{i,1,Length[c]}]},opt, AspectRatio->0.6, Axes->True, AxesOrigin->{v[0],0}, ImageSize->{400,240}]]


(* Distributions continues *)


amplitudes[u_List]:=Drop[u,1]-Drop[u,-1]


densites[u_List,f_List]:=f/amplitudes[u]


noeudsPolygonaux[u_List]:=Module[{c,k},k=Length[u];c=u[[3]]-u[[2]];Join[{2*u[[1]]-u[[2]]+c/2,u[[2]]-c/2},(Take[u,{3,-2}]+Take[u,{2, -3}])/2,{u[[k-1]]+c/2,2*u[[k]]-u[[k-1]]-c/2}]]


frequenceCumuleeContinue[b_List,f_List, opt__:{}]:=Module[{b0, bm, entree},
b0=8/7 Min[b]-1/7 Max[b];
bm=8/7 Max[b]-1/7 Min[b];
entree=Append[Transpose[{b,sommesCumulees[f]}],{bm,1}];
ListLinePlot[entree,opt, AxesOrigin->{b0,0},PlotStyle->Black,AspectRatio->0.6,  ImageSize->{400,240}]]


histogramme[b_List,f_List, opt__:{}]:=Module[{centres, ampl, entree},
centres=1/2 (Drop[b,1]+Drop[b,-1]);
ampl=Drop[b,1]-Drop[b,-1];
entree=Transpose[{centres,f/ampl,ampl}];
GeneralizedBarChart[entree,opt, BarStyle->GrayLevel[0.85] ,AspectRatio->0.6,  ImageSize->{400,240}]]


polygoneDeDensite[b_List, f_List, opt__:{}]:= Module[{b0, bm,x},b0=First[noeudsPolygonaux[b]];
bm=Last[noeudsPolygonaux[b]];entree=Transpose[{noeudsPolygonaux[b],Join[{0},densites[b,f],{0}]}];
ListLinePlot[entree,opt,AxesOrigin->{b0,0},PlotStyle->Black,  AspectRatio->0.6,ImageSize->{400,240}]]


fctDensite[u_List,f_List,t_]:=fctConst[u,densites[u,f],t]


densiteContinue[u_List,f_List, t_]:=fctLin[noeudsPolygonaux[u], Join[{0},densites[u,f],{0}], t]


indice[u_List,x_]:=Module[{j},k=Length[u];j=1;While[(j<=k)\[And](x>=u[[j]]),j++];j-1]


distributionContinue[b_List, f_List,t_]:=fctLin01[b,sommesCumulees[f],t]


distributionLissee[u_List,f_List,x_]:=Module[{w,j},w=noeudsPolygonaux[u];j=indice[w,x];Which[x<First[w],0,Last[w]<=x,1,True,distributionContinue[u,f,w[[j]]]+(x-w[[j]])(densiteContinue[u,f,x]+densiteContinue[u,f,w[[j]]])/2]]


frequenceCumuleeLissee[b_List, f_List, opt__:{}]:= Module[{b0, bm,x},b0=8/7 Min[b]-1/7 Max[b];
bm=8/7 Max[b]-1/7 Min[b];
Plot[distributionLissee[b,f,x], {x,b0,bm},opt,PlotPoints->100,AxesOrigin->{b0,0},PlotStyle->Black,  ImageSize->{400,240}]]


quantileC[b_List,f_List,q_]:=Module[{i},i=1;
While[(distributionContinue[b,f,b[[i]]]-q) (distributionContinue[b,f,b[[i+1]]]-q)>0,
i=i+1];
b[[i]]+1/f[[i]] ((q-distributionContinue[b,f,b[[i]]])amplitudes[b][[i]])]


quantileLisse[b_List,f_List,q_]:=Module[{r,s,m},
r=First[b]; s=Last[b];
While[N[r]<N[s],
m=(r+s)/2;
If[distributionLissee[b,f,m]<=q,r=m,s=m]
];N[r]]


StandardDeviationMLE[data_]:=StandardDeviation[data]Sqrt[(Length[data]-1)/Length[data]]


VarianceMLE[data_]:=Variance[data](Length[data]-1)/Length[data]


InterpolatedQuantile[data_List,q_]:=Quantile[data, q, {{1/2,0},{0,1}}]


End[]


EndPackage[]
