How can I use histfit function? (2024)

9 views (last 30 days)

Show older comments

Behrooz Daneshian on 13 Nov 2023

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function

Commented: Star Strider on 13 Nov 2023

  • AVG_Diameter.mat
  • Rounded_N.mat

Open in MATLAB Online

Hello all.

I have an array called "AVG_Diameter" including the measured diameters of the porous structure of soil. I also have another array called "Rounded_N" in which the existing numbers correspondig to the diameters in the fromer array are stored. In other words, the latter array would be a frequency array for the diameters stored in the "AVG_Diameter". I tried to use histfit function in order to fit a histogram on the data formed by these two arrays, but I got an an error massage expressing "Requested array exceeds the maximum possible variable size." Would you please guide me where I am doing wrong and how I can fix it? Here is my code.

clc

clear

close all

load("AVG_Diameter.mat");

load("Rounded_N.mat")

AVG_Diameter=flip(AVG_Diameter)';

Rounded_N=flip(Rounded_N)';

% Create a data array with repeated values based on frequencies

data = repelem(AVG_Diameter, Rounded_N);

% Use histfit to fit a distribution

histfit(data, max(AVG_Diameter), 'lognormal');

title('Histogram with Fitted Distribution');

xlabel('Diameter of Pores');

ylabel('Frequency');

% Add a legend

legend('Histogram', 'Fitted Distribution');

0 Comments

Show -2 older commentsHide -2 older comments

Sign in to comment.

Sign in to answer this question.

Answers (1)

Star Strider on 13 Nov 2023

  • Link

    Direct link to this answer

    https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function#answer_1351610

Open in MATLAB Online

  • AVG_Diameter.mat
  • Rounded_N.mat

Your data are frequency data (probably the result of performing a histogram on an original data set), not actual histogram data. Rather than attempting to re-create the histogram, likely the best option is to fit the data as they exist. (I don’t understand the reason for flipping the vectors.)

The distribution that you choose must have positive support, since the diameters are by definition all greater than zero. I chose lognpdf here, however there is likely a better choice, since it does not appear to fit the data. Choose the distribution that best describes your data.

load("AVG_Diameter.mat")

load("Rounded_N.mat")

format shortE

Data = [AVG_Diameter Rounded_N]

Data = 77×2

1.0e+00 * 2.8075e-01 1.1500e+02 2.0803e-01 2.4800e+02 1.6366e-01 3.4000e+02 1.3501e-01 4.3500e+02 1.1341e-01 6.3100e+02 9.6017e-02 8.9600e+02 8.2264e-02 1.1190e+03 7.1687e-02 1.3090e+03 6.3259e-02 1.6310e+03 5.5454e-02 3.1870e+03

figure

semilogx(Rounded_N, AVG_Diameter)

grid

xlabel('Rounded_N')

ylabel('AVG_Diameter')

How can I use histfit function? (3)

lognpdf_fcn = @(b,x) lognpdf(x,b(1),b(2));

[b,fv] = fminsearch(@(b) norm(AVG_Diameter - lognpdf_fcn(b,Rounded_N)), rand(2,1)*100)

b = 2×1

4.7409e+00 1.1645e-02

fv =

3.7818e-01

mdl = fitnlm(Rounded_N, AVG_Diameter, lognpdf_fcn, b)

Warning: The Jacobian at the solution is ill-conditioned, and some model parameters may not be estimated well (they are not identifiable). Use caution in making predictions.

mdl =

Nonlinear regression model: y ~ lognpdf(x,b1,b2)Estimated Coefficients: Estimate SE tStat pValue __________ __________ __________ ___________ b1 4.7409e+00 6.9258e-04 6.8453e+03 8.7363e-222 b2 1.1641e-02 1.7717e-03 6.5707e+00 5.5873e-09Number of observations: 77, Error degrees of freedom: 76Root Mean Squared Error: 0.0434R-Squared: 0.208, Adjusted R-Squared 0.208F-statistic vs. zero model: 41.9, p-value = 8.53e-09

R_N_v = linspace(1E-4, max(Rounded_N), 150).';

