deconvolve | R Documentation |
Estimates the density f_y
, given vectors x
and z
, where f_z
results from the convolution of f_x
and f_y
.
deconvolve(
x = NULL,
z,
mode = c("empirical", "denspr"),
dfx = 5,
dfz = 5,
Lx = 10^2,
Lz = 10^2,
Ly = 10^2,
N = 1:100,
FT.grid = seq(0, 100, 0.1),
lambda = 1,
eps = 10^-3,
delta = 10^-2,
error = c("unknown", "normal", "laplacian"),
sigma = NULL,
calc.error = FALSE,
plot = FALSE,
legend = TRUE,
positive = FALSE
)
x |
Vector of observations for |
z |
Vector of observations for |
mode |
Deconvolution mode ( |
dfx |
Degrees of freedom for the estimation of |
dfz |
Degrees of freedom for the estimation of |
Lx |
Number of points for |
Lz |
Number of points for |
Ly |
Number of points for |
N |
Possible power values. |
FT.grid |
Vector of grid for Fourier transformation of |
lambda |
Smoothing parameter. |
eps |
Tolerance for convergence. |
delta |
Small margin value. |
error |
Error model ( |
sigma |
Standard deviation for normal or Laplacian error. |
calc.error |
Logical indicating whether to calculate error (10 x ISE between |
plot |
Logical indicating whether to plot |
legend |
Logical indicating whether to include a legend in the plot if |
positive |
Logical indicating whether to enforce non-negative density estimation. |
A list with the following components:
x |
A vector of |
y |
A vector of |
N |
The power used in the deconvolution process. |
error |
The calculated error if |
Akin Anarat akin.anarat@hhu.de
Anarat A., Krutmann, J., and Schwender, H. (2024). A nonparametric statistical method for deconvolving densities in the analysis of proteomic data. Submitted.
# Deconvolution when mixed data and data from an independent experiment are provided:
set.seed(123)
x <- rnorm(1000)
y <- rgamma(1000, 10, 2)
z <- x + y
f <- function(x) dgamma(x, 10, 2)
independent.x <- rnorm(100)
fy.NPFD <- deconvolve(independent.x, z, calc.error = TRUE, plot = TRUE)
x.x <- fy.NPFD$x
fy <- f(x.x)
# Check power and error values
fy.NPFD$N
fy.NPFD$error
# Plot density functions
plot(NULL, xlim = range(y), ylim = c(0, max(fy, fy.NPFD$y)), xlab = "x", ylab = "Density")
lines(x.x, fy, col = "blue", lwd = 2)
lines(fy.NPFD, col = "orange", lwd = 2)
legend("topright", legend = c(expression(f[y]), expression(f[y]^{NPFD})),
col = c("blue", "orange"), lwd = c(2, 2))
# For replicated mixed data:
set.seed(123)
x1 <- VGAM::rlaplace(1000, 0, 1/sqrt(2))
x2 <- VGAM::rlaplace(1000, 0, 1/sqrt(2))
y <- rgamma(1000, 10, 2)
z1 <- z <- x1 + y
z2 <- x2 + y
x <- createSample(z1, z2)
fy.NPFD <- deconvolve(x, z, mode = "denspr", calc.error = TRUE, plot = TRUE)
x.x <- fy.NPFD$x
fy <- f(x.x)
# Check power and error values
fy.NPFD$N
fy.NPFD$error
# Plot density functions
plot(NULL, xlim = range(y), ylim = c(0, max(fy, fy.NPFD$y)), xlab = "x", ylab = "Density")
lines(x.x, fy, col = "blue", lwd = 2)
lines(fy.NPFD, col = "orange", lwd = 2)
legend("topright", legend = c(expression(f[y]), expression(f[y]^{NPFD})),
col = c("blue", "orange"), lwd = c(2, 2))
# When the distribution of x is asymmetric and the sample size is very small:
set.seed(123)
x <- rgamma(5, 4, 2)
y <- rgamma(1000, 10, 2)
z <- x + y
fy.NPFD <- deconvolve(x, z, mode = "empirical", lambda = 2)
x.x <- fy.NPFD$x
fy <- f(x.x)
# Check power value
fy.NPFD$N
# Plot density functions
plot(NULL, xlim = range(y), ylim = c(0, max(fy, fy.NPFD$y)), xlab = "x", ylab = "Density")
lines(x.x, fy, col = "blue", lwd = 2)
lines(fy.NPFD, col = "orange", lwd = 2)
legend("topright", legend = c(expression(f[y]), expression(f[y]^{NPFD})),
col = c("blue", "orange"), lwd = c(2, 2))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.