1
A
回答
5
因此,这是你的函数现在(希望你知道怎么写的R功能;如果没有,检查writing your own function):
f <- function (x) (pi/2) * (1/(1 + 0.25 * x^2))
f
上(-Inf, Inf)
定义,因此在这个范围内的整合给出了一个不定积分。幸运的是,接近Inf
在x^(-2)
速度,所以整体是明确界定,并可以计算:
C <- integrate(f, -Inf, Inf)
# 9.869604 with absolute error < 1e-09
C <- C$value ## extract integral value
# [1] 9.869604
那么你一定要规范化f
,因为我们知道一个概率密度应该集成到1:
f <- function (x) (pi/2) * (1/(1 + 0.25 * x^2))/C
您可以通过绘制其密度:
curve(f, from = -10, to = 10)
1
既然我有可能的分布函数,我想知道如何使用这个新的分布函数创建一个随机样本
n = 1000
?
一个离题的问题,但没有你做一个新的线程就可以回答。它很有用,因为它变得微妙。
比较
set.seed(0); range(simf(1000, 1e-2))
#[1] -56.37246 63.21080
set.seed(0); range(simf(1000, 1e-3))
#[1] -275.3465 595.3771
set.seed(0); range(simf(1000, 1e-4))
#[1] -450.0979 3758.2528
set.seed(0); range(simf(1000, 1e-5))
#[1] -480.5991 8017.3802
所以我觉得e = 1e-2
是合理的。我们可以借鉴的样本,做一个(缩放)直方图和覆盖密度曲线:
set.seed(0); x <- simf(1000)
hist(x, prob = TRUE, breaks = 50, ylim = c(0, 0.16))
curve(f, add = TRUE, col = 2, lwd = 2, n = 201)
像往常一样,好的选择。 – akrun
谢谢,再次精彩的回应!现在我有了可能的分布函数,我想知道如何使用这个新的分布函数创建一个说n = 1000的随机样本? – Chris95
@ZheyuanLi完成。 – Chris95