[y,yci] = predict(mdl, R_N_v);

[y1,y2] = bounds(y)

y1 =

y2 =

figure

hp{1} = semilogx(Rounded_N, AVG_Diameter, 'sb', 'DisplayName','Data');

hold on

hp{2} = plot(R_N_v, y, '-r', 'DisplayName','Regression');

hp{3} = plot(R_N_v, yci, '--r', 'DisplayName','95% Confidence Limits');

hold off

grid

legend([hp{1} hp{2} hp{3}(1)], 'Location','best')

xlabel('Rounded_N')

ylabel('AVG_Diameter')

How can I use histfit function? (4)

.

2 Comments

Show NoneHide None

Behrooz Daneshian on 13 Nov 2023

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function#comment_2959490

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function#comment_2959490

Edited: Behrooz Daneshian on 13 Nov 2023

Thank you for your answer. But it seems that you changed the position of "Rounded_N" and "AVG_Diameter". Can you explain why? shouldn't the frequency which is expressed here as "Rounded_N" array be on the vertical axis? I mean, "AVG_Diameter" and "Rounded_N" play as data and frequency, respectively.

Star Strider on 13 Nov 2023

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function#comment_2959545

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/2046635-how-can-i-use-histfit-function#comment_2959545

Open in MATLAB Online

  • AVG_Diameter.mat
  • Rounded_N.mat

I obviously read it incorrectly.

Reversing them from my previous code —

load("AVG_Diameter.mat")

load("Rounded_N.mat")

format shortE

Data = [AVG_Diameter Rounded_N]

Data = 77×2

1.0e+00 * 2.8075e-01 1.1500e+02 2.0803e-01 2.4800e+02 1.6366e-01 3.4000e+02 1.3501e-01 4.3500e+02 1.1341e-01 6.3100e+02 9.6017e-02 8.9600e+02 8.2264e-02 1.1190e+03 7.1687e-02 1.3090e+03 6.3259e-02 1.6310e+03 5.5454e-02 3.1870e+03

figure

semilogx(AVG_Diameter, Rounded_N, '.-')

grid

xlabel('Rounded\_N')

ylabel('AVG\_Diameter')

How can I use histfit function? (7)

lognpdf_fcn = @(b,x) lognpdf(x,b(1),b(2));

[b,fv] = fminsearch(@(b) norm(Rounded_N - lognpdf_fcn(b,AVG_Diameter)), rand(2,1)*1E+3)

Exiting: Maximum number of function evaluations has been exceeded - increase MaxFunEvals option. Current function value: 847525920280383.000000

b = 2×1

-1.1039e+01 7.2101e-11

fv =

8.4753e+14

mdl = fitnlm(AVG_Diameter, Rounded_N, lognpdf_fcn, b)

Warning: The Jacobian at the solution is ill-conditioned, and some model parameters may not be estimated well (they are not identifiable). Use caution in making predictions.

mdl =

Nonlinear regression model: y ~ lognpdf(x,b1,b2)Estimated Coefficients: Estimate SE tStat pValue ___________ __________ ___________ __________ b1 -1.1039e+01 8.5088e-17 -1.2973e+17 0.0000e+00 b2 7.2101e-11 4.4659e-11 1.6145e+00 1.1056e-01Number of observations: 77, Error degrees of freedom: 76Root Mean Squared Error: 9.72e+13R-Squared: -0.285, Adjusted R-Squared -0.285F-statistic vs. zero model: 8.13, p-value = 0.0056

A_D_v = linspace(min(AVG_Diameter), max(AVG_Diameter), 150).';

[y,yci] = predict(mdl, A_D_v);

[y1,y2] = bounds(y)

y1 =

y2 =

figure

hp{1} = semilogx(AVG_Diameter, Rounded_N, 'sb', 'DisplayName','Data');

hold on

hp{2} = plot(A_D_v, y, '-r', 'DisplayName','Regression');

hp{3} = plot(A_D_v, yci, '--r', 'DisplayName','95% Confidence Limits');

hold off

grid

legend([hp{1} hp{2} hp{3}(1)], 'Location','best')

