Построение двух наборов данных на одной гистограмме

Я только начал использовать Octave и пытаюсь смоделировать 10 000 результатов биномиальной случайной величины, определенной как:

X ~ Bi (5, 0,2)

Я получил результат с помощью следующей функции:

function x = generate_binomial_bernoulli(n,p,m)
  % generate Bi(n, p) outcomes m times

  x = zeros(1,m);       % allocate array for m simulations
  for i = 1:m           % iterate over m simulations
    successes = 0;      % count the number of successful trials per simualtion (0-5)
    for j = 1:n         % iterate through the n trials
      u = rand;         % generate random nuumber from 0-1
      if (u <= p)       % if random number is <= p
        successes++;    % count it as a success
      endif
    end
    x(i) = successes;   % store the number of successful trials in this simulation
  end

  alphabet_x=[0:n];     % create an array from 0 to n        
  hist(x,alphabet_x);   % plot graph     

end

Затем я вызываю функцию с generate_binomial_bernoulli(5, 0.2, 10000),

Это моделирует 5 испытаний Бернулли, каждое из которых с вероятностью успеха 0,2, повторяет 5 испытаний 10 000 раз и строит график распределения количества успехов. Этот график показывает эмпирические результаты моделирования.

Теперь меня также попросили построить теоретические результаты, которые, как я полагаю, будут представлять собой нормально распределенный график примерно с 1 успехом по оси X (0,2 * 5 = 1).

  1. Как я мог создать этот график и отобразить его на той же гистограмме?
  2. Как я могу правильно отобразить мой график с осью X, охватывающей всего от 0 до 5, с обеими осями с метками и двумя гистограммами, помеченными цветом с легендой?

РЕДАКТИРОВАТЬ

Вот моя текущая функция, где я попытался построить нормализованную / теоретическую кривую:

function x = generate_binomial_bernoulli(n,p,m)
  % generate Bi(n, p) outcomes m times

  emperical = zeros(1,m);             % allocate array for m simulations
  for i = 1:m                         % iterate over m simulations
    successes = 0;                    % count the number of successful trials per simualtion (0-5)
    for j = 1:n                       % iterate through the n trials
      u = rand;                       % generate random nuumber from 0-1
      if (u <= p)                     % if random number is <= p
        successes++;                  % count it as a success
      endif
    end
    emperical(i) = successes;         % store the number of successful trials in this simulation
  end

  close all;                          % close any existing graphs

  x_values = [0:n];                   % array of x-axis values        
  hist(emperical, x_values, "facecolor", "r"); % plot empirical data
  xlim([-0.5 (n + 0.5)]);             % set x-axis to allow for histogram bar widths

  hold on;                            % hold current graph

  mean = n * p;                       % theoretical mean
  norm = normpdf(x_values, mean, 1);  % normalised y values
  plot(x_values, norm, "color", "b"); % plot theoretical distribution

  legend('Emprical', 'Theoretical');   

end

Как показано ниже, эта кривая распространяется только на очень низкую высоту вдоль оси y, но я не знаю, как охватить ее по всему набору данных.

1 ответ

Получить количество гистограмм и количество бинов:

[counts,centers] = hist(x);

Нормализация:

freq = counts/sum(counts);

Нарисуйте нормализованную гистограмму:

bar(centers,freq)
Другие вопросы по тегам