Как получить табличную форму значений вероятностного графика в matlab? - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь найти распределение вероятностей некоторых стохастических данных. Я могу сгенерировать график в Matlab, но сочту его более полезным, если бы я мог получить значения в табличном формате, чтобы я мог провести симуляцию Монте-Карло.

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

Это может быть глупый вопрос, однако, вы работаете с дискретным распределением (биномиальным, пуассоновским, ...) или непрерывным распределением?Если вы работаете с любым видом непрерывного распределения, добавление шага и представление его как дискретного может вызвать проблемы.

Даже если вы работаете с дискретным распределением, табличное представление является ненужным шагом.

Вот код, который показывает довольно простой способ сделать то, что вы хотите.

%% 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)
0 голосов
/ 15 мая 2011

Вы можете получить вероятности из стохастических данных, используя необязательные выходные аргументы 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

enter image description here

Вы можете создать таблицу из приведенных выше данных, используя uitable.

data=num2cell([prob(:);x(:)]);
colNames={'Probability','x'};
t=uitable('Data',data,'ColumnName',colNames);

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...