Случайное, соблазнительное распределение точек данных - PullRequest
3 голосов
/ 20 декабря 2010

Фон

Приведите пример программирования R.

Проблема

Создайте распределение значений, которое при моделировании выдает кривую, похожую на:

image

По сути, я хотел бы сделать что-то вроде:

x <- seq( 0, 2, by=0.01 )
y <- sin( 2 * pi * cos( x - 1/2 ) )
plot( x, y * runif( x ) )

Но без скопления точек данных около 0,5:

image

Вопрос

Как бы вы создали такой дистрибутив?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 декабря 2010
slo<-0.5 #slope of underlying trend
sta<--0.5 #starting y value
amp<-0.2 #amplitude of sine wave
fre<-3 #frequency of sine wave
noi<-0.8 #amplitude of noise term
x<-seq(0,2,0.01)
y<-sta+(slo*x)+(amp*sin(fre*x)) #y no noise
ywnoise<-y+(noi*(runif(length(x))-0.5)) #y with noise

plot(x,ywnoise)
lines(x,y, col="orange")
grid()
1 голос
/ 20 декабря 2010

Поскольку sin (2 * pi * cos (x-0.5)) обнуляется при 0,5, попробуйте просто добавить runif()

x <- seq( 0, 2, by=0.01 )
y <- sin( 2 * pi * cos( x - 1/2 ) ) +runif(201)
plot( x,y  )
lines(loess(y~x)$x, lowess(y~x)$y)
1 голос
/ 20 декабря 2010

Хммм ... Я не уверен, что вам нужны какие-то конкретные статистические свойства для вашего распределения, но что-то вроде этого избавляет от скопления

plot(x,y+rnorm(length(x), 0, 0.2))
...