% This folder contains a collection of "fitting" functions.
% (Some has demo options - the third section)
% The GENERAL input to the functions should be samples of the distribution.
% for example, if we are to fit a normal distribution ('gaussian') with a mean "u" and varaince "sig"^2
% then the samples will distribute like:
% samples = randn(1,10000)*sig + u
%fitting with Least-Squares is done on the histogram of the samples.
% fitting with Maximum likelihood is done directly on the samples.
% Contents of this folder
% 1) Maximum likelihood estimators
% 2) Least squares estimators
% 3) EM algorithm for estimation of multivariant gaussian distribution (mixed gaussians)
% 4) added folders: Create - which create samples for the EM algorithm test
% Plot - used to plot each of the distributions (parametric plot)
% Maximum likelihood estimators
% fit_ML_maxwell - fit maxwellian distribution
% fit_ML_rayleigh - fit rayleigh distribution
% (which is for example: sqrt(abs(randn)^2+abs(randn)^2))
% fit_ML_laplace - fit laplace distribution
% fit_ML_log_normal- fit log-normal distribution
% fit_ML_normal - fit normal (gaussian) distribution
% NOTE: all estimators are efficient estimators. for this reason, the distribution
% might be written in a different way, for example, the "Rayleigh" distribution
% is given with a parameter "s" and not "s^2".
% least squares estimators
% fit_maxwell_pdf - fits a given curve of a maxwellian distribution
% fit_rayleigh_pdf - fits a given curve of a rayleigh distribution
% NOTE: these fit function are used on a histogram output which is like a sampled
% distribution function. the given curve MUST be normalized, since the estimator
% is trying to fit a normalized distribution function.
% Multivariant Gaussian distribution
% for demo of 1D mixed-gaussian fitting, run: fit_mix_gaussian
% for demo of 2D mixed-gaussian fitting, run: fit_mix_2d_gaussian
% these routines fit and plot the results of the parameters of:
% random distribution of random amount of gaussians with random parameters
Do you have any insight on how to manipulate this code to plot two rayleigh curves on the same plot.
Hi, Thank you very much for your great functions. I have noticed that for fit_ML_laplace you have used mean of the samples as the mean, but if you check wikipedia or similar docs you will see the ml estimator for mean is the sample median not the mean.
Had similar problem to John Finan above and used same fix. However have other problem with fit_mix_gaussian: it seems to be sensitive to magnitude to data. Using data scaled from appr. -0.7 to 5 it gives me a fit which is incorrect (data is skewed in some manner I have not identified). Changing the magnitude of the input vector via multiplication by some constants causes it to not converge for > 50k iterations.
Rather than systematically determine the failure modes, is there any info on requirements on input vector, such as normalization, etc.? I see normalization required for LSE's but for gaussian?
Guys, i use Randraw function to generate data randomly from a truncated normal distribution, but when i tested the generated data if they have come from a Normal distribution (not truncated), the hypothesis was rejected. which means that the data can not be assumed to have come from a Normal distribution, If I use the Normal distribution to fit my collected data using for example dfittool tool box, I get a mean and sigma values , when I use them to genera data from the randraw function with using (y = randraw('normaltrunc', [0, +inf, mu, sigma], 1, 1e5), the data obtained do not follw a normal distribution. so what i need is some kind of distribution fitting tool that can fit my original field collected data to a left Truncated normal distribution and give me the right parameters , i.e. mu and sigma
I found your application very usfull and I winder if it is possible to use it and to ask you one question please.
This submission requires the statistics toolbox, in order to use the 2D gaussian fit (line 32, build_mix_2D_gaussian.m)
The provided files are an excellent source for EM based Matlab work.
I hit a snag that cost me an hour and I thought I would try to save someone else the time. Disclaimer: I have only been playing with this code for a few hours. I have NOT read it all and I don't fully understand it.
The snag involved plotting the output from a fit of mixed gaussians in one dimension. When I generated the data using build_mix_gaussian, a plot was created. Then, fit_mix_gaussian would plot into that figure without any trouble.
However, when I was using my own data, I didn't run build_mix_gaussian first and the output from fit_mix_gaussian got all messed up.
Here's the change I made in the very last line of fit_mix_gaussian to fix it.
% plot_mix_gaussian( u,sig,t );
plot_mix_gaussian( u,sig,t,X );
Comments from the author or other users are very welcome.
Thank you for such great routines.
Missing subroutine or toolbox containing 'mvnrnd'.
??? Undefined function or variable 'mvnrnd'.
Wow! thats perfect, the author is an EXPERT coder. Proffesionall i'd say.
I'm finished my take home test with this stuff
really good stuff. thanx
great tools for gaussian 1D fittings, thanks.
Great stuff! Seems really usable, at least the 1D functions.
Works great and has neat graphics. First time I find a function for ML fitting of laplace distribution.
1D Gaussian works great. 2D Gaussian gives significantly different (and more poorly fit) results than other EM implementations I've tried, e.g., Netlab and Weka.
Works great and the graphs are aesthetically pleasing.