xlabel('AVG\_Diameter')

ylabel('Rounded\_N')

How can I use histfit function? (8)

I still cannot get it to fit, however this should provide a starting point for your explorations. Again, choose a distribution with positive support, depending on whatever process underlies your data. (I thought a lognormal distribution would work, however it does not appear to be the correct choice.)

If you wnat to use histfit, give the function the original data — not previously-binned data — and see what it comes up with.

.

Sign in to comment.

Sign in to answer this question.

See Also

Categories

AI, Data Science, and StatisticsStatistics and Machine Learning ToolboxProbability DistributionsContinuous DistributionsLognormal Distribution

Find more on Lognormal Distribution in Help Center and File Exchange

Tags

  • histfit

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

An Error Occurred

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.


How can I use histfit function? (9)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

Asia Pacific

  • Australia (English)
  • India (English)
  • New Zealand (English)
  • 中国
  • 日本Japanese (日本語)
  • 한국Korean (한국어)

Contact your local office

How can I use histfit function? (2024)

References

Top Articles
EXPOSANTS | Salon Horizon Seniors | Lyon
Horizonia Live : Revivez la dernière journée du salon en direct !
Rosy Boa Snake — Turtle Bay
Parke County Chatter
Flixtor The Meg
Apply A Mudpack Crossword
David Packouz Girlfriend
PGA of America leaving Palm Beach Gardens for Frisco, Texas
2021 Lexus IS for sale - Richardson, TX - craigslist
Https://Gw.mybeacon.its.state.nc.us/App
Saw X | Rotten Tomatoes
Theycallmemissblue
Alaska: Lockruf der Wildnis
Spartanburg County Detention Facility - Annex I
Uc Santa Cruz Events
Aldi Sign In Careers
Google Flights Missoula
Puretalkusa.com/Amac
Dirt Removal in Burnet, TX ~ Instant Upfront Pricing
Strange World Showtimes Near Roxy Stadium 14
Nurse Logic 2.0 Testing And Remediation Advanced Test
Music Go Round Music Store
Popular Chinese Restaurant in Rome Closing After 37 Years
Craigslist Illinois Springfield
Piri Leaked
Phantom Fireworks Of Delaware Watergap Photos
A Christmas Horse - Alison Senxation
8002905511
Tactical Masters Price Guide
Mchoul Funeral Home Of Fishkill Inc. Services
Appleton Post Crescent Today's Obituaries
Cruise Ships Archives
Timothy Kremchek Net Worth
Muma Eric Rice San Mateo
Whitehall Preparatory And Fitness Academy Calendar
Robeson County Mugshots 2022
Anya Banerjee Feet
Why I’m Joining Flipboard
Aurora Il Back Pages
No Boundaries Pants For Men
Pulitzer And Tony Winning Play About A Mathematical Genius Crossword
The power of the NFL, its data, and the shift to CTV
Brauche Hilfe bei AzBilliards - Billard-Aktuell.de
Rocket Lab hiring Integration & Test Engineer I/II in Long Beach, CA | LinkedIn
10 Types of Funeral Services, Ceremonies, and Events » US Urns Online
Keci News
Market Place Tulsa Ok
Egg Inc Wiki
Here’s What Goes on at a Gentlemen’s Club – Crafternoon Cabaret Club
Used Auto Parts in Houston 77013 | LKQ Pick Your Part
Strawberry Lake Nd Cabins For Sale
Joe Bartosik Ms
Latest Posts
Article information

Author: Corie Satterfield

Last Updated:

Views: 6000

Rating: 4.1 / 5 (42 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Corie Satterfield

Birthday: 1992-08-19

Address: 850 Benjamin Bridge, Dickinsonchester, CO 68572-0542

Phone: +26813599986666

Job: Sales Manager

Hobby: Table tennis, Soapmaking, Flower arranging, amateur radio, Rock climbing, scrapbook, Horseback riding

Introduction: My name is Corie Satterfield, I am a fancy, perfect, spotless, quaint, fantastic, funny, lucky person who loves writing and wants to share my knowledge and understanding with you.