Expected input number 2, edges, to be one of these types

31 views (last 30 days)
Hello all,
Here I am doing a Chi-Square calculation
main
data = randi([0,10],1,20);
% dummy variable
% 10, 0.05, 'unif', 1.5, 2.9
n = 10;
alpha = 0.05;
dist = 'unif';
a1 = 1.5;
a2 = 2.9;
a3 = 3.0;
%Call to the function
[chi2, critical] = chi2test (data, n, alpha, dist, a1, a2);
The function is straigth forward, however the part I am have a issue is the prod, and the invcdf anonymous function. I do not have the tool kit for the cdf, so I did it by sprintf, using the histcounts. Here is where the issue lays, is there a way to get around this error?
function [chi2, critical] = chi2test (data, n, alpha, dist, a1, a2)
prob = @(a,b) sprintf('cdf(''%s'', b, %10.10g, %10.10g) - cdf(''%s'', a, %10.10g, %10.10g)', dist, a1, a2, dist, a1, a2);
invcdf = @(x) sprintf('icdf(''%s'', x, %10.10g, %10.10g)', dist, a1, a2);
pi = (1/n) .* (0:n);
intvls = invcdf(pi);
% The error is thrown here
o_freq = histcounts(data, intvls);
end
I recevie the following error
Error using histcounts
Expected input number 2, edges, to be one of these types:
double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64, logical
Thank you all for any help

Accepted Answer

Steven Lord
Steven Lord on 1 Feb 2021
function [chi2, critical] = chi2test (data, n, alpha, dist, a1, a2)
prob = @(a,b) sprintf('cdf(''%s'', b, %10.10g, %10.10g) - cdf(''%s'', a, %10.10g, %10.10g)', dist, a1, a2, dist, a1, a2);
invcdf = @(x) sprintf('icdf(''%s'', x, %10.10g, %10.10g)', dist, a1, a2);
This anonymous function does not call icdf on its inputs. It create a string that contains the icdf call that you would execute to compute the icdf. [The same holds for prob and cdf.] Don't use sprintf.
invcdf = @(x) icdf(dist, x, a1, a2);
If you really need the %10.10g behavior, use round on a1 and a2.
  2 Comments
SugerCodeCude
SugerCodeCude on 1 Feb 2021
Thank you so much for the quick responce.
However, when I have done that in the past. I would get
Error using chi2test>@(x)icdf(dist,x,a1,a2)
'icdf' requires Statistics and Machine Learning Toolbox.
Is there another way to go about this? I dont have that tool and the same for applies for both the icdf and cdf.
SugerCodeCude
SugerCodeCude on 3 Feb 2021
Thank you Steven Lord, the fix on the anonymous function is alot clean, then for the issue on the error I get a matlab with the statistics needed to run chi-square directly.
I was looking to write the chi-square equation, however as time is of the essence I shell do that at a later time.
Thank you again

Sign in to comment.

More Answers (1)

dpb
dpb on 3 Feb 2021
W/O the Statistics TB, you'll have to resort to some other way to compute the wanted distribution quantities -- a quick look at File Exchange located <generalized-chi-square-distribution> that purports to do what you want. There may be others there.
  2 Comments
SugerCodeCude
SugerCodeCude on 3 Feb 2021
Here is why I am big advocate of Matlab and the Matlab community!! That is exactly what I am looking for!!
dpb, I hope management see how great asset you are to the Matlab team!! thank you again for your time and effort in helping me resolve the error!!
Thank you again
dpb
dpb on 3 Feb 2021
Answers is totally volunteer; there are a number like Steven who are TMW employees who contribute, but I am just a retired geezer... :)

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!