偏斜广义误差分布的累积分布函数,用于 QQ 图。

huangapple go评论96阅读模式
英文:

Cumulative Distribution Function of the skewed generalized error distribution for qq-plot

问题

I'm trying to calculate the cumulative distribution function of the skewed generalized error distribution with the probability density function from Theodossiou (http://www.mfsociety.org/modules/modDashboard/uploadFiles/journals/MJ~0~p1a4fjq38m1k2p45t6481fob7rp4.pdf):

偏斜广义误差分布的累积分布函数,用于 QQ 图。

And in R it looks like this:

  1. psi <- -0.09547862
  2. m <- 0.1811856
  3. g <- -0.1288893
  4. d <- 0.8029088
  5. c <- (2/(1+exp(-g)))-1
  6. p <- exp(psi)
  7. y <- function(x) ((d**(1-(1/d)))/(2*p))*gamma(1/d)**(-1)*exp(-(1/d)*((abs(x-m)**d)/((1+sign(x-m)*c)**(d)*p**(d))))

I do this is to fit the skewed generalized error distribution to my data and assess the distributions fit to my data by creating a qq-plot. So now I need to calculate the cumulative distribution function and then the inverse cdf. For the inverse cdf I plan to use the inversion-function from the GofKernel-Package. But for this I need the cdf. Is there any way to calculate that with numerical integration in R?

英文:

I´m trying to calculate the cumulative distribution function of the skewed generalized error distribution with the probability density function from Theodossiou(http://www.mfsociety.org/modules/modDashboard/uploadFiles/journals/MJ~0~p1a4fjq38m1k2p45t6481fob7rp4.pdf):

偏斜广义误差分布的累积分布函数,用于 QQ 图。

And in R it looks like this:

  1. psi <- -0.09547862
  2. m <- 0.1811856
  3. g <- -0.1288893
  4. d <- 0.8029088
  5. c <- (2/(1+exp(-g)))-1
  6. p <- exp(psi)
  7. y <- function(x) ((d**(1-(1/d)))/(2*p))*gamma(1/d)**(-1)*exp(-(1/d)*((abs(x-m)**d)/((1+sign(x-m)*c)**(d)*p**(d))))

I do this is to fit the skewed generalized error distribution to my data and assess the distributions fit to my data by creating a qq-plot. So now I need to calculate the cumulative distribution function and then the inverse cdf. For the inverse cdf I plan to use the inversion-function from the GofKernel-Package. But for this I need the cdf. Is there anyway to calculate that with numerical integration in R?

答案1

得分: 0

为了通过积分获取累积函数,您可以将x值传递给一个从适当的极低值积分到上限为x的函数。

  1. # 首先查看密度函数
  2. plot(y(x) ~ x)
  3. cum <- sapply(x, function(x) integrate(y, -10, x)$value)
  4. plot(cum ~ x)
  5. # 因此,反函数就是`x`关于`cum`的函数
  6. plot(x ~ cum)

请注意,这是给定的代码的翻译部分。

英文:

To get a cumulative function via integration you can pass the x-values to a function that integrates from a suitable extreme low value to an upper limit that is x

  1. # First look at the density function
  2. plot( y(x) ~ x )
  3. cum &lt;- sapply(x, function(x) integrate(y,-10, x)$value )
  4. plot( cum ~ x)
  5. # So the inverse is just `x` as a function of `cum`
  6. plot( x ~ cum)

答案2

得分: -1

一般来说,如果您想要估计累积分布函数,请使用以下方式使用ecdf函数:

  1. x <- seq(-10, 10, 0.1)
  2. Fn <- ecdf(y(x))
  3. plot(Fn)

如果您想要可视化两个数据集的相似性,请使用qqplot如下所示:

  1. y1 <- y(x) # 从您的函数获取数据
  2. y2 <- rnorm(100) # 一些通用数据
  3. qqplot(y1, y2) # 如果这两个数据集来自相同的分布,您应该看到一条直线
英文:

In general, if you want to estimate the cumulative distribution function, use the function ecdf as follows:

  1. x &lt;- seq(-10,10,0.1)
  2. Fn &lt;- ecdf(y(x))
  3. plot(Fn)

If you want to visualize how two data sets are similar, use qqplot as follows:

  1. y1 &lt;- y(x) # from your function
  2. y2 &lt;- rnorm(100) # some generic data
  3. qqplot(y1, y2) # if the two data sets are from the same
  4. # distribution, you should see a straight line

huangapple
  • 本文由 发表于 2023年2月16日 05:28:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75465607.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定