我正在尝试复制该情节
根据该文章,已绘制了整条线,并使用该公式生成了随机数
我用来生成随机数的代码是
r <- c(runif(600, min = 0, max = 1))
pnumbers = c()
a = 0.17
b = 4200
for(i in 1:600){
pnumbers[i] = a*(1 - r[i]*(1 - (a/b)^0.75))^(-1/0.75)
}
x2 <- sort(pnumbers)
并使用该图中所示的等式11中的随机数
该函数是使用此代码计算的
pareto1 <- ppareto(x2, 0.17, 0.75)
survpareto <- 1 - pareto1
我可以得到直线虚线,但无法获得带有空圆的曲线图。假定空cicle图是由数据集和等式11组成的,但我得到了另一条直线!其实...一样的直线!! The graph that I got 我用这段代码得到了那个情节
pdf("PruebaGraficoLogLog.pdf")
pareto2 <- 1 - (0.17/x)^0.75
survpareto2 <- 1 - pareto2
plot(x2, survpareto, log = "xy", col = "blue", type = "l", lty = 5)
points(x, survpareto2, log = "xy")
dev.off()
我的问题是,为了正确地复制点火棒,我该怎么办?我究竟做错了什么? 感谢您的帮助与合作。
编辑:我更改了标题,以使其更加具体和详细。 这是我在玩具模型中使用的序言(包装)
library(EnvStats)
library(stats)
library(base)
我没有使用软件包fitdistrplus
,因为(而且我也不知道为什么)我无法将其安装在计算机中。我使用的是R 3.3,但该软件包的安装始终会失败。
答案 0 :(得分:1)
首先有两个重要评论:
图中圆圈所示的样本的生存分布与您给定的参数a
,b
,c
不匹配在您的帖子中。您能否解释一下如何得出以下特定值:a = 0.17
,b = 4200
,c = 0.75
?
我不得不说我不太理解练习的全部内容。该图显示了有界/截断的帕累托分布的样本(使用逆变换采样绘制,请参见下文)。然后表明,样本的生存分布与有界的帕累托分布一致,而不是无界的帕累托分布(这显然是预期的)。当您尝试从基础分布(此处:有界帕累托)中估计参数时,通常会执行此操作。 那么您是否想问如何估计截断的帕累托分布的参数?如果是这样,这取决于数据(对于随机数据,固定种子意味着没有可重复性)和估算方法(通常为ML)。也许看看MASS:fitdistr
会很有用。
除了这些注释之外,这是一个可重现的示例,用于生成x
并绘制log x
与log S(x)
的关系。
根据您给出的方程式生成n=600
个样本x
(根据图形标题,我认为这是等式13)。
set.seed(2018)
rsample <- function(n, a, b, c) a * (1 - runif(n) * (1 - (a / b)^c)) ^ (-1 / c)
x <- rsample(600, 0.17, 4200, 0.75)
请注意,x
是通过inverse-transform sampling (ITS)的bounded Pareto distribution生成的。将系数a
,b
,c
映射到来自维基百科的有界帕累托分布的定义很容易:
a = L (location parameter)
b = H (location parameter)
c = alpha (shape parameter)
我们使用F_X(x) = P(X ≤ x)
ecdf
Px <- ecdf(x)
我们现在可以为任何值F_X(x)
计算x
(请记住,有界帕累托分布的支持是L ≤ x ≤ H
)。我们选择的值应使其对应于图中对数刻度所示的间隔。然后,生存函数就是S_X(x) = 1 - F_X(x) = P(X > x)
。
library(tidyverse)
df <- data.frame(
x = exp(seq(0, 1.6, 0.05))) %>%
mutate(
Px = Px(x),
Sx = 1 - Px)
我们将x
与生存函数S_X(x)
进行对数对数绘制。
ggplot(df, aes(log(x), log(Sx))) +
geom_point(size = 3, shape = 21)
如您所见,生存分布的形状与图形不匹配,表明参数a = 0.17
,b = 4200
,c = 0.75
与图中用于生存函数样本的参数。