butools.fitting.EmpiricalSquaredDifference¶
-
butools.fitting.
EmpiricalSquaredDifference
()¶ Matlab: sd = EmpiricalSquaredDifference(f1, f2, intBounds)
Mathematica: sd = EmpiricalSquaredDifference[f1, f2, intBounds]
Python/Numpy: sd = EmpiricalSquaredDifference(f1, f2, intBounds)
Returns the squared difference of two continuous functions given by samples and the bounds of the corresponding intervalls.
This function can be used to characterize the distance between two density functions, distribution functions, etc.
Parameters: f1 : vector, length M
Samples of the first continuous function
f2 : vector, length M
Samples of the second continuous function
intBounds : vector, length M+1
The bounds of the intervals. The ith sample corresponds to the interval (intbounds(i),intbounds(i+1))
Returns: sd : double
The squared difference
Examples
For Matlab:
>>> tr = dlmread('/home/gabor/github/butools/test/data/bctrace.iat'); >>> intBounds = linspace(0, MarginalMomentsFromTrace(tr, 1)*4, 50); >>> [pdfTrX, pdfTrY] = PdfFromTrace(tr, intBounds); >>> [cdfTrX, cdfTrY] = CdfFromTrace(tr); >>> step = ceil(length(tr)/2000); >>> cdfTrX = cdfTrX(1:step:length(tr)); >>> cdfTrY = cdfTrY(1:step:length(tr)); >>> [alpha, A] = APHFrom3Moments(MarginalMomentsFromTrace(tr, 3)); >>> [pdfPHX, pdfPHY] = IntervalPdfFromPH(alpha, A, intBounds); >>> cdfPHY = CdfFromPH(alpha, A, cdfTrX); >>> sqPdf = EmpiricalSquaredDifference(pdfTrY, pdfPHY, intBounds); >>> disp(sqPdf); 0.011854 >>> sqCdf = EmpiricalSquaredDifference(cdfTrY(1:end-1), cdfPHY(1:end-1), cdfTrX); >>> disp(sqCdf); 3.8247e-10
For Mathematica:
>>> tr = Flatten[Import["/home/gabor/github/butools/test/data/bctrace.iat","CSV"]]; >>> intBounds = Array[# &, 50, {0, MarginalMomentsFromTrace[tr, 1][[1]]*4}]; >>> {pdfTrX, pdfTrY} = PdfFromTrace[tr, intBounds]; >>> {cdfTrX, cdfTrY} = CdfFromTrace[tr]; >>> step = Ceiling[Length[tr]/2000]; >>> cdfTrX = cdfTrX[[1;;Length[tr];;step]]; >>> cdfTrY = cdfTrY[[1;;Length[tr];;step]]; >>> {alpha, A} = APHFrom3Moments[MarginalMomentsFromTrace[tr, 3]]; >>> {pdfPHX, pdfPHY} = IntervalPdfFromPH[alpha, A, intBounds]; >>> cdfPHY = CdfFromPH[alpha, A, cdfTrX]; >>> sqPdf = EmpiricalSquaredDifference[pdfTrY, pdfPHY, intBounds]; >>> Print[sqPdf]; 0.011854198606408763 >>> sqCdf = EmpiricalSquaredDifference[cdfTrY[[1;;-2]], cdfPHY[[1;;-2]], cdfTrX]; >>> Print[sqCdf]; 3.8246917213169133*^-10
For Python/Numpy:
>>> tr = np.loadtxt("/home/gabor/github/butools/test/data/bctrace.iat") >>> intBounds = np.linspace(0, MarginalMomentsFromTrace(tr, 1)[0]*4, 50) >>> pdfTrX, pdfTrY = PdfFromTrace(tr, intBounds) >>> cdfTrX, cdfTrY = CdfFromTrace(tr) >>> step = math.ceil(Length(tr)/2000) >>> cdfTrX = cdfTrX[0:Length(tr):step] >>> cdfTrY = cdfTrY[0:Length(tr):step] >>> alpha, A = APHFrom3Moments(MarginalMomentsFromTrace(tr, 3)) >>> pdfPHX, pdfPHY = IntervalPdfFromPH(alpha, A, intBounds) >>> cdfPHY = CdfFromPH(alpha, A, cdfTrX) >>> sqPdf = EmpiricalSquaredDifference(pdfTrY, pdfPHY, intBounds) >>> print(sqPdf) 0.0118541986064 >>> sqCdf = EmpiricalSquaredDifference(cdfTrY[0:-1], cdfPHY[0:-1], cdfTrX) >>> print(sqCdf) 3.8246917213e-10