Set.seed() определяет случайные числа, которые будут сгенерированы впоследствии. Обычно он используется для создания воспроизводимых примеров, так что если мы оба запускаем один и тот же код, мы получаем одинаковые результаты. Проиллюстрировать:
set.seed(1234)
runif(3)
[1] 0.1137034 0.6222994 0.6092747
set.seed(1234)
runif(3)
[1] 0.1137034 0.6222994 0.6092747
set.seed(12345)
runif(3)
[1] 0.7209039 0.8757732 0.7609823
Итак, как вы можете видеть, когда вы дважды устанавливаете.seed(x) с одним и тем же числом, вы генерируете одни и те же случайные числа с этого момента. (Для переменных с таким же распределением. Для других см. подробности ниже). Итак, причина, по которой вы получаете прямую линию на первом графике, заключается в том, что
y <- 0.5 * x + epsilon -1
на самом деле становится
y <- 0.5 * x + x -1
потому что вы используете одну и ту же последовательность случайных чисел два раза. Это сводится к
y <- 1.5 * x -1
И это простое линейное уравнение.
В общем, вы должны выполнить set.seed(x)
только один раз, в начале вашего скрипта.
Уточнение комментария: "Но я сгенерировал Эпсилон с другим sd, почему это все равно будет тот же x, хотя сюжет, кажется, согласуется с объяснением?"
Это на самом деле очень интересный вопрос. Случайные числа с распределением ~N(mean,sd)
обычно генерируются следующим образом:
- Генерируются случайные равномерные числа.
- К этим числам применяется преобразование, обычно преобразование Бокса-Мюллера. , обозначим эти числа X.
- Эти числа преобразуются еще раз путем применения преобразования
sd * X + mean
Когда вы запускаете это дважды с одним и тем же начальным числом, но с другим средним значением и sd, первые два шага создадут точно такие же результаты, поскольку сгенерированные случайные числа одинаковы, а среднее значение и sd еще не используются. Только на третьем шаге в игру вступают среднее значение и sd. Мы можем легко убедиться в этом:
set.seed(1)
rnorm(4, mean = 0, sd = 1)
[1] -0.6264538 0.1836433 -0.8356286 1.5952808
set.seed(1)
rnorm(4, mean = 0, sd = 0.25)
[1] -0.15661345 0.04591083 -0.20890715 0.39882020
Действительно, случайные числа, сгенерированные во второй раз, ровно в 0,25 раза превышают числа, сгенерированные в первый раз.
Итак, в моем объяснении выше эпсилон на самом деле равен 0,25 * x, а ваша результирующая функция — y <- 0.75 * x - 1
, которая по-прежнему является просто линейной функцией.
person
Florian
schedule
26.07.2017