создать случайную последовательность и построить график в R

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

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

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

1168637]

7
задан bit-question 25 August 2010 в 22:37
поделиться

4 ответа

Вы можете сделать это, используя стандартные функции 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. Если вы хотите, чтобы среднее значение и стандартное отклонение результирующих усеченных данных были c и d, то вам нужно, чтобы родительское распределение (до усечения) имело разные значения (более высокое стандартное отклонение, среднее значение зависит от значений усечения), поиск этих значений будет хорошая домашняя задача для курса теории математики/статистики. Если это то, что вам действительно нужно, добавьте комментарий или отредактируйте вопрос, указав это конкретно.

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

plot( rnorm(3000, c, d), ylim=c(a,b) )
5
ответ дан 7 December 2019 в 03:09
поделиться

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

Если вы просто сгенерируете свои точки, как сказал JoFrhwld

y <- rnorm(3000, 1, 2)

,то

plot(y)

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

1
ответ дан 7 December 2019 в 03:09
поделиться
a = -2; b = 3
plot(dnorm, xlim = c(a, b))
0
ответ дан 7 December 2019 в 03:09
поделиться

Генерация случайной последовательности чисел из любого распределения вероятностей очень проста в R. Сделать это специально для нормального распределения

c = 1
d = 2
x <- rnorm(3000, c, d)

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

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

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

plot(density(x))

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

3
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: