The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Hongxiang Li, Chenglin Xu, and Tsung Fei Khang
PBGoF provides goodness-of-fit procedures, robust parameter fitting,
and graphical diagnostics for univariate skew-normal and skew-t
distributions. Version 0.1.0 focused on skew-normal models, including
robust fitting, precomputed-quantile tests, and parametric-bootstrap KS
and CvM tests. Version 0.2.0 extends the package to skew-t models
through st.fit.robust(), skew-t parametric-bootstrap KS and
CvM tests, and the unified para.bootstrap.test() interface,
which allows users to select either the SN or ST model. It also adds
st.plot.check() and the model-selectable
cdf.plot.check() and QQ.plot() diagnostics for
SN and ST models.
Install PBGoF 0.2.0 from a local source archive with:
install.packages("PBGoF_0.2.0.tar.gz", repos = NULL, type = "source")The original PBGoF GitHub installation instructions remain applicable to PBGoF itself:
if (!"devtools" %in% rownames(installed.packages())) {
install.packages("devtools")
}
devtools::install_github("Divo-Lee/PBGoF")or with pak:
if (!"pak" %in% rownames(installed.packages())) {
install.packages("pak")
}
pak::pkg_install("Divo-Lee/PBGoF")PBGoF depends on the R packages sn and
methods.
For skew-t models, PBGoF provides st.fit.robust(),
para.bootstrap.test(), and
st.plot.check().
Let \(X_1,\ldots,X_n\) be an independent sample. Under the null hypothesis,
\[ H_0:\quad X_i \overset{\mathrm{iid}}{\sim} \mathrm{SN}(\xi,\omega,\alpha), \qquad \xi\in\mathbb{R},\quad \omega>0,\quad \alpha\in\mathbb{R}. \]
Writing \(z=(x-\xi)/\omega\), the skew-normal density is
\[ f_{\mathrm{SN}}(x;\xi,\omega,\alpha)=\frac{2}{\omega} \phi(z) \Phi(\alpha z), \]
where \(\phi\) and \(\Phi\) are the standard normal density and distribution functions. Because \(\boldsymbol\theta=(\xi,\omega,\alpha)^{\mathsf T}\) is estimated from the sample, this is a composite goodness-of-fit problem; the usual KS null distribution for a fully specified model is not applicable.
PBGoF estimates the model through sn.fit.robust(): MLE
is attempted first, followed by increasingly stabilized penalized fits.
A fit is accepted only if the estimates and standard errors are finite
and the scale is positive.
The skew-t family extends the skew-normal model by adding a positive degrees-of-freedom parameter \(\nu\). Its direct parameterization is \((\xi,\omega,\alpha,\nu)\). The extra parameter allows asymmetry and heavy tails to be represented together; as \(\nu\) becomes large, the skew-t model approaches the skew-normal model.
st.fit.robust() first attempts ordinary MLE and then
uses Q-penalized MPLE as a fallback. Its DP output contains
xi, omega, alpha, nu
and their standard errors. CP output is available when the corresponding
moments exist.
For order statistics \(X_{(1)}\leq\cdots\leq X_{(n)}\), define
\[ U_{(i)}=F_{\mathrm{SN}} \left(X_{(i)};\widehat{\boldsymbol\theta}\right), \qquad i=1,\ldots,n. \]
The two-sided Kolmogorov-Smirnov discrepancy and the statistic used by PBGoF are
\[ D_n=\max_{1\leq i\leq n}\left(\frac{i}{n}-U_{(i)},\;U_{(i)}-\frac{i-1}{n}\right), \qquad T_{\mathrm{KS}}=\sqrt{n}\,D_n. \]
The Cramer-von Mises statistic is
\[ W_n^2=\frac{1}{12n}+\sum_{i=1}^{n}\left[U_{(i)}-\frac{2i-1}{2n}\right]^2. \]
The parametric-bootstrap CvM test uses \(W_n^2\). Within the tabulated sample-size range, the precomputed-quantile CvM test uses
\[ T_{\mathrm{CvM}}=\sqrt{n}\,W_n^2. \]
The unified function para.bootstrap.test() selects the
model through model = "SN" or model = "ST",
and selects the statistic through statistic = "KS" or
statistic = "CvM". For example,
para.bootstrap.test(x, model = "SN", statistic = "KS") and
para.bootstrap.test(x, model = "ST", statistic = "CvM")
calibrate the corresponding tests for an estimated model. The previous
model- and statistic-specific functions remain available for
compatibility. Both model families use the same full-estimation
bootstrap principle:
For \(B_{\mathrm{valid}}\) finite bootstrap statistics, PBGoF uses
\[ \widehat p_{\mathrm{boot}}=\frac{1+\displaystyle\sum_{b=1}^{B_{\mathrm{valid}}}\mathbf{1} \left(T_b^*\geq T_{\mathrm{obs}}\right)}{B_{\mathrm{valid}}+1}. \]
Failed fits are excluded and reported. Re-estimation in every replicate calibrates the statistic for the composite null rather than incorrectly treating the fitted distribution as fixed. For skew-t, all four parameters, including \(\nu\), are re-estimated in every valid replicate.
The precomputed skew-normal tests remain available through
PBGoF_ks_test() and PBGoF_cvm_test().
PBGoF_ks_test() and PBGoF_cvm_test() use
tables generated from 100,000 Monte Carlo replicates per available
sample-size and centered-skewness combination. The data are fitted in
two parameterizations:
The lookup value is
\[ \gamma_{1,\mathrm{used}}=\min \left(0.99,\max \left[0.01,\mathrm{round} \left(\left|\widehat\gamma_1\right|,2\right)\right]\right). \]
The absolute value follows reflection symmetry: if \(X\sim\mathrm{SN}(\xi,\omega,\alpha)\), then
\(-X\) has shape \(-\alpha\). The signs of \(\alpha\) and \(\gamma_1\) reverse, but the null
distributions of the reflection-invariant EDF statistics do not.
Therefore, estimated skewness values with the same absolute magnitude
but opposite signs use the same reference-table row. PBGoF retains the
signed gamma1_hat and returns the non-negative lookup value
as gamma1_used.
The bundled tables cover sample sizes through 500. For \(n>500\), all observations remain in the fit and EDF, while the \(n=500\) row is used for table lookup. The KS test compares \(\sqrt{n}D_n\) with the stored \(n=500\) quantiles. For CvM, the stored \(n=500\) quantiles are divided by \(\sqrt{500}\) and compared with the observed \(W_n^2\). This follows the approximation of using the \(n=500\) critical values for larger samples.
Let \(q_p^{\dagger}\) denote the selected quantiles expressed on the same scale as the observed statistic; for CvM with \(n>500\), \(q_p^{\dagger}=q_p/\sqrt{500}\). The table-based p-value is
\[ p^{\*}=\min_{q_p^{\dagger}\geq T_{\mathrm{obs}}}p,\qquad \widehat p_{\mathrm{table}}=1-p^{\*}. \]
The probability grid is 0.01 to 0.99 in increments of 0.01, so the result is a conservative step-function approximation. PBGoF does not interpolate across sample size or skewness.
A small p-value is evidence against the fitted model. A large p-value
does not prove skew-normality or skew-t adequacy; it means that the test
did not detect a departure at the available sample size and calibration
resolution. Use sn.plot.check() for SN fits and
st.plot.check() for skew-t fits alongside the corresponding
formal tests. The precomputed-quantile functions remain specific to the
skew-normal family.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.