From 207c57ab0080aec994b93e2100d63b7442842d51 Mon Sep 17 00:00:00 2001 From: Mark van der Loo Date: Wed, 2 Jan 2013 14:31:44 +0100 Subject: [PATCH] added plot position calculation --- build.bash | 32 ++++++++++++++++ build/DESCRIPTION | 14 +++++++ build/NAMESPACE | 0 document.bash | 6 +++ examples/plotpositions.R | 10 +++++ pkg/NEWS | 33 ++++++++++++++++ pkg/R/.R | 6 +++ pkg/R/.plotpositions.R.swp | Bin 0 -> 12288 bytes pkg/R/extremevalues.R | 6 +++ pkg/R/plotpositions.R | 44 +++++++++++++++++++++ pkg/inst/testPlotpositions.R | 22 +++++++++++ pkg/src/.fuse_hidden0000082800000002 | Bin 0 -> 14925 bytes pkg/src/R_all_finite.c | 25 ++++++++++++ pkg/src/R_plotpositions.c | 21 ++++++++++ pkg/src/plotpositions.c | 55 +++++++++++++++++++++++++++ pkg/src/plotpositions.h | 10 +++++ pkg/tests/testpackage.R | 5 +++ roxygen.R | 14 +++++++ test/autotest.R | 7 ++++ 19 files changed, 310 insertions(+) create mode 100644 build.bash create mode 100644 build/DESCRIPTION create mode 100644 build/NAMESPACE create mode 100644 document.bash create mode 100644 examples/plotpositions.R create mode 100644 pkg/NEWS create mode 100644 pkg/R/.R create mode 100644 pkg/R/.plotpositions.R.swp create mode 100644 pkg/R/extremevalues.R create mode 100644 pkg/R/plotpositions.R create mode 100644 pkg/inst/testPlotpositions.R create mode 100644 pkg/src/.fuse_hidden0000082800000002 create mode 100644 pkg/src/R_all_finite.c create mode 100644 pkg/src/R_plotpositions.c create mode 100644 pkg/src/plotpositions.c create mode 100644 pkg/src/plotpositions.h create mode 100644 pkg/tests/testpackage.R create mode 100644 roxygen.R create mode 100644 test/autotest.R diff --git a/build.bash b/build.bash new file mode 100644 index 0000000..97a86b0 --- /dev/null +++ b/build.bash @@ -0,0 +1,32 @@ +#!/bin/bash + +R=R +if [ ${#} -gt 0 ]; then + if [ "$1" = "-dev" ]; then + R=Rdev + fi +fi + +echo "######## Removing building information..." +rm -rf output + +echo "######## Copying DESCRIPTION and NAMESPACE to pkg directory..." +cp build/DESCRIPTION pkg +cp build/NAMESPACE pkg + +echo "######## Generate documentation..." +$R -q -f roxygen.R + +echo "######## Building package in output..." +mkdir output +cd output +$R CMD build ../pkg +echo "######## Testing package..." +for x in *.tar.gz +do + $R CMD check --as-cran $x +done + +echo "**BUILT USING $R" +$R --version + diff --git a/build/DESCRIPTION b/build/DESCRIPTION new file mode 100644 index 0000000..64ff506 --- /dev/null +++ b/build/DESCRIPTION @@ -0,0 +1,14 @@ +Package: extremevalues +Maintainer: Mark van der Loo +License: GPL-3 +Title: Univariate outlier detection using model distributions. +LazyData: no +Type: Package +LazyLoad: yes +Author: Mark van der Loo +Description: hallo +Version: 3.0-0 +Depends: R (>= 2.13.0) +URL: https://github.com/markvanderloo/rspa +Date: 2012-07-15 +Suggests: knitr, testthat diff --git a/build/NAMESPACE b/build/NAMESPACE new file mode 100644 index 0000000..e69de29 diff --git a/document.bash b/document.bash new file mode 100644 index 0000000..d1159f6 --- /dev/null +++ b/document.bash @@ -0,0 +1,6 @@ +#!/bin/bash + +R -f roxygen.R +R CMD Rd2pdf --force --no-preview -o manual.pdf ./pkg + + diff --git a/examples/plotpositions.R b/examples/plotpositions.R new file mode 100644 index 0000000..ce1bfa3 --- /dev/null +++ b/examples/plotpositions.R @@ -0,0 +1,10 @@ + +# simple plot positions +plotpositions(c(1,3,5)) + +# plot positions: duplicates get mean position +plotpositions(c(1,3,5,3)) + +# plot positions: duplicates get original position +plotpositions(c(1,3,5,3),duplicates='asis') + diff --git a/pkg/NEWS b/pkg/NEWS new file mode 100644 index 0000000..2bb0049 --- /dev/null +++ b/pkg/NEWS @@ -0,0 +1,33 @@ +version 3.0-0 +- BREAKING CHANGE: Complete rewrite of the package. +- plot positions of duplicates now get mean plot position by default. + +version 2.2 +- Fixed minor bug in namespace file (thanks to Duncan Murdoch for pointing that out) +- Changed dependancy on gWidgets and gWidgetstcltk to "suggest" for faster loading. +- Changed documentation of returned R2-value (thanks to Charles Lobos for useful discussion and remarks) +- Changed calculation of variance of residuals for method II (slightly underestimated previously, thanks to Javier Orche Galindo for noting this) +- Fixed a bug causing extimated parameters in method II/pareto not to be passed to output. + +version 2.1 +- Killed a bug in normal distribution / method II +- Updated references, some typo's in the man pages +- Added version 0.1 of GUI interface +- Small stuff in helpfiles + +version 2.0 +- getOutliers.r - Changed rho default, added left limit, added some input + checks +- getLognormalLimit.r - added left limit +- getExponentialLimit.r - added left limit +- getWeibullLimit.r - added left limit +- getNormalLimit.r - added left limit +- getParetoLimit.r - added left limit +- Added Method II +- Renaming main functions +- Revised and extended plotting capabilities +- Major overhaul of the help files +- Fixed a bug in the exponential fit +- Changed to Makkonen's equation for plot positions + + diff --git a/pkg/R/.R b/pkg/R/.R new file mode 100644 index 0000000..7454357 --- /dev/null +++ b/pkg/R/.R @@ -0,0 +1,6 @@ + + +source('plotpositions.R') + + + diff --git a/pkg/R/.plotpositions.R.swp b/pkg/R/.plotpositions.R.swp new file mode 100644 index 0000000000000000000000000000000000000000..65de6d5fc0d416d536b84ccc6034e46142074708 GIT binary patch literal 12288 zcmeI2O>f*p7{@0dE~Vl14iDSIdd0?@B?nMxrADnl9EjS87YS0WX6@PCN$jzi8E3bO zR+Tt__y9ebYYBi(%ukCqx=6Qb4jHOLxy8Y36 z@6(&{4nui?v3JK0Zhy1E*e9NlTl`y07Xg=B>m04lS!bmF%W#aw+WIS{V1OkCa6R7NL>#a?;^Tv4Fb-L1fjb47~ z!$Tl>=)<<=xb;V zN$4*0HuNHN8G0JpfEe@;{{9X9)%yMzvJWl?0)apv5C{YUfj}S-2>cHO){KbC@>6-& z-S{V8LD#k@zR9yJ>g`X?9Z2mBSLi)(-BFA!G@pw&FH#Y$25wj{EvjiIdJN5L5}6Tn z;_gwju$5MkpRcu0mTpiqzPdLUMSHK0eZ8DfBvYZROn4ThRhi+&3N!3;BTauW@D`;T zS?E+~OwC|_&sAhX&F!M8>4v(doZDm(b3H#}(hqE%LBNxlRMNU&oJACAVpZir%LH{p zh8hH2%9$!`#Ll5{Q_L!rxP!aVYS_(vJ&F3c;HrPd|0{iB&<(NTd6@}{V;lzdw>Ss< zuM@y^zp~KQ52-Pd>qVyrh3PNlId2G3|lnOlNAfo29D3)D+LUObehPW0mo{E)7DKbL1AzWr=5ZCe5 z^Q@?0NXIz$Tt;RlND3|IQo)$!>d4Js8IgJ_O;E#{Ey9usLTpiX_I%Vyk(ZT4*sfjh zWO0TLS1DF|nehbeOKBH=Vz&k;n%)DW8Lu)s@RNRkEcsk|jNY2hR$0gNv1jH|e=sew)ZEK)L6Xc`)t4(rl*1TFDPFF5|^15Bsyl%QJIB8xa Z!+I-T@T%!H<+%+zV4cD9`xEaF_76R6;}QS> literal 0 HcmV?d00001 diff --git a/pkg/R/extremevalues.R b/pkg/R/extremevalues.R new file mode 100644 index 0000000..f76c79d --- /dev/null +++ b/pkg/R/extremevalues.R @@ -0,0 +1,6 @@ +#' A package for univariate outlier detection +#' +#' @name extremevalues +#' @docType package +#' @useDynLib extremevalues +{} diff --git a/pkg/R/plotpositions.R b/pkg/R/plotpositions.R new file mode 100644 index 0000000..2ed2d06 --- /dev/null +++ b/pkg/R/plotpositions.R @@ -0,0 +1,44 @@ + +all_finite <- function(x){ + stopifnot(is.numeric(x)) + storage.mode(x) <- "double" + .Call("all_finite_double",x) +} + +#' Compute QQ-plotpositions +#' +#' @section Details: +#' The QQ-plot indices are computed as as follows. For each \eqn{x_i} the rank \eqn{j_i} is determined. +#' The plot index for \eqn{x_i} is then given by \eqn{i/(N+1)}. When \eqn{\boldsymbol{x}} has duplicate +#' entries, plot indices for the duplicates are computed for each duplicate and replaced with the mean (by default). +#' Passing \code{duplicates='asis'}, the original rank is used. +#' +#' +#' @param x numeric vector. An error is thrown when \code{x} contains nonnumerical or nonfinite values. +#' @param duplicates A character constant determining how duplicate entries are indexed (see details). +#' @return plot positions \eqn{0< p < 1} for the values in \code{x}. +#' @export +#' @example ../examples/plotpositions.R +#' +plotpositions <- function(x,duplicates=c('mean','asis')){ + stopifnot( + is.numeric(x), + all_finite(x) + ) + duplicates <- match.arg(duplicates) + N <- length(x) + i <- order(x) + if (identical(duplicates,'asis')){ + pp <- (1:N)/(N+1) + return(pp[i]) + } else { + storage.mode(x) <- "double" + pp <- .Call("R_plotpositions",x[i]) + } + pp[i] +} + + + + + diff --git a/pkg/inst/testPlotpositions.R b/pkg/inst/testPlotpositions.R new file mode 100644 index 0000000..bdc6d6f --- /dev/null +++ b/pkg/inst/testPlotpositions.R @@ -0,0 +1,22 @@ + +library(testthat) + +context('QQ-plot positions') +test_that('plot postion results', { + expect_equal( plotpositions(1), 0.5 ) + expect_equal( plotpositions(c(1,1), c(0.5,0.5))) + expect_equal( + round(plotpositions(c(1,2)),8), + round(c(1/3,2/3),8) + ) + expect_equal( + round(plotpositions(1,1,duplicates='asis'),8), + round(c(1/3,2/3),8) + ) +}) + +test_that('plot position errors',{ + expect_error( plotposition(NA) ) + expect_error( plotposition(NaN) ) +}) + diff --git a/pkg/src/.fuse_hidden0000082800000002 b/pkg/src/.fuse_hidden0000082800000002 new file mode 100644 index 0000000000000000000000000000000000000000..26ca1c4fab9bd18c8d9d9438fcd4307a24d7bb40 GIT binary patch literal 14925 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 Lia(gLJ_GwtYM%lk literal 0 HcmV?d00001 diff --git a/pkg/src/R_all_finite.c b/pkg/src/R_all_finite.c new file mode 100644 index 0000000..d426bda --- /dev/null +++ b/pkg/src/R_all_finite.c @@ -0,0 +1,25 @@ + +#include +#include + +SEXP all_finite_double(SEXP x){ + PROTECT(x); + double *xx = REAL(x); + + SEXP y; + PROTECT(y = allocVector(LGLSXP,1)); + + int i, b = 1; + for (i=0; i +#include +#include "plotpositions.h" + +SEXP R_plotpositions(SEXP x){ + PROTECT(x); + + SEXP I; + PROTECT(I = allocVector(REALSXP, length(x))); + + plotpositions(REAL(x), length(x), REAL(I)); + + UNPROTECT(2); + + return I; +} + + + + diff --git a/pkg/src/plotpositions.c b/pkg/src/plotpositions.c new file mode 100644 index 0000000..751bb52 --- /dev/null +++ b/pkg/src/plotpositions.c @@ -0,0 +1,55 @@ + +// Sum of sequence i, i+1,...,j. +// - "double" arithmetic is used to avoid integer overflow. +double seq_sum(int i, int j){ + int k = ( (j - i) + 1 ); + int m = k / 2; + double u, di = (double) i, dj = (double) j; + if ( k % 2 == 0 ){ + u = m * (dj + di); + } else { + u = m * (dj + di ) + dj - m; + } + return u; +} + + +// QQ-plot positions, replacing double entries with the mean position. +// - Positions determined as described in Makkonen (2008). +// - It is assumed that x is sortend in ascending order! +void plotpositions(double *x, int n, double *I){ + int i = 0, j, k = 1; + double m, pp; + int N = n + 1; + while( i < n ){ + // find number (m) and index (i,i+1,...,j) of duplicates + j = i+1; + while ( x[j] == x[i] ){ + j++; + }; + m = (double) j-i; + // compute mean QQ-plot position and assign + pp = seq_sum(i+1,j)/(m*N); + for ( k = i; k < j; k++ ){ + I[k] = pp; + } + // shift index + i = j; + } + +} + +/* example: uncomment to run. +#include +void main(){ + double x[4] = {1.0,3.0,3.0,4.0}; + double I[4]; + + plotpositions(x, 4, I); + for (int i=0; i<4; i++){ + printf("%4.2f, %4.2f", x[i], I[i]); + printf("\n"); + } + +} +*/ diff --git a/pkg/src/plotpositions.h b/pkg/src/plotpositions.h new file mode 100644 index 0000000..87613e1 --- /dev/null +++ b/pkg/src/plotpositions.h @@ -0,0 +1,10 @@ + +#ifndef ev_plotpositions_h +#define ev_plotpositions_h + +void plotpositions(double *, int, double *); + +#endif + + + diff --git a/pkg/tests/testpackage.R b/pkg/tests/testpackage.R new file mode 100644 index 0000000..654c58b --- /dev/null +++ b/pkg/tests/testpackage.R @@ -0,0 +1,5 @@ + +if ( require(testthat) ) + test_package("rspa") + + diff --git a/roxygen.R b/roxygen.R new file mode 100644 index 0000000..4854ce8 --- /dev/null +++ b/roxygen.R @@ -0,0 +1,14 @@ +library(roxygen2) +options(error=traceback) +unlink( 'pkg/man', TRUE) + +setwd('pkg') +roxygenize( '.' + , roxygen.dir='.' + , copy.package=FALSE + , unlink.target=TRUE + ) + +if (length(list.files('inst/doc')) == 0){ + unlink( 'inst/doc', TRUE) +} diff --git a/test/autotest.R b/test/autotest.R new file mode 100644 index 0000000..5225ce2 --- /dev/null +++ b/test/autotest.R @@ -0,0 +1,7 @@ +library(testthat) + + + +dyn.load("../pkg/src/plotpositions.so") +auto_test("../pkg/R", "../pkg/inst/tests") +