英文:
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):
And in R it looks like this:
psi <- -0.09547862
m <- 0.1811856
g <- -0.1288893
d <- 0.8029088
c <- (2/(1+exp(-g)))-1
p <- exp(psi)
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):
And in R it looks like this:
psi <- -0.09547862
m <- 0.1811856
g <- -0.1288893
d <- 0.8029088
c <- (2/(1+exp(-g)))-1
p <- exp(psi)
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
的函数。
# 首先查看密度函数
plot(y(x) ~ x)
cum <- sapply(x, function(x) integrate(y, -10, x)$value)
plot(cum ~ x)
# 因此,反函数就是`x`关于`cum`的函数
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
# First look at the density function
plot( y(x) ~ x )
cum <- sapply(x, function(x) integrate(y,-10, x)$value )
plot( cum ~ x)
# So the inverse is just `x` as a function of `cum`
plot( x ~ cum)
答案2
得分: -1
一般来说,如果您想要估计累积分布函数,请使用以下方式使用ecdf函数:
x <- seq(-10, 10, 0.1)
Fn <- ecdf(y(x))
plot(Fn)
如果您想要可视化两个数据集的相似性,请使用qqplot如下所示:
y1 <- y(x) # 从您的函数获取数据
y2 <- rnorm(100) # 一些通用数据
qqplot(y1, y2) # 如果这两个数据集来自相同的分布,您应该看到一条直线
英文:
In general, if you want to estimate the cumulative distribution function, use the function ecdf as follows:
x <- seq(-10,10,0.1)
Fn <- ecdf(y(x))
plot(Fn)
If you want to visualize how two data sets are similar, use qqplot as follows:
y1 <- y(x) # from your function
y2 <- rnorm(100) # some generic data
qqplot(y1, y2) # if the two data sets are from the same
# distribution, you should see a straight line
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论