Создание фиктивных наборов в MATLAB для статистики

я рассматриваю создание фиктивных наборов в MATLAB, сначала я создал массив случайных величин с 10 экземплярами min = 5 и max = 10, и вот мой код r = (10-5).*rand(10,1) + 5; Пожалуйста, мне нужна помощь в том, как создать следующее;

1: создать дополнительную переменную, зависящую от моей первой переменной (r) с положительной корреляцией?

2: создать дополнительную переменную, зависящую от моей первой переменной (r) с отрицательной корреляцией?

3: создать набор данных в форме шара?

Спасибо.


person Young_DataAnalyst    schedule 05.02.2015    source источник
comment
Вы, вероятно, не получили никакого внимания, потому что не пометили свой пост тегом MATLAB. Я бы увидел твой пост, если бы ты это сделал! Я добавил тег, а также предоставил вам ответ. В следующий раз, когда вы будете задавать вопрос, очень важно указать, какие языки программирования вы используете, чтобы лучше представить его и получить более быстрый ответ.   -  person rayryeng    schedule 16.02.2015
comment
Принял к сведению! Большое спасибо! Хорошо объяснил.   -  person Young_DataAnalyst    schedule 17.02.2015


Ответы (1)


Это довольно просто сделать. С точки зрения двумерных задач данные, демонстрирующие положительную корреляцию, — это те точки данных, в которых явно наблюдается увеличение выходных данных при каждом увеличении независимого значения r. Точно так же для отрицательной корреляции выход уменьшается при каждом увеличении независимого значения r.

Следовательно, вы можете просто определить уравнение линии типа y = mx + b, где m и b определяются априори. Когда у вас есть эти термины, вы просто добавляете любой шум, который хотите, поверх этой строки, чтобы создать свой «коррелированный» шум. Поэтому, учитывая m и b, вы должны решить первые два вопроса так:

Вопрос 1

Определите положительный наклон для m... что-то вроде m = 2.

rng(123); %// For reproducibility
m = 2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.', 'MarkerSize', 16);

Мы получили:

введите здесь описание изображения

Вопрос 2

Определите отрицательный наклон для m... что-то вроде m = -2.

rng(123); %// For reproducibility
m = -2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.');

Мы получили:

введите здесь описание изображения

Вопрос №3

Это на самом деле будет немного сложнее. Что вам нужно сделать, так это задать центр и радиус, вы просто генерируете набор 2D-координат, которые находятся внутри круга, а затем случайным образом проверяете, выполняется ли уравнение окружности:

(x - x0)^2 + (y - y0)^2 <= r^2

Если да, то держимся за точку. Будет проще центрировать генерацию случайных точек около -1 <= (x,y) <= 1, затем мы проверяем, меньше ли радиус 1, чтобы выполнить нашу проверку. Как только мы найдем эти точки, мы масштабируем точки по радиусу, а затем перемещаем центр. Имейте в виду, что rand производит только значения между [0,1]. Таким образом, чтобы сгенерировать значения между [-1,1], мы умножаем на 2 и вычитаем на 1.

Что-то вроде:

rng(123);
pts = 2*rand(1000,2) - 1; %// Generate points between [-1,1]
dists = sum(pts.^2, 2); %// Find distances from the centre
pts(dists > 1, :) = []; %// Any values beyond radius of 1 filter
centre = [2 2]; %// Set centre and radius
radius = 5;
pts = radius*pts; %// Scale points by radius
pts = bsxfun(@plus, pts, centre); %// Move points over
plot(pts(:,1), pts(:,2), 'b.', 'MarkerSize', 16); %// Plot points and adjust viewing axis
axis([-10 10 -10 10])

Мы получили:

введите здесь описание изображения

person rayryeng    schedule 16.02.2015