我试图找到一些随机数据的概率分布。我可以在matlab中生成绘图,但如果我能以表格格式获取值,那么我会发现它更有用,所以我可以进行蒙特卡罗模拟。
答案 0 :(得分:0)
您可以使用hist
的可选输出参数来获取随机数据的概率,如下所示:
z=randn(10000,1); %# generate 10000 trials of a normally distributed random variable.
[f,x]=hist(z,100); %# get x values and bin counts (f)
prob=f/trapz(x,f); %# divide by area under the curve to get the
您可以轻松验证这是否为您提供概率分布。
bar(x,prob);hold on
plot(x,1/sqrt(2*pi)*exp(-(x.^2)/2),'r','linewidth',1.25);hold off
您可以使用uitable
从上述数据创建表格。
data=num2cell([prob(:);x(:)]);
colNames={'Probability','x'};
t=uitable('Data',data,'ColumnName',colNames);
答案 1 :(得分:0)
这可能是一个愚蠢的问题,但是,您使用离散分布(二项式,泊松,......)还是连续分布?如果您正在使用任何类型的连续分布,添加一个步骤并将其表示为离散将导致麻烦。
即使您正在使用离散分布,表格表示也是不必要的步骤。
这里有一些代码,显示了一种非常简单的方法来做你想做的事。
%% Parametric fitting, followed by random number generation
% Generate some random data from a normal distribution with mean = 45 and
% standard devation = 6
X = 45 + 6 * randn(1000,1);
foo = fitdist(X, 'normal')
% Use the object to generate 1000 random numbers
My_data = random(foo, 1000,1);
mean(My_data)
std(My_data)
%% Kernel smoothing, followed by random number generation
% Generate some random data
X = 10 + 5 * randn(100,1);
Y = 15 + 3 * randn(60,1);
my_dist = vertcat(X,Y);
% fit a distribution to the data
bar = fitdist(my_dist, 'kernel')
% generate 100 random numbers from the distribution
random(bar, 100, 1)
%% Fitting a discrete distribution
% Use a poisson distribution to generate a 1000 random integers with mean = 6.8
Z = poissrnd(6.8, 1000,1);
foobar = fitdist(Z, 'poisson')
% generate 100 random numbers from the distribution
random(foobar, 100, 1)