# fitfdist: Moment Estimation of Scaled F-Distribution In limma: Linear Models for Microarray Data

## Description

Moment estimation of the parameters of a scaled F-distribution given one of the degrees of freedom. This function is called internally by `eBayes` and `squeezeVar` and is not usually called directly by a user.

## Usage

 ```1 2``` ```fitFDist(x, df1, covariate=NULL) fitFDistRobustly(x, df1, covariate=NULL, winsor.tail.p=c(0.05,0.1), trace=FALSE) ```

## Arguments

 `x` numeric vector or array of positive values representing a sample from a scaled F-distribution. `df1` the first degrees of freedom of the F-distribution. Can be a single value, or else a vector of the same length as `x`. `covariate` if non-`NULL`, the estimated scale value will depend on this numeric covariate. `winsor.tail.p` numeric vector of length 1 or 2, giving left and right tail proportions of `x` to Winsorize. `trace` logical value indicating whether a trace of the iteration progress should be printed.

## Details

`fitFDist` implements an algorithm proposed by Smyth (2004) and Phipson et al (2016). It estimates `scale` and `df2` under the assumption that `x` is distributed as `scale` times an F-distributed random variable on `df1` and `df2` degrees of freedom. The parameters are estimated using the method of moments, specifically from the mean and variance of the `x` values on the log-scale.

When `covariate` is supplied, a spline curve trend will be estimated for the `x` values and the estimation will be adjusted for this trend (Phipson et al, 2016).

`fitFDistRobustly` is similar to `fitFDist` except that it computes the moments of the Winsorized values of `x`, making it robust against left and right outliers. Larger values for `winsor.tail.p` produce more robustness but less efficiency. When `covariate` is supplied, a loess trend is estimated for the `x` values. The robust method is described by Phipson et al (2016).

As well as estimating the F-distribution for the bulk of the cases, i.e., with outliers discounted, `fitFDistRobustly` also returns an estimated F-distribution with reduced df2 that might be appropriate for each outlier case.

## Value

`fitFDist` produces a list with the following components:

 `scale` scale factor for F-distribution. A vector if `covariate` is non-`NULL`, otherwise a scalar. `df2` the second degrees of freedom of the fitted F-distribution.

`fitFDistRobustly` returns the following components as well:

 `tail.p.value` right tail probability of the scaled F-distribution for each `x` value. `prob.outlier` posterior probability that each case is an outlier relative to the scaled F-distribution with degrees of freedom `df1` and `df2`. `df2.outlier` the second degrees of freedom associated with extreme outlier cases. `df2.shrunk` numeric vector of values for the second degrees of freedom, with shrunk values for outliers. Most values are equal to `df2`, but outliers have reduced values depending on how extreme each case is. All values lie between `df2.outlier` and `df2`.

## Note

The algorithm used by `fitFDistRobustly` was revised slightly in limma 3.27.6. The `prob.outlier` value, which is the lower bound for `df2.shrunk`, may be slightly smaller than previously.

## Author(s)

Gordon Smyth and Belinda Phipson

## References

Smyth, G. K. (2004). Linear models and empirical Bayes methods for assessing differential expression in microarray experiments. Statistical Applications in Genetics and Molecular Biology, 3, No. 1, Article 3. http://www.statsci.org/smyth/pubs/ebayes.pdf

Phipson, B, Lee, S, Majewski, IJ, Alexander, WS, and Smyth, GK (2016). Robust hyperparameter estimation protects against hypervariable genes and improves power to detect differential expression. Annals of Applied Statistics 10, 946-963. http://projecteuclid.org/euclid.aoas/1469199900

This function is called by `squeezeVar`, which in turn is called by `eBayes` and `treat`.

This function calls `trigammaInverse`.

## Examples

 ```1 2``` ```x <- rf(100,df1=8,df2=16) fitFDist(x,df1=8) ```

### Example output

```\$scale
 0.9770214

\$df2
 17.14126
```

limma documentation built on Nov. 8, 2020, 8:28 p.m.