如何在R中创建分布函数?

时间:2016-12-06 05:46:50

标签: r function statistics distribution

给出以下功能:

f(x) = (1/2*pi)(1/(1+x^2/4))

如何识别它的分布并在R?

中编写此分配函数

2 个答案:

答案 0 :(得分: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)

density

答案 1 :(得分:1)

  

既然我有可能的分发函数,我想知道如何使用这个新的分布函数创建说SELECT e.FLDLNAME, e.FLDFNAME, e.FLDREC_NUM, t.FLDDATE AS [TUBER Date], t.FLDCLASS AS [TUBER Result], MAX(x.FLDDATE) AS [Most Recent XRay Date] FROM EMPLOYEE e LEFT OUTER JOIN TUBER t ON e.FLDREC_NUM = t.FLDEMPLOYEE LEFT OUTER JOIN PHYSLOG x ON e.FLDREC_NUM = x.FLDEMPLOYEE WHERE x.FLDTYPE = 'CXR' GROUP BY e.FLDLNAME, e.FLDFNAME, e.FLDREC_NUM, t.FLDDATE, t.FLDCLASS 的随机样本?

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

enter image description here

比较

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

enter image description here

相关问题