| Title: | N-Power Fourier Deconvolution | 
| Version: | 1.0.0 | 
| Description: | Provides tools for non-parametric Fourier deconvolution using the N-Power Fourier Deconvolution (NPFD) method. This package includes methods for density estimation (densprf()) and sample generation (createSample()), enabling users to perform statistical analyses on mixed or replicated data sets. | 
| Depends: | R (≥ 3.5.0) | 
| Imports: | siggenes, KernSmooth, splines, stats, graphics, VGAM | 
| License: | GPL-3 | 
| Encoding: | UTF-8 | 
| Suggests: | knitr, rmarkdown | 
| VignetteBuilder: | knitr | 
| RoxygenNote: | 7.3.2 | 
| NeedsCompilation: | no | 
| Packaged: | 2024-10-31 09:31:12 UTC; Akin | 
| Author: | Akin Anarat [aut, cre] | 
| Maintainer: | Akin Anarat <akin.anarat@hhu.de> | 
| Repository: | CRAN | 
| Date/Publication: | 2024-11-04 11:10:04 UTC | 
Create a Sample from a Centered Distribution
Description
This function creates a sample from a centered distribution based on replicates of mixed data.
Usage
createSample(z1, z2)
Arguments
| z1 | A numeric vector where  | 
| z2 | A numeric vector of the same length as  | 
Value
A numeric vector representing a sample from the centered distribution.
Examples
# Set seed for reproducibility
set.seed(123)
# Generate random data
x1 <- rnorm(1000)
x2 <- rnorm(1000)
y <- rgamma(1000, 10, 2)
z1 <- x1 + y
z2 <- x2 + y
# Use createSample to generate a sample
x <- createSample(z1, z2)
# Perform density estimation
f.x <- stats::density(x, adjust = 1.5)
x.x <- f.x$x
f <- dnorm(x.x)
# Plot the results
plot(NULL, xlim = range(f.x$x), ylim = c(0, max(f, f.x$y)), xlab = "x", ylab = "Density")
lines(x.x, f, col = "blue", lwd = 2)
lines(f.x, col = "orange", lwd = 2)
legend("topright", legend = c(expression(f), expression(f[x])), col = c("blue", "orange"), lwd = 2)
N-Power Fourier Deconvolution
Description
Estimates the density f_y, given vectors x and z, where f_z results from the convolution of f_x and f_y.
Usage
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
)
Arguments
| 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. | 
Value
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  | 
Author(s)
Akin Anarat akin.anarat@hhu.de
References
Anarat A., Krutmann, J., and Schwender, H. (2024). A nonparametric statistical method for deconvolving densities in the analysis of proteomic data. Submitted.
Examples
# 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))
Density Estimation Function
Description
This function estimates the density using a Poisson GLM with natural splines.
Usage
densprf(
  x,
  n.interval = NULL,
  df = 5,
  knots.mode = TRUE,
  type.nclass = c("wand", "scott", "FD"),
  addx = FALSE
)
Arguments
| x | Input data vector. | 
| n.interval | Number of intervals (optional). | 
| df | Degrees of freedom for the splines. | 
| knots.mode | Boolean to determine if quantiles should be used for knots. | 
| type.nclass | Method for determining number of classes. | 
| addx | Add  | 
Details
densprf is a modification of the denspr function from the siggenes package.
For more details, see the documentation in the siggenes package.
Value
The function densprf(x) returns a function that, for a given input z, computes the estimated density evaluated at the position values of z as a result.
Examples
# Set seed for reproducibility
set.seed(123)
# Generate random data
z <- rnorm(1000)
# Apply densprf function
f <- densprf(z)
# Define sequences for evaluation
x1 <- seq(-4, 4, 0.5)
x2 <- seq(-5, 5, 0.1)
# Evaluate the density function at specified points
f1 <- f(x1)
f2 <- f(x2)