Есть ли статистическая разница между созданием серии путей для моделирования Монтекарло с использованием следующих двух методов (обратите внимание, что под путем я подразумеваю вектор из 350 точек, нормально распределенный):

A)

for path = 1:300000
    Zn(path, :) = randn(1, 350); 
end

Или гораздо более эффективный B)

Zn = randn(300000, 350);

Я просто хочу быть уверенным, что между строками в методе B нет забавной добавленной корреляции или зависимости, которой нет в методе A. Как, может быть, метод B обычно распределяет по двум измерениям, где A превышает одно измерение, так что, возможно, это делает два статистически разных?

Если есть разница, то мне нужно знать то же самое для равномерных распределений (т.е. rand вместо randn)

9
Dan 30 Янв 2013 в 11:17
1
Вы думали о том, чтобы проверить гипотезы самостоятельно?
 – 
moooeeeep
30 Янв 2013 в 11:21
Что ты предлагаешь? Критерий хи-квадрат для каждой пары строк?
 – 
Dan
30 Янв 2013 в 11:23
Какая у тебя гипотеза? забавная добавленная корреляция или зависимость между строками трудно определить количественно, но, возможно, проверить корреляцию ....
 – 
thang
30 Янв 2013 в 11:26
Да, полагаю, я бы больше беспокоился о зависимости. В основном я спрашиваю, есть ли какие-либо статистические различия, о которых я мог бы не знать, поэтому на данный момент у меня действительно нет гипотез: / Я попробую согласовать пары строк, посмотрим, что произойдет.
 – 
Dan
30 Янв 2013 в 11:30
Да, я думаю, что ситуация не так проста, как кажется. Я надеюсь, что параметры по умолчанию достаточно хороши с точки зрения генерации независимых случайных чисел. вы, конечно, можете выбрать свой собственный метод, но многие генераторы псевдослучайных чисел не генерируют последовательность, как если бы она была получена из случайного процесса iid. семя тоже имеет значение. наверное, лучше всего найти статью об этом ... где кто-то потратил много времени на ее изучение.
 – 
thang
30 Янв 2013 в 11:39

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.

6
Community 23 Май 2017 в 13:26
Arg - я не могу этого сделать, потому что в настоящее время установлен Matlab 2010a, но я понимаю, о чем вы говорите. Надеюсь, у меня будет возможность обновиться позже на этой неделе, чтобы проверить это на себе, но пока я верю вам, что X и Y будут идентичны.
 – 
Dan
30 Янв 2013 в 12:04
Что касается того, является ли материал полностью зависимым или нет, меня это не очень волнует. На самом деле я бы предпочел использовать квазислучайные числа (которые не пройдут большинство тестов на независимость, которые проходят псевдослучайные числа), но они более хлопотны, чем того стоит переносить на C #, что мне придется сделать. Мне просто нужно было убедиться, что эти два метода совпадают в Matlab. Спасибо.
 – 
Dan
30 Янв 2013 в 12:06
Рад, что помог. Похоже, вы в курсе всего, но на всякий случай, если вы не слышали о них, вот ссылка на некоторую информацию на последовательности Холтона, которые могут быть вам интересны. Ваше здоровье.
 – 
Colin T Bowers
30 Янв 2013 в 12:08

Что касается генератора случайных чисел в базе 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")} 
1
user3204008 26 Дек 2021 в 20:38