View source: R/robustMeanVarCurve.R
mean_var_logwinf | R Documentation |
mean_var_logwinf
calculates the expectation and
variance of a log Winsorized F distribution by
appealing to methods for numerical integration.
mean_var_logwinf( df1, df2, p_low = 0.01, p_up = 0.1, nw = gauss.quad(128, kind = "legendre") )
df1, df2 |
Vectors of numbers of numerator and denominator degrees of
freedom. |
p_low, p_up |
Vectors of lower- and upper-tail probabilities for
Winsorizing. Each element must be strictly larger than 0, and each pair
of Note that |
nw |
A list containing |
The function implements exactly the same method described in Phipson et al., 2016 (see "References").
A list consisting of the following components:
mu
Vector of expectations.
v
Vector of variances.
Phipson, B., et al., Robust Hyperparameter Estimation Protects against Hypervariable Genes and Improves Power to Detect Differential Expression. Annals of Applied Statistics, 2016. 10(2): p. 946-963.
gauss.quad
for calculating nodes and
weights for Gaussian quadrature.
# Derive the expectation and variance of a log Winsorized F distribution by # simulation. random_logwinf <- function(n, df1, df2, p_low, p_up) { x <- rf(n, df1, df2) q_low <- qf(p_low, df1, df2, lower.tail = TRUE) q_up <- qf(p_up, df1, df2, lower.tail = FALSE) x[x < q_low] <- q_low x[x > q_up] <- q_up x <- log(x) c(mean(x), var(x)) } # Set parameters. n <- 10000 df1 <- 2 df2 <- 2 ^ (0:10) p_low <- 0.01 p_up <- 0.1 # Compare simulation results with those from numerical integration. set.seed(100) res1 <- vapply(df2, function(x) random_logwinf(n, df1, x, p_low, p_up), numeric(2)) res2 <- mean_var_logwinf(df1, df2, p_low, p_up) # Compare mean. plot(0:10, res1[1, ], type = "l", lwd = 2, col = "red", xlab = "Log2(df2)", ylab = "Mean") lines(0:10, res2$mu, lty = 5, lwd = 2, col = "blue") legend("topright", c("Simulation", "Numerical integration"), lty = c(1, 5), lwd = 2, col = c("red", "blue")) # Compare variance. plot(0:10, res1[2, ], type = "l", lwd = 2, col = "red", xlab = "Log2(df2)", ylab = "Var") lines(0:10, res2$v, lty = 5, lwd = 2, col = "blue") legend("topright", c("Simulation", "Numerical integration"), lty = c(1, 5), lwd = 2, col = c("red", "blue")) # When df2 is Inf. random_logwinf(n, df1, Inf, p_low, p_up) mean_var_logwinf(df1, Inf, p_low, p_up)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.