генерировать случайную последовательность и построить в R - PullRequest
7 голосов
/ 26 августа 2010

Я хотел бы создать случайную последовательность, состоящую из 3000 точек, которая следует нормальному распределению.Среднее значение c, а стандартное отклонение d.Но я хотел бы, чтобы эти 3000 точек лежали в диапазоне [a, b].

Можете ли вы сказать мне, как это сделать в R?

Если я хотел бы построить эту последовательностьесли ось Y использует сгенерированные 3000 точек, то как мне создать точки, соответствующие оси X.

Ответы [ 4 ]

5 голосов
/ 26 августа 2010

Вы можете сделать это, используя стандартные функции R, такие как:

c <- 1
d <- 2

a <- -2
b <- 3.5

ll <- pnorm(a, c, d)
ul <- pnorm(b, c, d)

x <- qnorm( runif(3000, ll, ul), c, d )
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')

Функция pnorm используется для нахождения пределов, используемых для равномерного распределения, затем данные генерируются из униформы и затем преобразуются обратно в нормальное.

Это еще проще, используя пакет distr:

library(distr)

N <- Norm(c,d)
N2 <- Truncate(N, lower=a, upper=b)

plot(N2)
x <- r(N2)(3000)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')

Обратите внимание, что в обоих случаях среднее значение не равно c, а sd не равно d. Если вы хотите, чтобы среднее и sd полученных усеченных данных были c и d, то вам нужно, чтобы родительское распределение (перед усечением) имело другие значения (более высокое значение sd, среднее значение зависит от усеченных значений), поиск этих значений будет хорошая домашняя задача для курса математики / статистики. Если это то, что вам действительно нужно, то добавьте комментарий или отредактируйте вопрос, чтобы сказать это конкретно.

Если вы хотите сгенерировать данные из неусеченной нормали, а только построить данные в диапазоне [a, b], просто используйте аргумент ylim для построения графика:

plot( rnorm(3000, c, d), ylim=c(a,b) )
3 голосов
/ 26 августа 2010

Генерация случайной последовательности чисел из любого распределения вероятностей в R.данный диапазон является странной вещью, которую нужно сделать с образцом из нормального распределения.Возможно, что вы действительно хотите сделать, это попробовать равномерное распределение.

a = 0
b = 3
x2 <- runif(3000, a, b)

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

plot(density(x))

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

1 голос
/ 26 августа 2010

Если я хотел бы построить эту последовательность, если ось Y использует сгенерированные 3000 точек, то как мне сгенерировать точки, соответствующие оси X.

Если вы простогенерируйте свои точки, как сказал ДжоФрульд с помощью

y <- rnorm(3000, 1, 2)

Затем

plot(y)

Автоматически отобразит их, используя индексы массива в качестве оси x

0 голосов
/ 26 августа 2010
a = -2; b = 3
plot(dnorm, xlim = c(a, b))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...