Есть ли статистическая разница между созданием серии путей для моделирования Монтекарло с использованием следующих двух методов (обратите внимание, что под путем я подразумеваю вектор из 350 точек, нормально распределенный):
A)
for path = 1:300000
Zn(path, :) = randn(1, 350);
end
Или гораздо более эффективный B)
Zn = randn(300000, 350);
Я просто хочу быть уверенным, что между строками в методе B нет забавной добавленной корреляции или зависимости, которой нет в методе A. Как, может быть, метод B обычно распределяет по двум измерениям, где A превышает одно измерение, так что, возможно, это делает два статистически разных?
Если есть разница, то мне нужно знать то же самое для равномерных распределений (т.е. rand вместо randn)
2 ответа
Чтобы добавить к ответу @natan (+1), запустите следующий код:
%# Store the seed
Rng1 = rng;
%# Get a matrix of random numbers
X = rand(3, 3);
%# Restore the seed
rng(Rng1);
%# Get a matrix of random numbers one vector at a time
Y = nan(3, 3);
for n = 1:3
Y(:, n) = rand(3, 1);
end
%# Test for differences
if any(any(X - Y ~= 0)); disp('Error'); end;
Вы заметите, что нет никакой разницы между X
и Y
. То есть нет разницы между построением матрицы за один шаг и построением матрицы из последовательности векторов.
Однако мой код отличается от вашего. Примечание. Я заполняю матрицу по столбцам, а не по строкам, поскольку, когда rand
используется для построения матрицы за один шаг, он заполняется по столбцам. Кстати, я не уверен, понимаете ли вы, но, как правило, вы всегда должны пытаться выполнять векторные операции со столбцами матриц, а не со строками. Я объяснил почему, отвечая на вопрос о SO на днях; подробнее см. здесь ...
Что касается вопроса о независимости / зависимости, нужно быть осторожным с языком, который он использует. Последовательность чисел, генерируемая rand
, полностью зависима . Для подавляющего большинства статистических тестов они будут казаться независимыми - тем не менее, теоретически можно построить статистический тест, который продемонстрирует зависимость между последовательностью чисел, генерируемой rand
.
Заключительная мысль: если у вас есть копия «Эконометрического анализа» Грина, он дает аккуратное обсуждение генерации случайных чисел в разделе 17.2.
Что касается генератора случайных чисел в базе R, также, похоже, нет никакой разницы между генерацией последовательности случайных чисел сразу или выполнением этого по одному. Таким образом, предложенное выше поведение @Colin T Bowers (+1) также сохраняется в R. Ниже представлена R-версия кода Колина:
#set seed
set.seed(1234)
# generate a sequence of 10,000 random numbers at once
X<-rnorm(10000)
# reset the seed
set.seed(1234)
# create a vector of 10,000 zeros
Y<-rep(0,times=10000)
# generate a sequence of 10,000 random numbers, one at a time
for (i in 1:10000){
Y[i]<-rnorm(1)
}
# Test for differences
if(any(X-Y!=0)){print("Error")}
Похожие вопросы
Связанные вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).