【问题标题】:How to write a function to generate a sequence of points in R?如何编写一个函数以在 R 中生成一系列点?
【发布时间】:2013-04-18 11:33:00
【问题描述】:

这是我正在处理的 PDF:

fx = 0.3 if (0<=x<1)
0.1 if (1<=x<2)
0.25 if (2<=x<3)
0.15 if (3<=x<4)
0.2 if (4<=x<5)
0 otherwise 

我必须编写一个函数 gen_xy,它将生成一系列点 (X, Y) 均匀分布在 (0, 5) X (0, 0.5) 中,直到一个点位于 y = fx(x) 曲线下的区域中。

这是我目前的代码:

fx <- function(x) c(0, 0.3,0.1,0.25,0.15,0.20, 0)
[findInterval(x, c(-Inf, 0:5,  Inf))]

x <- runif(n,0,5)
fx <- stepfun(x = 0:5, y = c(0,0.3,0.1,0.25,0.15,0.20,0))
plot(fx, ylim = c(0,0.5),xlim = c(0,5), main = 'f(x)')

现在这是我为我的函数编写代码的尝试:

gen_xy <- function() {
    done=0
    while(done==0) {
        x=runif(1,0,5)
         y=runif(1,0,0.5)
         print(c("x,y",c(x,y)))
         if(y < fx(x)) {
             done=1
         }
    }
    xy=c(x,y)
    xy
}

但我认为if(y &lt; fx) 的部分是错误的?

然后我需要生成一个包含 1000 个点的样本并绘制它们以检查它们是否是来自y=fx 曲线下的合适样本。我将如何编写这样的代码?

【问题讨论】:

  • 恐怕我不明白你的问题……你想让我们用循环给你写一个解决方案吗?您自己尝试过什么来获得 1000 分?是什么让您认为 if 声明是错误的?

标签: r function statistics probability


【解决方案1】:

您的gen_xy() 函数按照我的理解执行您希望它执行的操作...生成一系列点,直到一个点位于该线下方...然后跳出循环。我试过了,通常它只产生几个点……如果你在循环中添加 points(x,y,col="red") 或类似的东西,你可以将它们添加到你的情节中。

要获得 1000 分,您可以执行以下操作:

     x=runif(1000,0,5)
     y=runif(1000,0,0.5)

然后您可以使用points(x,y) 将其放在您的情节中

但我不确定你对适当样本的意思。 ??

您可以再次将生成的点与曲线进行比较:

     y < fx(x)

并将它们作为 x[y

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2022-10-15
    • 2021-01-26
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多