2016-12-06 78 views

回答

5

因此,这是你的函数现在(希望你知道怎么写的R功能;如果没有,检查writing your own function):

f <- function (x) (pi/2) * (1/(1 + 0.25 * x^2)) 

f(-Inf, Inf)定义,因此在这个范围内的整合给出了一个不定积分。幸运的是,接近Infx^(-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) 

density

+0

像往常一样,好的选择。 – akrun

+0

谢谢,再次精彩的回应!现在我有了可能的分布函数,我想知道如何使用这个新的分布函数创建一个说n = 1000的随机样本? – Chris95

+0

@ZheyuanLi完成。 – Chris95

1

既然我有可能的分布函数,我想知道如何使用这个新的分布函数创建一个随机样本n = 1000

一个离题的问题,但没有你做一个新的线程就可以回答。它很有用,因为它变得微妙。

enter image description here

比较

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) 

enter image description here