построение контуров в соответствии с дисперсией распределения - PullRequest
0 голосов
/ 20 июня 2019

Я провожу эксперимент и получаю в качестве вывода набор данных в виде двумерных точек

# read csv file
samples = csvread('results.csv');

, предполагая, что они нормально распределены, я могу вычислить их среднее значение и ковариацию и оценить pdf

mu = mean(samples);
sigma = cov(samples);
y = mvnpdf(X,mu,sigma);

, где X - это двумерная сетка, вычисленная по meshgrid.

. Теперь я хотел бы построить это распределение с изо-контурами как здесь .

И я хотел бы выбрать контуры с конкретными значениями, которые связаны с ковариацией, как на этом рисунке:

enter image description here

В качестве примера я должен знать значение распределения в точке = (X: mu (1) + сигма (1,1), Y: mu (1) + сигма (1,1)).Я предполагаю, что я мог бы использовать функцию normpdf таким образом

value = normpdf(point,mu,sigma)

, но я получаю это как вывод:

value =

   116.39   297.63
   297.63   409.88

, и я действительно не знаю, как ее интерпретировать.

Может кто-нибудь показать мне, как это сделать?

Спасибо.

1 Ответ

1 голос
/ 21 июня 2019

Я потерял тебя в тот момент, когда ты начал говорить о нормпдф.У вас нормальный многовариант, и это то, над чем вам нужно работать.Не уверен, что вы ожидаете получить от одномерной нормали здесь.

Если вы хотите получить значение вероятности многовариантной нормали на расстоянии махаланобиса 1 (т.е. одно стандартное отклонение от среднего значения распределения)Вы можете сделать это, оценив mvnpdf по значению [m+s,0], где m = mu(1) и s = sqrt( sigma(1,1) ).

Затем вы можете использовать это с соответствующей функцией контура для получения желаемого контура.

РЕДАКТИРОВАТЬ: Вот пример.

  pkg load statistics

% create 1000 samples from a known multivariate normal
  Observations     = mvnrnd( [0,0], [4, 1; 1 ,2], 1000 );

% Get mean and covariance estimates from sample
  SampleMean       = mean( Observations, 1 ) % average along rows
  SampleCovariance = cov( Observations )

% Get mean and standard deviation in first dimension (i.e. "x-axis")
  Mean_firstDimension   = SampleMean(1)
  StdDev_firstDimension = sqrt( SampleCovariance(1,1) )

% Get gaussian values at malanobis distance of 1, 2, and 3
  MVN_value_at_mahalanobis_distance_of_one   = mvnpdf( [ Mean_firstDimension +     StdDev_firstDimension, 0], SampleMean, SampleCovariance )
  MVN_value_at_mahalanobis_distance_of_two   = mvnpdf( [ Mean_firstDimension + 2 * StdDev_firstDimension, 0], SampleMean, SampleCovariance )    
  MVN_value_at_mahalanobis_distance_of_three = mvnpdf( [ Mean_firstDimension + 3 * StdDev_firstDimension, 0], SampleMean, SampleCovariance )    

% Define grid:
  [GridX, GridY] = ndgrid( -8:0.1:8, -8:0.1:8 );
  GridValues = mvnpdf( [GridX(:), GridY(:)], SampleMean, SampleCovariance );
  GridValues = reshape( GridValues, size( GridX ) );

% Plot Observations
  plot( Observations(:,1), Observations(:,2), 'o', 'markerfacecolor', 'g', 'markeredgecolor', [0,0.5,0], 'linewidth', 1.5 );
  hold on;

% Plot contours over grid
  contour( GridX, GridY, GridValues,   ...
           [ MVN_value_at_mahalanobis_distance_of_three, ...
             MVN_value_at_mahalanobis_distance_of_two, ...
             MVN_value_at_mahalanobis_distance_of_one ...
           ],
           'linewidth', 2
  )
  hold off;

% Set nice limits and colours for background
  axis([-8, +8, -8, +8]); axis equal square;
  set(gca, 'color', 'k');
  set(gcf, 'color', [0.75, 0.75, 0.75]);

image

...