Title: | K-Distribution and Weibull Paper |
Version: | 0.2 |
Maintainer: | Tim Lamont-Smith <t.lamontsmith@gmail.com> |
Author: | Tim Lamont-Smith [aut, cre] |
Description: | Density, distribution function, quantile function and random generation for the K-distribution. A plotting function that plots data on Weibull paper and another function to draw additional lines. See results from package in T Lamont-Smith (2018), submitted J. R. Stat. Soc. |
Depends: | R (≥ 3.1.1) |
Imports: | stats, graphics |
License: | GPL-3 |
Encoding: | UTF-8 |
LazyData: | true |
RoxygenNote: | 5.0.1 |
Packaged: | 2018-05-14 17:21:00 UTC; Tim |
NeedsCompilation: | no |
Repository: | CRAN |
Date/Publication: | 2018-05-16 14:22:02 UTC |
kdist: A package for calculating and plotting non-Gaussian distributions
Description
The kdist package provides two categories of important functions: dk etc, and weiplot.
dk functions
The kdist functions dk, pk, qk and rk, calculates the K-distribution
weiplot functions
weiplot takes data and plots it on Weibull paper. Weilines adds lines to a Weibull plot.
The K-distribution.
Description
Density, distribution function, quantile function and random generation for
the K-distribution with parameters shape
and scale
.
Usage
dk(x, shape = 1, scale = 1, intensity = FALSE, log = FALSE)
pk(q, shape = 1, scale = 1, intensity = FALSE, log.p = FALSE,
lower.tail = TRUE)
qk(p, shape = 1, scale = 1, intensity = FALSE, log.p = FALSE)
rk(n, shape = 1, scale = 1, intensity = FALSE)
Arguments
x , q |
vector of quantiles |
shape , scale |
shape and scale parameters both defaulting to 1. |
intensity |
logical; if TRUE, quantiles are intensities not amplitudes. |
log , log.p |
logical; if TRUE, probabilities p are given as log(p). |
lower.tail |
logical; if TRUE (default), probabilities are P[X = x], otherwise, P[X > x]. |
p |
vector of probabilities |
n |
number of observations |
Details
The K-distribution with shape
parameter \nu
and
scale
parameter b
has amplitude density given by
f(x) = [4 x^\nu / \Gamma(\nu)]
[(\nu / b)^(1+\nu/2)]
K(2 x \sqrt(\nu/b),\nu-1)
.
Where K
is a modified Bessel function of the second kind.
For \nu -> Inf
, the K-distrubution tends to a Rayleigh
distribution, and for \nu = 1
it is the Exponential
distribution.
The function base::besselK
is used in the calculation, and
care should be taken with large input arguements to this function,
e.g. b
very small or x, \nu
very large.
The cumulative distribution function for
the amplitude, x
is given by
F(x) = 1 - 2 x^\nu (\nu/b)^(\nu/2) K(2 x \sqrt(\nu/b), \nu)
.
The K-Distribution is a compound distribution, with Rayleigh
distributed amplitudes (exponential intensities) modulated by another
underlying process whose amplitude is chi-distributed and whose
intensity is Gamma distributed. An Exponential distributed number
multiplied by a Gamma distributed random number is used to
generate the random variates.
The m
th moments are given by \mu_m = (b/\nu)^(m/2) \Gamma(0.5m + 1)
\Gamma(0.5m + \nu) / \Gamma(\nu)
, so that the root mean square
value of x is the scale
factor, <x^2> = b
.
Value
The function dk
gives the density, pk
gives the distribution
function, qk
gives the quantile function, and rk
generates random variates.
References
E Jakeman and R J A Tough, "Non-Gaussian models for the statistics of scattered waves", Adv. Phys., 1988, vol. 37, No. 5, pp471-529
See Also
Distributions
for other standard distributions, including dweibull
for the Weibull
distribution and dexp
for the exponential distribution.
Examples
#=====
r <- rk(10000, shape = 3, scale = 5, intensity = FALSE)
fn <- stats::ecdf(r)
x <- seq(0, 10, length = 100)
plot(x, fn(x))
lines(x, pk(x, shape = 3, scale = 5, intensity = FALSE))
#======
r <- rk(10000, shape = 3, scale = 5, intensity = FALSE)
d <- density(r)
x <- seq(0, 10, length = 100)
plot(d, xlim=c(0,10))
lines(x, dk(x, shape = 3, scale = 5, intensity = FALSE))
Add Lines onto a Weibull Plot
Description
Weibull distributed data plots as a straight line on log-log plot using
wlines()
. It is best used after function wplot()
has been
called.
Usage
weilines(x, y, lty = NULL, lwd = NULL, col = "black", type = "l",
pch = 0)
Arguments
x |
vector of values |
y |
vector of values the same length as x |
lty |
line type |
lwd |
line width |
col |
line color |
type |
type of plotting |
pch |
symbol type for type = "b" |
Details
A Weibull plot uses log paper and has log(1/(1-F(x)) versus x, where the data values x have an empirical cdf of F(x). The plot margins may need to be adjusted so that the right hand axis is visible.
See Also
wplot()
creates the Weibull plot
Examples
dummy <- c(0,0)
weiplot(dummy, xlim = c(1e-3, 10), type = "n")
x <- 10^seq(-3, 2, length = 100)
weilines(x, pexp(x), col = "red")
weilines(x, pweibull(x, 2), col = "blue")
weilines(x, pweibull(x, 3), col = "green")
Create Weibull Plot.
Description
A special type of plot where Weibull distributed data plots as a straight line. This was also originally called Rayleigh paper. Both Rayleigh and exponential distributions also plot as straight lines.
Usage
weiplot(data, n = 70, type = "p", xlim = NULL, ylim = c(0.01, 10),
main = "Weibull Plot", sub = NULL, ylab = "log(1/1-F(x))",
ylab2 = "F(x)", xlab = "x", percent = "False")
Arguments
data |
data values from which a cumulative density function will be
estimated using |
n |
number of points required in plot (default n = 70). |
type |
plot type |
xlim |
the minimum and maximum to be used for the x-axis |
ylim |
the minimum and maximum to be used for the y-axis |
main |
the title of the plot |
sub |
the sub-title of the plot |
ylab |
the title of the left y-axis |
ylab2 |
the title of the right y-axis |
xlab |
the title of the x-axis |
percent |
logical; display right hand axis as percentages |
Details
A Weibull plot uses log paper and has log(1/(1-F(x)) versus x, where the data values x have an empirical cdf of F(x). The plot margins may need to be adjusted so that the right hand axis is visible.
See Also
weilines()
adds lines to a Weibull plot
Examples
graphics::par(mar = c(5, 5, 5, 5))
r <- rexp(100000)
weiplot(r, xlim = c(1e-3, 10))
x <- 10^seq(-3, 2, length = 100)
weilines(x, pexp(x))