Back to Multiple platform build/check report for BioC 3.6
[A]BCDEFGHIJKLMNOPQRSTUVWXYZ

CHECK report for aroma.light on tokay1

This page was generated on 2018-04-12 13:18:21 -0400 (Thu, 12 Apr 2018).

Package 63/1472HostnameOS / ArchINSTALLBUILDCHECKBUILD BIN
aroma.light 3.8.0
Henrik Bengtsson
Snapshot Date: 2018-04-11 16:45:18 -0400 (Wed, 11 Apr 2018)
URL: https://git.bioconductor.org/packages/aroma.light
Branch: RELEASE_3_6
Last Commit: 13ba811
Last Changed Date: 2017-10-30 12:39:17 -0400 (Mon, 30 Oct 2017)
malbec1 Linux (Ubuntu 16.04.1 LTS) / x86_64  OK  OK  OK UNNEEDED, same version exists in internal repository
tokay1 Windows Server 2012 R2 Standard / x64  OK  OK [ OK ] OK UNNEEDED, same version exists in internal repository
veracruz1 OS X 10.11.6 El Capitan / x86_64  OK  OK  OK  OK UNNEEDED, same version exists in internal repository

Summary

Package: aroma.light
Version: 3.8.0
Command: rm -rf aroma.light.buildbin-libdir aroma.light.Rcheck && mkdir aroma.light.buildbin-libdir aroma.light.Rcheck && C:\Users\biocbuild\bbs-3.6-bioc\R\bin\R.exe CMD INSTALL --build --merge-multiarch --library=aroma.light.buildbin-libdir aroma.light_3.8.0.tar.gz >aroma.light.Rcheck\00install.out 2>&1 && cp aroma.light.Rcheck\00install.out aroma.light-install.out && C:\Users\biocbuild\bbs-3.6-bioc\R\bin\R.exe CMD check --library=aroma.light.buildbin-libdir --install="check:aroma.light-install.out" --force-multiarch --no-vignettes --timings aroma.light_3.8.0.tar.gz
StartedAt: 2018-04-11 22:14:19 -0400 (Wed, 11 Apr 2018)
EndedAt: 2018-04-11 22:17:26 -0400 (Wed, 11 Apr 2018)
EllapsedTime: 186.9 seconds
RetCode: 0
Status:  OK  
CheckDir: aroma.light.Rcheck
Warnings: 0

Command output

##############################################################################
##############################################################################
###
### Running command:
###
###   rm -rf aroma.light.buildbin-libdir aroma.light.Rcheck && mkdir aroma.light.buildbin-libdir aroma.light.Rcheck && C:\Users\biocbuild\bbs-3.6-bioc\R\bin\R.exe CMD INSTALL --build --merge-multiarch --library=aroma.light.buildbin-libdir aroma.light_3.8.0.tar.gz >aroma.light.Rcheck\00install.out 2>&1 && cp aroma.light.Rcheck\00install.out aroma.light-install.out  &&  C:\Users\biocbuild\bbs-3.6-bioc\R\bin\R.exe CMD check --library=aroma.light.buildbin-libdir --install="check:aroma.light-install.out" --force-multiarch --no-vignettes --timings aroma.light_3.8.0.tar.gz
###
##############################################################################
##############################################################################


* using log directory 'C:/Users/biocbuild/bbs-3.6-bioc/meat/aroma.light.Rcheck'
* using R version 3.4.4 (2018-03-15)
* using platform: x86_64-w64-mingw32 (64-bit)
* using session charset: ISO8859-1
* using option '--no-vignettes'
* checking for file 'aroma.light/DESCRIPTION' ... OK
* this is package 'aroma.light' version '3.8.0'
* package encoding: latin1
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for hidden files and directories ... NOTE
Found the following hidden files and directories:
  inst/rsp/.rspPlugins
These were most likely included in error. See section 'Package
structure' in the 'Writing R Extensions' manual.
* checking for portable file names ... OK
* checking whether package 'aroma.light' can be installed ... OK
* checking installed package size ... OK
* checking package directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking for left-over files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
* checking R files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* loading checks for arch 'i386'
** checking whether the package can be loaded ... OK
** checking whether the package can be loaded with stated dependencies ... OK
** checking whether the package can be unloaded cleanly ... OK
** checking whether the namespace can be loaded with stated dependencies ... OK
** checking whether the namespace can be unloaded cleanly ... OK
* loading checks for arch 'x64'
** checking whether the package can be loaded ... OK
** checking whether the package can be loaded with stated dependencies ... OK
** checking whether the package can be unloaded cleanly ... OK
** checking whether the namespace can be loaded with stated dependencies ... OK
** checking whether the namespace can be unloaded cleanly ... OK
* checking dependencies in R code ... OK
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
* checking R code for possible problems ... OK
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd cross-references ... OK
* checking for missing documentation entries ... OK
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
* checking Rd contents ... OK
* checking for unstated dependencies in examples ... OK
* checking examples ...
** running examples for arch 'i386' ... OK
Examples with CPU or elapsed time > 5s
                  user system elapsed
normalizeCurveFit 7.22   0.03    7.25
normalizeAffine   7.12   0.02    7.14
** running examples for arch 'x64' ... OK
Examples with CPU or elapsed time > 5s
                  user system elapsed
normalizeAffine   7.44   0.02    7.45
normalizeCurveFit 7.31   0.03    7.34
* checking for unstated dependencies in 'tests' ... OK
* checking tests ...
** running tests for arch 'i386' ...
  Running 'backtransformAffine.matrix.R'
  Running 'backtransformPrincipalCurve.matrix.R'
  Running 'callNaiveGenotypes.R'
  Running 'distanceBetweenLines.R'
  Running 'findPeaksAndValleys.R'
  Running 'fitPrincipalCurve.matrix.R'
  Running 'fitXYCurve.matrix.R'
  Running 'iwpca.matrix.R'
  Running 'likelihood.smooth.spline.R'
  Running 'medianPolish.matrix.R'
  Running 'normalizeAffine.matrix.R'
  Running 'normalizeAverage.list.R'
  Running 'normalizeAverage.matrix.R'
  Running 'normalizeCurveFit.matrix.R'
  Running 'normalizeDifferencesToAverage.R'
  Running 'normalizeFragmentLength-ex1.R'
  Running 'normalizeFragmentLength-ex2.R'
  Running 'normalizeQuantileRank.list.R'
  Running 'normalizeQuantileRank.matrix.R'
  Running 'normalizeQuantileSpline.matrix.R'
  Running 'normalizeTumorBoost,flavors.R'
  Running 'normalizeTumorBoost.R'
  Running 'robustSmoothSpline.R'
  Running 'rowAverages.matrix.R'
  Running 'sampleCorrelations.matrix.R'
  Running 'sampleTuples.R'
  Running 'wpca.matrix.R'
  Running 'wpca2.matrix.R'
 OK
** running tests for arch 'x64' ...
  Running 'backtransformAffine.matrix.R'
  Running 'backtransformPrincipalCurve.matrix.R'
  Running 'callNaiveGenotypes.R'
  Running 'distanceBetweenLines.R'
  Running 'findPeaksAndValleys.R'
  Running 'fitPrincipalCurve.matrix.R'
  Running 'fitXYCurve.matrix.R'
  Running 'iwpca.matrix.R'
  Running 'likelihood.smooth.spline.R'
  Running 'medianPolish.matrix.R'
  Running 'normalizeAffine.matrix.R'
  Running 'normalizeAverage.list.R'
  Running 'normalizeAverage.matrix.R'
  Running 'normalizeCurveFit.matrix.R'
  Running 'normalizeDifferencesToAverage.R'
  Running 'normalizeFragmentLength-ex1.R'
  Running 'normalizeFragmentLength-ex2.R'
  Running 'normalizeQuantileRank.list.R'
  Running 'normalizeQuantileRank.matrix.R'
  Running 'normalizeQuantileSpline.matrix.R'
  Running 'normalizeTumorBoost,flavors.R'
  Running 'normalizeTumorBoost.R'
  Running 'robustSmoothSpline.R'
  Running 'rowAverages.matrix.R'
  Running 'sampleCorrelations.matrix.R'
  Running 'sampleTuples.R'
  Running 'wpca.matrix.R'
  Running 'wpca2.matrix.R'
 OK
* checking PDF version of manual ... OK
* DONE

Status: 1 NOTE
See
  'C:/Users/biocbuild/bbs-3.6-bioc/meat/aroma.light.Rcheck/00check.log'
for details.



Installation output

aroma.light.Rcheck/00install.out


install for i386

* installing *source* package 'aroma.light' ...
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
  converting help for package 'aroma.light'
    finding HTML links ... done
    1._Calibration_and_Normalization        html  
    Non-documented_objects                  html  
    aroma.light-package                     html  
    averageQuantile                         html  
    backtransformAffine                     html  
    backtransformPrincipalCurve             html  
    calibrateMultiscan                      html  
    callNaiveGenotypes                      html  
    distanceBetweenLines                    html  
    findPeaksAndValleys                     html  
    fitIWPCA                                html  
    fitNaiveGenotypes                       html  
    fitPrincipalCurve                       html  
    fitXYCurve                              html  
    iwpca                                   html  
    likelihood.smooth.spline                html  
    medianPolish                            html  
    normalizeAffine                         html  
    normalizeAverage                        html  
    normalizeCurveFit                       html  
    normalizeDifferencesToAverage           html  
    normalizeFragmentLength                 html  
    normalizeQuantileRank                   html  
    normalizeQuantileRank.matrix            html  
    normalizeQuantileSpline                 html  
    normalizeTumorBoost                     html  
    pairedAlleleSpecificCopyNumbers         html  
    plotDensity                             html  
    plotMvsA                                html  
    plotMvsAPairs                           html  
    plotMvsMPairs                           html  
    plotXYCurve                             html  
    print.SmoothSplineLikelihood            html  
    robustSmoothSpline                      html  
    sampleCorrelations                      html  
    sampleTuples                            html  
    wpca                                    html  
** building package indices
** testing if installed package can be loaded
In R CMD INSTALL

install for x64

* installing *source* package 'aroma.light' ...
** testing if installed package can be loaded
* MD5 sums
packaged installation of 'aroma.light' as aroma.light_3.8.0.zip
* DONE (aroma.light)
In R CMD INSTALL
In R CMD INSTALL

Tests output

aroma.light.Rcheck/tests_i386/backtransformAffine.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> X <- matrix(1:8, nrow=4, ncol=2)
> X[2,2] <- NA_integer_
> 
> print(X)
     [,1] [,2]
[1,]    1    5
[2,]    2   NA
[3,]    3    7
[4,]    4    8
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=c(1,5)))
     [,1] [,2]
[1,]    0    0
[2,]    1   NA
[3,]    2    2
[4,]    3    3
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, b=c(1,1/2)))
     [,1] [,2]
[1,]    1   10
[2,]    2   NA
[3,]    3   14
[4,]    4   16
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:4,ncol=1)))
     [,1] [,2]
[1,]    0    4
[2,]    0   NA
[3,]    0    4
[4,]    0    4
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:3,ncol=1)))
     [,1] [,2]
[1,]    0    4
[2,]    0   NA
[3,]    0    4
[4,]    3    7
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:2,ncol=1), b=c(1,2)))
     [,1] [,2]
[1,]    0    2
[2,]    0   NA
[3,]    2    3
[4,]    2    3
> 
> # Returns a 4x1 matrix
> print(backtransformAffine(X, b=c(1,1/2), project=TRUE))
     [,1]
[1,]  2.8
[2,]  1.6
[3,]  5.2
[4,]  6.4
> 
> # If the columns of X are identical, and a identity
> # backtransformation is applied and projected, the
> # same matrix is returned.
> X <- matrix(1:4, nrow=4, ncol=3)
> Y <- backtransformAffine(X, b=c(1,1,1), project=TRUE)
> print(X)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
> print(Y)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
> stopifnot(sum(X[,1]-Y) <= .Machine$double.eps)
> 
> 
> # If the columns of X are identical, and a identity
> # backtransformation is applied and projected, the
> # same matrix is returned.
> X <- matrix(1:4, nrow=4, ncol=3)
> X[,2] <- X[,2]*2; X[,3] <- X[,3]*3
> print(X)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    4    6
[3,]    3    6    9
[4,]    4    8   12
> Y <- backtransformAffine(X, b=c(1,2,3))
> print(Y)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
> Y <- backtransformAffine(X, b=c(1,2,3), project=TRUE)
> print(Y)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
> stopifnot(sum(X[,1]-Y) <= .Machine$double.eps)
> 
> proc.time()
   user  system elapsed 
   0.42    0.06    0.46 

aroma.light.Rcheck/tests_x64/backtransformAffine.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> X <- matrix(1:8, nrow=4, ncol=2)
> X[2,2] <- NA_integer_
> 
> print(X)
     [,1] [,2]
[1,]    1    5
[2,]    2   NA
[3,]    3    7
[4,]    4    8
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=c(1,5)))
     [,1] [,2]
[1,]    0    0
[2,]    1   NA
[3,]    2    2
[4,]    3    3
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, b=c(1,1/2)))
     [,1] [,2]
[1,]    1   10
[2,]    2   NA
[3,]    3   14
[4,]    4   16
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:4,ncol=1)))
     [,1] [,2]
[1,]    0    4
[2,]    0   NA
[3,]    0    4
[4,]    0    4
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:3,ncol=1)))
     [,1] [,2]
[1,]    0    4
[2,]    0   NA
[3,]    0    4
[4,]    3    7
> 
> # Returns a 4x2 matrix
> print(backtransformAffine(X, a=matrix(1:2,ncol=1), b=c(1,2)))
     [,1] [,2]
[1,]    0    2
[2,]    0   NA
[3,]    2    3
[4,]    2    3
> 
> # Returns a 4x1 matrix
> print(backtransformAffine(X, b=c(1,1/2), project=TRUE))
     [,1]
[1,]  2.8
[2,]  1.6
[3,]  5.2
[4,]  6.4
> 
> # If the columns of X are identical, and a identity
> # backtransformation is applied and projected, the
> # same matrix is returned.
> X <- matrix(1:4, nrow=4, ncol=3)
> Y <- backtransformAffine(X, b=c(1,1,1), project=TRUE)
> print(X)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
> print(Y)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
> stopifnot(sum(X[,1]-Y) <= .Machine$double.eps)
> 
> 
> # If the columns of X are identical, and a identity
> # backtransformation is applied and projected, the
> # same matrix is returned.
> X <- matrix(1:4, nrow=4, ncol=3)
> X[,2] <- X[,2]*2; X[,3] <- X[,3]*3
> print(X)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    4    6
[3,]    3    6    9
[4,]    4    8   12
> Y <- backtransformAffine(X, b=c(1,2,3))
> print(Y)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
> Y <- backtransformAffine(X, b=c(1,2,3), project=TRUE)
> print(Y)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
> stopifnot(sum(X[,1]-Y) <= .Machine$double.eps)
> 
> proc.time()
   user  system elapsed 
   0.57    0.01    0.59 

aroma.light.Rcheck/tests_i386/backtransformPrincipalCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Consider the case where K=4 measurements have been done
> # for the same underlying signals 'x'.  The different measurements
> # have different systematic variation
> #
> #   y_k = f(x_k) + eps_k; k = 1,...,K.
> #
> # In this example, we assume non-linear measurement functions
> #
> #   f(x) = a + b*x + x^c + eps(b*x)
> #
> # where 'a' is an offset, 'b' a scale factor, and 'c' an exponential.
> # We also assume heteroscedastic zero-mean noise with standard
> # deviation proportional to the rescaled underlying signal 'x'.
> #
> # Furthermore, we assume that measurements k=2 and k=3 undergo the
> # same transformation, which may illustrate that the come from
> # the same batch. However, when *fitting* the model below we
> # will assume they are independent.
> 
> # Transforms
> a <- c(2, 15, 15,   3)
> b <- c(2,  3,  3,   4)
> c <- c(1,  2,  2, 1/2)
> K <- length(a)
> 
> # The true signal
> N <- 1000
> x <- rexp(N)
> 
> # The noise
> bX <- outer(b,x)
> E <- apply(bX, MARGIN=2, FUN=function(x) rnorm(K, mean=0, sd=0.1*x))
> 
> # The transformed signals with noise
> Xc <- t(sapply(c, FUN=function(c) x^c))
> Y <- a + bX + Xc + E
> Y <- t(Y)
> 
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Fit principal curve
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Fit principal curve through Y = (y_1, y_2, ..., y_K)
> fit <- fitPrincipalCurve(Y)
> 
> # Flip direction of 'lambda'?
> rho <- cor(fit$lambda, Y[,1], use="complete.obs")
> flip <- (rho < 0)
> if (flip) {
+   fit$lambda <- max(fit$lambda, na.rm=TRUE)-fit$lambda
+ }
> 
> L <- ncol(fit$s)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Backtransform data according to model fit
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Backtransform toward the principal curve (the "common scale")
> YN1 <- backtransformPrincipalCurve(Y, fit=fit)
> stopifnot(ncol(YN1) == K)
> 
> 
> # Backtransform toward the first dimension
> YN2 <- backtransformPrincipalCurve(Y, fit=fit, targetDimension=1)
> stopifnot(ncol(YN2) == K)
> 
> 
> # Backtransform toward the last (fitted) dimension
> YN3 <- backtransformPrincipalCurve(Y, fit=fit, targetDimension=L)
> stopifnot(ncol(YN3) == K)
> 
> 
> # Backtransform toward the third dimension (dimension by dimension)
> # Note, this assumes that K == L.
> YN4 <- Y
> for (cc in 1:L) {
+   YN4[,cc] <- backtransformPrincipalCurve(Y, fit=fit,
+                                   targetDimension=1, dimensions=cc)
+ }
> stopifnot(identical(YN4, YN2))
> 
> 
> # Backtransform a subset toward the first dimension
> # Note, this assumes that K == L.
> YN5 <- backtransformPrincipalCurve(Y, fit=fit,
+                                targetDimension=1, dimensions=2:3)
> stopifnot(identical(YN5, YN2[,2:3]))
> stopifnot(ncol(YN5) == 2)
> 
> 
> # Extract signals from measurement #2 and backtransform according
> # its model fit.  Signals are standardized to target dimension 1.
> y6 <- Y[,2,drop=FALSE]
> yN6 <- backtransformPrincipalCurve(y6, fit=fit, dimensions=2,
+                                                targetDimension=1)
> stopifnot(identical(yN6, YN2[,2,drop=FALSE]))
> stopifnot(ncol(yN6) == 1)
> 
> 
> # Extract signals from measurement #2 and backtransform according
> # the the model fit of measurement #3 (because we believe these
> # two have undergone very similar transformations.
> # Signals are standardized to target dimension 1.
> y7 <- Y[,2,drop=FALSE]
> yN7 <- backtransformPrincipalCurve(y7, fit=fit, dimensions=3,
+                                                targetDimension=1)
> stopifnot(ncol(yN7) == 1)
> 
> rho <- cor(yN7, yN6)
> print(rho)
          [,1]
[1,] 0.9999932
> stopifnot(rho > 0.999)
> 
> proc.time()
   user  system elapsed 
   1.42    0.01    1.42 

aroma.light.Rcheck/tests_x64/backtransformPrincipalCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Consider the case where K=4 measurements have been done
> # for the same underlying signals 'x'.  The different measurements
> # have different systematic variation
> #
> #   y_k = f(x_k) + eps_k; k = 1,...,K.
> #
> # In this example, we assume non-linear measurement functions
> #
> #   f(x) = a + b*x + x^c + eps(b*x)
> #
> # where 'a' is an offset, 'b' a scale factor, and 'c' an exponential.
> # We also assume heteroscedastic zero-mean noise with standard
> # deviation proportional to the rescaled underlying signal 'x'.
> #
> # Furthermore, we assume that measurements k=2 and k=3 undergo the
> # same transformation, which may illustrate that the come from
> # the same batch. However, when *fitting* the model below we
> # will assume they are independent.
> 
> # Transforms
> a <- c(2, 15, 15,   3)
> b <- c(2,  3,  3,   4)
> c <- c(1,  2,  2, 1/2)
> K <- length(a)
> 
> # The true signal
> N <- 1000
> x <- rexp(N)
> 
> # The noise
> bX <- outer(b,x)
> E <- apply(bX, MARGIN=2, FUN=function(x) rnorm(K, mean=0, sd=0.1*x))
> 
> # The transformed signals with noise
> Xc <- t(sapply(c, FUN=function(c) x^c))
> Y <- a + bX + Xc + E
> Y <- t(Y)
> 
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Fit principal curve
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Fit principal curve through Y = (y_1, y_2, ..., y_K)
> fit <- fitPrincipalCurve(Y)
> 
> # Flip direction of 'lambda'?
> rho <- cor(fit$lambda, Y[,1], use="complete.obs")
> flip <- (rho < 0)
> if (flip) {
+   fit$lambda <- max(fit$lambda, na.rm=TRUE)-fit$lambda
+ }
> 
> L <- ncol(fit$s)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Backtransform data according to model fit
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Backtransform toward the principal curve (the "common scale")
> YN1 <- backtransformPrincipalCurve(Y, fit=fit)
> stopifnot(ncol(YN1) == K)
> 
> 
> # Backtransform toward the first dimension
> YN2 <- backtransformPrincipalCurve(Y, fit=fit, targetDimension=1)
> stopifnot(ncol(YN2) == K)
> 
> 
> # Backtransform toward the last (fitted) dimension
> YN3 <- backtransformPrincipalCurve(Y, fit=fit, targetDimension=L)
> stopifnot(ncol(YN3) == K)
> 
> 
> # Backtransform toward the third dimension (dimension by dimension)
> # Note, this assumes that K == L.
> YN4 <- Y
> for (cc in 1:L) {
+   YN4[,cc] <- backtransformPrincipalCurve(Y, fit=fit,
+                                   targetDimension=1, dimensions=cc)
+ }
> stopifnot(identical(YN4, YN2))
> 
> 
> # Backtransform a subset toward the first dimension
> # Note, this assumes that K == L.
> YN5 <- backtransformPrincipalCurve(Y, fit=fit,
+                                targetDimension=1, dimensions=2:3)
> stopifnot(identical(YN5, YN2[,2:3]))
> stopifnot(ncol(YN5) == 2)
> 
> 
> # Extract signals from measurement #2 and backtransform according
> # its model fit.  Signals are standardized to target dimension 1.
> y6 <- Y[,2,drop=FALSE]
> yN6 <- backtransformPrincipalCurve(y6, fit=fit, dimensions=2,
+                                                targetDimension=1)
> stopifnot(identical(yN6, YN2[,2,drop=FALSE]))
> stopifnot(ncol(yN6) == 1)
> 
> 
> # Extract signals from measurement #2 and backtransform according
> # the the model fit of measurement #3 (because we believe these
> # two have undergone very similar transformations.
> # Signals are standardized to target dimension 1.
> y7 <- Y[,2,drop=FALSE]
> yN7 <- backtransformPrincipalCurve(y7, fit=fit, dimensions=3,
+                                                targetDimension=1)
> stopifnot(ncol(yN7) == 1)
> 
> rho <- cor(yN7, yN6)
> print(rho)
          [,1]
[1,] 0.9999744
> stopifnot(rho > 0.999)
> 
> proc.time()
   user  system elapsed 
   0.87    0.07    0.95 

aroma.light.Rcheck/tests_i386/callNaiveGenotypes.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> layout(matrix(1:3, ncol=1))
> par(mar=c(2,4,4,1)+0.1)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A bimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAA <- rnorm(n=10000, mean=0, sd=0.1)
> xBB <- rnorm(n=10000, mean=1, sd=0.1)
> x <- c(xAA,xBB)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x     density
1   peak -0.002188928 1.676298158
2 valley  0.509786264 0.000800196
3   peak  0.996162696 1.688621023
> calls <- callNaiveGenotypes(x, cn=rep(1,length(x)), verbose=-20)
Calling genotypes from allele B fractions (BAFs)...
 Fitting naive genotype model...
  Fitting naive genotype model from normal allele B fractions (BAFs)...
   Flavor: density
   Censoring BAFs...
    Before:
          Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
    -0.3713364  0.0000859  0.4550761  0.4992924  0.9999029  1.4293070 
    [1] 20000
    After:
         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
         -Inf 0.0000859 0.4550761           0.9999029       Inf 
    [1] 16880
   Censoring BAFs...done
   Copy number level #1 (C=1) of 1...
    Identified extreme points in density of BAF:
        type          x     density
    1   peak 0.01483987 1.624452260
    2 valley 0.49830882 0.004569431
    3   peak 0.98177776 1.642757807
    Local minimas ("valleys") in BAF:
        type         x     density
    2 valley 0.4983088 0.004569431
   Copy number level #1 (C=1) of 1...done
  Fitting naive genotype model from normal allele B fractions (BAFs)...done
  [[1]]
  [[1]]$flavor
  [1] "density"
  
  [[1]]$cn
  [1] 1
  
  [[1]]$nbrOfGenotypeGroups
  [1] 2
  
  [[1]]$tau
  [1] 0.4983088
  
  [[1]]$n
  [1] 16880
  
  [[1]]$fit
      type          x     density
  1   peak 0.01483987 1.624452260
  2 valley 0.49830882 0.004569431
  3   peak 0.98177776 1.642757807
  
  [[1]]$fitValleys
      type         x     density
  2 valley 0.4983088 0.004569431
  
  
  attr(,"class")
  [1] "NaiveGenotypeModelFit" "list"                 
 Fitting naive genotype model...done
 Copy number level #1 (C=1) of 1...
  Model fit:
  $flavor
  [1] "density"
  
  $cn
  [1] 1
  
  $nbrOfGenotypeGroups
  [1] 2
  
  $tau
  [1] 0.4983088
  
  $n
  [1] 16880
  
  $fit
      type          x     density
  1   peak 0.01483987 1.624452260
  2 valley 0.49830882 0.004569431
  3   peak 0.98177776 1.642757807
  
  $fitValleys
      type         x     density
  2 valley 0.4983088 0.004569431
  
  Genotype threshholds [1]: 0.498308815016393
  TCN=1 => BAF in {0,1}.
  Call regions: A = (-Inf,0.498], B = (0.498,+Inf)
 Copy number level #1 (C=1) of 1...done
Calling genotypes from allele B fractions (BAFs)...done
> xc <- split(x, calls)
> print(table(calls))
calls
    0     1 
10000 10000 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA,BB)")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with missing values
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAB <- rnorm(n=10000, mean=1/2, sd=0.1)
> x <- c(xAA,xAB,xBB)
> x[sample(length(x), size=0.05*length(x))] <- NA_real_
> x[sample(length(x), size=0.01*length(x))] <- -Inf
> x[sample(length(x), size=0.01*length(x))] <- +Inf
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x   density
1   peak -0.001438101 1.1630165
2 valley  0.248413864 0.1884735
3   peak  0.494169896 1.1638674
4 valley  0.744021861 0.1898981
5   peak  0.997969760 1.1778230
> calls <- callNaiveGenotypes(x)
> xc <- split(x, calls)
> print(table(calls))
calls
   0  0.5    1 
9597 9340 9596 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA,AB,BB)")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with clear separation
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAA <- rnorm(n=10000, mean=0, sd=0.02)
> xAB <- rnorm(n=10000, mean=1/2, sd=0.02)
> xBB <- rnorm(n=10000, mean=1, sd=0.02)
> x <- c(xAA,xAB,xBB)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x      density
1   peak -0.002238128 2.607035e+00
2 valley  0.246840117 3.498432e-05
3   peak  0.495918361 2.610500e+00
4 valley  0.747827041 2.985999e-05
5   peak  0.996905286 2.605269e+00
> calls <- callNaiveGenotypes(x)
> xc <- split(x, calls)
> print(table(calls))
calls
    0   0.5     1 
10000 10000 10000 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA',AB',BB')")
> abline(v=fit$x)
> 
> proc.time()
   user  system elapsed 
   1.31    0.01    1.31 

aroma.light.Rcheck/tests_x64/callNaiveGenotypes.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> layout(matrix(1:3, ncol=1))
> par(mar=c(2,4,4,1)+0.1)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A bimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAA <- rnorm(n=10000, mean=0, sd=0.1)
> xBB <- rnorm(n=10000, mean=1, sd=0.1)
> x <- c(xAA,xBB)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x      density
1   peak -0.005282709 1.6906722789
2 valley  0.496936509 0.0003843036
3   peak  0.994788603 1.7009769144
> calls <- callNaiveGenotypes(x, cn=rep(1,length(x)), verbose=-20)
Calling genotypes from allele B fractions (BAFs)...
 Fitting naive genotype model...
  Fitting naive genotype model from normal allele B fractions (BAFs)...
   Flavor: density
   Censoring BAFs...
    Before:
          Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
    -0.3393948 -0.0009121  0.5026117  0.4996330  1.0001427  1.5123198 
    [1] 20000
    After:
          Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
          -Inf -0.0009121  0.5026117             1.0001427        Inf 
    [1] 16835
   Censoring BAFs...done
   Copy number level #1 (C=1) of 1...
    Identified extreme points in density of BAF:
        type          x     density
    1   peak 0.01459639 1.637099279
    2 valley 0.49827969 0.004068534
    3   peak 0.98196299 1.647951923
    Local minimas ("valleys") in BAF:
        type         x     density
    2 valley 0.4982797 0.004068534
   Copy number level #1 (C=1) of 1...done
  Fitting naive genotype model from normal allele B fractions (BAFs)...done
  [[1]]
  [[1]]$flavor
  [1] "density"
  
  [[1]]$cn
  [1] 1
  
  [[1]]$nbrOfGenotypeGroups
  [1] 2
  
  [[1]]$tau
  [1] 0.4982797
  
  [[1]]$n
  [1] 16835
  
  [[1]]$fit
      type          x     density
  1   peak 0.01459639 1.637099279
  2 valley 0.49827969 0.004068534
  3   peak 0.98196299 1.647951923
  
  [[1]]$fitValleys
      type         x     density
  2 valley 0.4982797 0.004068534
  
  
  attr(,"class")
  [1] "NaiveGenotypeModelFit" "list"                 
 Fitting naive genotype model...done
 Copy number level #1 (C=1) of 1...
  Model fit:
  $flavor
  [1] "density"
  
  $cn
  [1] 1
  
  $nbrOfGenotypeGroups
  [1] 2
  
  $tau
  [1] 0.4982797
  
  $n
  [1] 16835
  
  $fit
      type          x     density
  1   peak 0.01459639 1.637099279
  2 valley 0.49827969 0.004068534
  3   peak 0.98196299 1.647951923
  
  $fitValleys
      type         x     density
  2 valley 0.4982797 0.004068534
  
  Genotype threshholds [1]: 0.498279691476766
  TCN=1 => BAF in {0,1}.
  Call regions: A = (-Inf,0.498], B = (0.498,+Inf)
 Copy number level #1 (C=1) of 1...done
Calling genotypes from allele B fractions (BAFs)...done
> xc <- split(x, calls)
> print(table(calls))
calls
    0     1 
10000 10000 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA,BB)")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with missing values
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAB <- rnorm(n=10000, mean=1/2, sd=0.1)
> x <- c(xAA,xAB,xBB)
> x[sample(length(x), size=0.05*length(x))] <- NA_real_
> x[sample(length(x), size=0.01*length(x))] <- -Inf
> x[sample(length(x), size=0.01*length(x))] <- +Inf
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x      density
1   peak -0.003194278 1.1738384447
2 valley  0.244419618 0.1902396318
3   peak  0.496230360 1.1768106003
4 valley  0.748041103 0.1873532613
5   peak  0.995654999 1.1809315818
6 valley  1.453111181 0.0002164676
7   peak  1.507670175 0.0002866653
> calls <- callNaiveGenotypes(x)
> xc <- split(x, calls)
> print(table(calls))
calls
   0  0.5    1 
9589 9339 9600 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA,AB,BB)")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with clear separation
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> xAA <- rnorm(n=10000, mean=0, sd=0.02)
> xAB <- rnorm(n=10000, mean=1/2, sd=0.02)
> xBB <- rnorm(n=10000, mean=1, sd=0.02)
> x <- c(xAA,xAB,xBB)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type            x      density
1   peak -0.002135931 2.602844e+00
2 valley  0.246639696 3.334657e-05
3   peak  0.498210555 2.605159e+00
4 valley  0.746986182 3.386202e-05
5   peak  0.998557041 2.603070e+00
> calls <- callNaiveGenotypes(x)
> xc <- split(x, calls)
> print(table(calls))
calls
    0   0.5     1 
10000 10000 10000 
> xx <- c(list(x),xc)
> plotDensity(xx, adjust=1.5, lwd=2, col=seq_along(xx), main="(AA',AB',BB')")
> abline(v=fit$x)
> 
> proc.time()
   user  system elapsed 
   1.54    0.06    1.59 

aroma.light.Rcheck/tests_i386/distanceBetweenLines.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ layout(matrix(1:4, nrow=2, ncol=2, byrow=TRUE))
+ 
+ ############################################################
+ # Lines in two-dimensions
+ ############################################################
+ x <- list(a=c(1,0), b=c(1,2))
+ y <- list(a=c(0,2), b=c(1,1))
+ fit <- distanceBetweenLines(ax=x$a, bx=x$b, ay=y$a, by=y$b)
+ 
+ xlim <- ylim <- c(-1,8)
+ plot(NA, xlab="", ylab="", xlim=ylim, ylim=ylim)
+ 
+ # Highlight the offset coordinates for both lines
+ points(t(x$a), pch="+", col="red")
+ text(t(x$a), label=expression(a[x]), adj=c(-1,0.5))
+ points(t(y$a), pch="+", col="blue")
+ text(t(y$a), label=expression(a[y]), adj=c(-1,0.5))
+ 
+ v <- c(-1,1)*10
+ xv <- list(x=x$a[1]+x$b[1]*v, y=x$a[2]+x$b[2]*v)
+ yv <- list(x=y$a[1]+y$b[1]*v, y=y$a[2]+y$b[2]*v)
+ 
+ lines(xv, col="red")
+ lines(yv, col="blue")
+ 
+ points(t(fit$xs), cex=2.0, col="red")
+ text(t(fit$xs), label=expression(x(s)), adj=c(+2,0.5))
+ points(t(fit$yt), cex=1.5, col="blue")
+ text(t(fit$yt), label=expression(y(t)), adj=c(-1,0.5))
+ print(fit)
+ 
+ 
+ ############################################################
+ # Lines in three-dimensions
+ ############################################################
+ x <- list(a=c(0,0,0), b=c(1,1,1))  # The 'diagonal'
+ y <- list(a=c(2,1,2), b=c(2,1,3))  # A 'fitted' line
+ fit <- distanceBetweenLines(ax=x$a, bx=x$b, ay=y$a, by=y$b)
+ 
+ xlim <- ylim <- zlim <- c(-1,3)
+ dummy <- t(c(1,1,1))*100
+ 
+ # Coordinates for the lines in 3d
+ v <- seq(-10,10, by=1)
+ xv <- list(x=x$a[1]+x$b[1]*v, y=x$a[2]+x$b[2]*v, z=x$a[3]+x$b[3]*v)
+ yv <- list(x=y$a[1]+y$b[1]*v, y=y$a[2]+y$b[2]*v, z=y$a[3]+y$b[3]*v)
+ 
+ for (theta in seq(30,140,length.out=3)) {
+   plot3d(dummy, theta=theta, phi=30, xlab="", ylab="", zlab="",
+                              xlim=ylim, ylim=ylim, zlim=zlim)
+ 
+   # Highlight the offset coordinates for both lines
+   points3d(t(x$a), pch="+", col="red")
+   text3d(t(x$a), label=expression(a[x]), adj=c(-1,0.5))
+   points3d(t(y$a), pch="+", col="blue")
+   text3d(t(y$a), label=expression(a[y]), adj=c(-1,0.5))
+ 
+   # Draw the lines
+   lines3d(xv, col="red")
+   lines3d(yv, col="blue")
+ 
+   # Draw the two points that are closest to each other
+   points3d(t(fit$xs), cex=2.0, col="red")
+   text3d(t(fit$xs), label=expression(x(s)), adj=c(+2,0.5))
+   points3d(t(fit$yt), cex=1.5, col="blue")
+   text3d(t(fit$yt), label=expression(y(t)), adj=c(-1,0.5))
+ 
+   # Draw the distance between the two points
+   lines3d(rbind(fit$xs,fit$yt), col="purple", lwd=2)
+ }
+ 
+ print(fit)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.87    0.09    0.95 

aroma.light.Rcheck/tests_x64/distanceBetweenLines.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ layout(matrix(1:4, nrow=2, ncol=2, byrow=TRUE))
+ 
+ ############################################################
+ # Lines in two-dimensions
+ ############################################################
+ x <- list(a=c(1,0), b=c(1,2))
+ y <- list(a=c(0,2), b=c(1,1))
+ fit <- distanceBetweenLines(ax=x$a, bx=x$b, ay=y$a, by=y$b)
+ 
+ xlim <- ylim <- c(-1,8)
+ plot(NA, xlab="", ylab="", xlim=ylim, ylim=ylim)
+ 
+ # Highlight the offset coordinates for both lines
+ points(t(x$a), pch="+", col="red")
+ text(t(x$a), label=expression(a[x]), adj=c(-1,0.5))
+ points(t(y$a), pch="+", col="blue")
+ text(t(y$a), label=expression(a[y]), adj=c(-1,0.5))
+ 
+ v <- c(-1,1)*10
+ xv <- list(x=x$a[1]+x$b[1]*v, y=x$a[2]+x$b[2]*v)
+ yv <- list(x=y$a[1]+y$b[1]*v, y=y$a[2]+y$b[2]*v)
+ 
+ lines(xv, col="red")
+ lines(yv, col="blue")
+ 
+ points(t(fit$xs), cex=2.0, col="red")
+ text(t(fit$xs), label=expression(x(s)), adj=c(+2,0.5))
+ points(t(fit$yt), cex=1.5, col="blue")
+ text(t(fit$yt), label=expression(y(t)), adj=c(-1,0.5))
+ print(fit)
+ 
+ 
+ ############################################################
+ # Lines in three-dimensions
+ ############################################################
+ x <- list(a=c(0,0,0), b=c(1,1,1))  # The 'diagonal'
+ y <- list(a=c(2,1,2), b=c(2,1,3))  # A 'fitted' line
+ fit <- distanceBetweenLines(ax=x$a, bx=x$b, ay=y$a, by=y$b)
+ 
+ xlim <- ylim <- zlim <- c(-1,3)
+ dummy <- t(c(1,1,1))*100
+ 
+ # Coordinates for the lines in 3d
+ v <- seq(-10,10, by=1)
+ xv <- list(x=x$a[1]+x$b[1]*v, y=x$a[2]+x$b[2]*v, z=x$a[3]+x$b[3]*v)
+ yv <- list(x=y$a[1]+y$b[1]*v, y=y$a[2]+y$b[2]*v, z=y$a[3]+y$b[3]*v)
+ 
+ for (theta in seq(30,140,length.out=3)) {
+   plot3d(dummy, theta=theta, phi=30, xlab="", ylab="", zlab="",
+                              xlim=ylim, ylim=ylim, zlim=zlim)
+ 
+   # Highlight the offset coordinates for both lines
+   points3d(t(x$a), pch="+", col="red")
+   text3d(t(x$a), label=expression(a[x]), adj=c(-1,0.5))
+   points3d(t(y$a), pch="+", col="blue")
+   text3d(t(y$a), label=expression(a[y]), adj=c(-1,0.5))
+ 
+   # Draw the lines
+   lines3d(xv, col="red")
+   lines3d(yv, col="blue")
+ 
+   # Draw the two points that are closest to each other
+   points3d(t(fit$xs), cex=2.0, col="red")
+   text3d(t(fit$xs), label=expression(x(s)), adj=c(+2,0.5))
+   points3d(t(fit$yt), cex=1.5, col="blue")
+   text3d(t(fit$yt), label=expression(y(t)), adj=c(-1,0.5))
+ 
+   # Draw the distance between the two points
+   lines3d(rbind(fit$xs,fit$yt), col="purple", lwd=2)
+ }
+ 
+ print(fit)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.59    0.03    0.61 

aroma.light.Rcheck/tests_i386/findPeaksAndValleys.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> layout(matrix(1:3, ncol=1))
> par(mar=c(2,4,4,1)+0.1)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A unimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x1 <- rnorm(n=10000, mean=0, sd=1)
> x <- x1
> fit <- findPeaksAndValleys(x)
> print(fit)
  type          x   density
1 peak 0.02732202 0.4019657
> plot(density(x), lwd=2, main="x1")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x2 <- rnorm(n=10000, mean=4, sd=1)
> x3 <- rnorm(n=10000, mean=8, sd=1)
> x <- c(x1,x2,x3)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type           x    density
1   peak -0.04852021 0.12345768
2 valley  1.96606961 0.04537246
3   peak  3.94531576 0.12301518
4 valley  5.95990558 0.04432972
5   peak  7.97449540 0.12560822
> plot(density(x), lwd=2, main="c(x1,x2,x3)")
> abline(v=fit$x)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with clear separation
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x1b <- rnorm(n=10000, mean=0, sd=0.1)
> x2b <- rnorm(n=10000, mean=4, sd=0.1)
> x3b <- rnorm(n=10000, mean=8, sd=0.1)
> x <- c(x1b,x2b,x3b)
> 
> # Illustrating explicit usage of density()
> d <- density(x)
> fit <- findPeaksAndValleys(d, tol=0)
> print(fit)
    type           x      density
1   peak -0.01519814 3.426746e-01
2 valley  1.96794674 1.281662e-06
3   peak  3.97264754 3.423194e-01
4 valley  5.97734834 1.215527e-06
5   peak  7.98204915 3.423693e-01
> plot(d, lwd=2, main="c(x1b,x2b,x3b)")
> abline(v=fit$x)
> 
> proc.time()
   user  system elapsed 
   0.48    0.07    0.54 

aroma.light.Rcheck/tests_x64/findPeaksAndValleys.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> layout(matrix(1:3, ncol=1))
> par(mar=c(2,4,4,1)+0.1)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A unimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x1 <- rnorm(n=10000, mean=0, sd=1)
> x <- x1
> fit <- findPeaksAndValleys(x)
> print(fit)
    type           x   density
1   peak -0.31425642 0.3775719
2 valley -0.21921813 0.3770382
3   peak -0.02914155 0.3793083
> plot(density(x), lwd=2, main="x1")
> abline(v=fit$x)
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x2 <- rnorm(n=10000, mean=4, sd=1)
> x3 <- rnorm(n=10000, mean=8, sd=1)
> x <- c(x1,x2,x3)
> fit <- findPeaksAndValleys(x)
> print(fit)
    type           x    density
1   peak -0.07880834 0.12180093
2 valley  1.95703908 0.04382985
3   peak  3.92268486 0.12141572
4 valley  5.99363309 0.04385566
5   peak  7.92417806 0.12417407
> plot(density(x), lwd=2, main="c(x1,x2,x3)")
> abline(v=fit$x)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # A trimodal distribution with clear separation
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> x1b <- rnorm(n=10000, mean=0, sd=0.1)
> x2b <- rnorm(n=10000, mean=4, sd=0.1)
> x3b <- rnorm(n=10000, mean=8, sd=0.1)
> x <- c(x1b,x2b,x3b)
> 
> # Illustrating explicit usage of density()
> d <- density(x)
> fit <- findPeaksAndValleys(d, tol=0)
> print(fit)
    type           x      density
1   peak -0.01400349 3.428345e-01
2 valley  1.97553367 1.227633e-06
3   peak  3.98646370 3.429289e-01
4 valley  5.97600086 1.252347e-06
5   peak  7.98693089 3.427970e-01
> plot(d, lwd=2, main="c(x1b,x2b,x3b)")
> abline(v=fit$x)
> 
> proc.time()
   user  system elapsed 
   0.68    0.04    0.73 

aroma.light.Rcheck/tests_i386/fitPrincipalCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate data from the model y <- a + bx + x^c + eps(bx)
> J <- 1000
> x <- rexp(J)
> a <- c(2,15,3)
> b <- c(2,3,4)
> c <- c(1,2,1/2)
> bx <- outer(b,x)
> xc <- t(sapply(c, FUN=function(c) x^c))
> eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(b), mean=0, sd=0.1*x))
> y <- a + bx + xc + eps
> y <- t(y)
> 
> # Fit principal curve through (y_1, y_2, y_3)
> fit <- fitPrincipalCurve(y, verbose=TRUE)
Fitting principal curve...
 Data size: 1000x3
 Identifying missing values...
 Identifying missing values...done
 Data size after removing non-finite data points: 1000x3
 Calling principal.curve()...
Starting curve---distance^2: 1597960
Iteration 1---distance^2: 407.6607
Iteration 2---distance^2: 406.8072
Iteration 3---distance^2: 406.8089
  Converged: TRUE
  Number of iterations: 3
  Processing time/iteration: 0.2s (0.1s/iteration)
 Calling principal.curve()...done
Fitting principal curve...done
> 
> # Flip direction of 'lambda'?
> rho <- cor(fit$lambda, y[,1], use="complete.obs")
> flip <- (rho < 0)
> if (flip) {
+   fit$lambda <- max(fit$lambda, na.rm=TRUE)-fit$lambda
+ }
> 
> 
> # Backtransform (y_1, y_2, y_3) to be proportional to each other
> yN <- backtransformPrincipalCurve(y, fit=fit)
> 
> # Same backtransformation dimension by dimension
> yN2 <- y
> for (cc in 1:ncol(y)) {
+   yN2[,cc] <- backtransformPrincipalCurve(y, fit=fit, dimensions=cc)
+ }
> stopifnot(identical(yN2, yN))
> 
> 
> xlim <- c(0, 1.04*max(x))
> ylim <- range(c(y,yN), na.rm=TRUE)
> 
> 
> # Pairwise signals vs x before and after transform
> layout(matrix(1:4, nrow=2, byrow=TRUE))
> par(mar=c(4,4,3,2)+0.1)
> for (cc in 1:3) {
+   ylab <- substitute(y[c], env=list(c=cc))
+   plot(NA, xlim=xlim, ylim=ylim, xlab="x", ylab=ylab)
+   abline(h=a[cc], lty=3)
+   mtext(side=4, at=a[cc], sprintf("a=%g", a[cc]),
+         cex=0.8, las=2, line=0, adj=1.1, padj=-0.2)
+   points(x, y[,cc])
+   points(x, yN[,cc], col="tomato")
+   legend("topleft", col=c("black", "tomato"), pch=19,
+                     c("orignal", "transformed"), bty="n")
+ }
> title(main="Pairwise signals vs x before and after transform", outer=TRUE, line=-2)
> 
> 
> # Pairwise signals before and after transform
> layout(matrix(1:4, nrow=2, byrow=TRUE))
> par(mar=c(4,4,3,2)+0.1)
> for (rr in 3:2) {
+   ylab <- substitute(y[c], env=list(c=rr))
+   for (cc in 1:2) {
+     if (cc == rr) {
+       plot.new()
+       next
+     }
+     xlab <- substitute(y[c], env=list(c=cc))
+     plot(NA, xlim=ylim, ylim=ylim, xlab=xlab, ylab=ylab)
+     abline(a=0, b=1, lty=2)
+     points(y[,c(cc,rr)])
+     points(yN[,c(cc,rr)], col="tomato")
+     legend("topleft", col=c("black", "tomato"), pch=19,
+                       c("orignal", "transformed"), bty="n")
+   }
+ }
> title(main="Pairwise signals before and after transform", outer=TRUE, line=-2)
> 
> proc.time()
   user  system elapsed 
   1.23    0.04    1.26 

aroma.light.Rcheck/tests_x64/fitPrincipalCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate data from the model y <- a + bx + x^c + eps(bx)
> J <- 1000
> x <- rexp(J)
> a <- c(2,15,3)
> b <- c(2,3,4)
> c <- c(1,2,1/2)
> bx <- outer(b,x)
> xc <- t(sapply(c, FUN=function(c) x^c))
> eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(b), mean=0, sd=0.1*x))
> y <- a + bx + xc + eps
> y <- t(y)
> 
> # Fit principal curve through (y_1, y_2, y_3)
> fit <- fitPrincipalCurve(y, verbose=TRUE)
Fitting principal curve...
 Data size: 1000x3
 Identifying missing values...
 Identifying missing values...done
 Data size after removing non-finite data points: 1000x3
 Calling principal.curve()...
Starting curve---distance^2: 1369727
Iteration 1---distance^2: 389.3221
Iteration 2---distance^2: 388.8174
Iteration 3---distance^2: 388.8199
  Converged: TRUE
  Number of iterations: 3
  Processing time/iteration: 0.1s (0.0s/iteration)
 Calling principal.curve()...done
Fitting principal curve...done
> 
> # Flip direction of 'lambda'?
> rho <- cor(fit$lambda, y[,1], use="complete.obs")
> flip <- (rho < 0)
> if (flip) {
+   fit$lambda <- max(fit$lambda, na.rm=TRUE)-fit$lambda
+ }
> 
> 
> # Backtransform (y_1, y_2, y_3) to be proportional to each other
> yN <- backtransformPrincipalCurve(y, fit=fit)
> 
> # Same backtransformation dimension by dimension
> yN2 <- y
> for (cc in 1:ncol(y)) {
+   yN2[,cc] <- backtransformPrincipalCurve(y, fit=fit, dimensions=cc)
+ }
> stopifnot(identical(yN2, yN))
> 
> 
> xlim <- c(0, 1.04*max(x))
> ylim <- range(c(y,yN), na.rm=TRUE)
> 
> 
> # Pairwise signals vs x before and after transform
> layout(matrix(1:4, nrow=2, byrow=TRUE))
> par(mar=c(4,4,3,2)+0.1)
> for (cc in 1:3) {
+   ylab <- substitute(y[c], env=list(c=cc))
+   plot(NA, xlim=xlim, ylim=ylim, xlab="x", ylab=ylab)
+   abline(h=a[cc], lty=3)
+   mtext(side=4, at=a[cc], sprintf("a=%g", a[cc]),
+         cex=0.8, las=2, line=0, adj=1.1, padj=-0.2)
+   points(x, y[,cc])
+   points(x, yN[,cc], col="tomato")
+   legend("topleft", col=c("black", "tomato"), pch=19,
+                     c("orignal", "transformed"), bty="n")
+ }
> title(main="Pairwise signals vs x before and after transform", outer=TRUE, line=-2)
> 
> 
> # Pairwise signals before and after transform
> layout(matrix(1:4, nrow=2, byrow=TRUE))
> par(mar=c(4,4,3,2)+0.1)
> for (rr in 3:2) {
+   ylab <- substitute(y[c], env=list(c=rr))
+   for (cc in 1:2) {
+     if (cc == rr) {
+       plot.new()
+       next
+     }
+     xlab <- substitute(y[c], env=list(c=cc))
+     plot(NA, xlim=ylim, ylim=ylim, xlab=xlab, ylab=ylab)
+     abline(a=0, b=1, lty=2)
+     points(y[,c(cc,rr)])
+     points(yN[,c(cc,rr)], col="tomato")
+     legend("topleft", col=c("black", "tomato"), pch=19,
+                       c("orignal", "transformed"), bty="n")
+   }
+ }
> title(main="Pairwise signals before and after transform", outer=TRUE, line=-2)
> 
> proc.time()
   user  system elapsed 
   1.15    0.09    1.23 

aroma.light.Rcheck/tests_i386/fitXYCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate data from the model y <- a + bx + x^c + eps(bx)
> x <- rexp(1000)
> a <- c(2,15)
> b <- c(2,1)
> c <- c(1,2)
> bx <- outer(b,x)
> xc <- t(sapply(c, FUN=function(c) x^c))
> eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
> Y <- a + bx + xc + eps
> Y <- t(Y)
> 
> lim <- c(0,70)
> plot(Y, xlim=lim, ylim=lim)
> 
> # Fit principal curve through a subset of (y_1, y_2)
> subset <- sample(nrow(Y), size=0.3*nrow(Y))
> fit <- fitXYCurve(Y[subset,], bandwidth=0.2)
> 
> lines(fit, col="red", lwd=2)
> 
> # Backtransform (y_1, y_2) keeping y_1 unchanged
> YN <- backtransformXYCurve(Y, fit=fit)
> points(YN, col="blue")
> abline(a=0, b=1, col="red", lwd=2)
> 
> proc.time()
   user  system elapsed 
   0.48    0.06    0.54 

aroma.light.Rcheck/tests_x64/fitXYCurve.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate data from the model y <- a + bx + x^c + eps(bx)
> x <- rexp(1000)
> a <- c(2,15)
> b <- c(2,1)
> c <- c(1,2)
> bx <- outer(b,x)
> xc <- t(sapply(c, FUN=function(c) x^c))
> eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
> Y <- a + bx + xc + eps
> Y <- t(Y)
> 
> lim <- c(0,70)
> plot(Y, xlim=lim, ylim=lim)
> 
> # Fit principal curve through a subset of (y_1, y_2)
> subset <- sample(nrow(Y), size=0.3*nrow(Y))
> fit <- fitXYCurve(Y[subset,], bandwidth=0.2)
> 
> lines(fit, col="red", lwd=2)
> 
> # Backtransform (y_1, y_2) keeping y_1 unchanged
> YN <- backtransformXYCurve(Y, fit=fit)
> points(YN, col="blue")
> abline(a=0, b=1, col="red", lwd=2)
> 
> proc.time()
   user  system elapsed 
   0.57    0.07    0.64 

aroma.light.Rcheck/tests_i386/iwpca.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ # Simulate data from the model y <- a + bx + eps(bx)
+ x <- rexp(1000)
+ a <- c(2,15,3)
+ b <- c(2,3,4)
+ bx <- outer(b,x)
+ eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
+ y <- a + bx + eps
+ y <- t(y)
+ 
+ # Add some outliers by permuting the dimensions for 1/10 of the observations
+ idx <- sample(1:nrow(y), size=1/10*nrow(y))
+ y[idx,] <- y[idx,c(2,3,1)]
+ 
+ # Plot the data with fitted lines at four different view points
+ opar <- par(mar=c(1,1,1,1)+0.1)
+ N <- 4
+ layout(matrix(1:N, nrow=2, byrow=TRUE))
+ theta <- seq(0,270,length.out=N)
+ phi <- rep(20, length.out=N)
+ xlim <- ylim <- zlim <- c(0,45)
+ persp <- list()
+ for (kk in seq_along(theta)) {
+   # Plot the data
+   persp[[kk]] <- plot3d(y, theta=theta[kk], phi=phi[kk], xlim=xlim, ylim=ylim, zlim=zlim)
+ }
+ 
+ # Weights on the observations
+ # Example a: Equal weights
+ w <- NULL
+ # Example b: More weight on the outliers (uncomment to test)
+ w <- rep(1, length(x)); w[idx] <- 0.8
+ 
+ # ...and show all iterations too with different colors.
+ maxIter <- c(seq(1,20,length.out=10),Inf)
+ col <- topo.colors(length(maxIter))
+ # Show the fitted value for every iteration
+ for (ii in seq_along(maxIter)) {
+   # Fit a line using IWPCA through data
+   fit <- iwpca(y, w=w, maxIter=maxIter[ii], swapDirections=TRUE)
+ 
+   ymid <- fit$xMean
+   d0 <- apply(y, MARGIN=2, FUN=min) - ymid
+   d1 <- apply(y, MARGIN=2, FUN=max) - ymid
+   b <- fit$vt[1,]
+   y0 <- -b * max(abs(d0))
+   y1 <-  b * max(abs(d1))
+   yline <- matrix(c(y0,y1), nrow=length(b), ncol=2)
+   yline <- yline + ymid
+ 
+   for (kk in seq_along(theta)) {
+     # Set pane to draw in
+     par(mfg=c((kk-1) %/% 2, (kk-1) %% 2) + 1)
+     # Set the viewpoint of the pane
+     options(persp.matrix=persp[[kk]])
+ 
+     # Get the first principal component
+     points3d(t(ymid), col=col[ii])
+     lines3d(t(yline), col=col[ii])
+ 
+     # Highlight the last one
+     if (ii == length(maxIter))
+       lines3d(t(yline), col="red", lwd=3)
+   }
+ }
+ 
+ par(opar)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.78    0.07    0.84 

aroma.light.Rcheck/tests_x64/iwpca.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ # Simulate data from the model y <- a + bx + eps(bx)
+ x <- rexp(1000)
+ a <- c(2,15,3)
+ b <- c(2,3,4)
+ bx <- outer(b,x)
+ eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
+ y <- a + bx + eps
+ y <- t(y)
+ 
+ # Add some outliers by permuting the dimensions for 1/10 of the observations
+ idx <- sample(1:nrow(y), size=1/10*nrow(y))
+ y[idx,] <- y[idx,c(2,3,1)]
+ 
+ # Plot the data with fitted lines at four different view points
+ opar <- par(mar=c(1,1,1,1)+0.1)
+ N <- 4
+ layout(matrix(1:N, nrow=2, byrow=TRUE))
+ theta <- seq(0,270,length.out=N)
+ phi <- rep(20, length.out=N)
+ xlim <- ylim <- zlim <- c(0,45)
+ persp <- list()
+ for (kk in seq_along(theta)) {
+   # Plot the data
+   persp[[kk]] <- plot3d(y, theta=theta[kk], phi=phi[kk], xlim=xlim, ylim=ylim, zlim=zlim)
+ }
+ 
+ # Weights on the observations
+ # Example a: Equal weights
+ w <- NULL
+ # Example b: More weight on the outliers (uncomment to test)
+ w <- rep(1, length(x)); w[idx] <- 0.8
+ 
+ # ...and show all iterations too with different colors.
+ maxIter <- c(seq(1,20,length.out=10),Inf)
+ col <- topo.colors(length(maxIter))
+ # Show the fitted value for every iteration
+ for (ii in seq_along(maxIter)) {
+   # Fit a line using IWPCA through data
+   fit <- iwpca(y, w=w, maxIter=maxIter[ii], swapDirections=TRUE)
+ 
+   ymid <- fit$xMean
+   d0 <- apply(y, MARGIN=2, FUN=min) - ymid
+   d1 <- apply(y, MARGIN=2, FUN=max) - ymid
+   b <- fit$vt[1,]
+   y0 <- -b * max(abs(d0))
+   y1 <-  b * max(abs(d1))
+   yline <- matrix(c(y0,y1), nrow=length(b), ncol=2)
+   yline <- yline + ymid
+ 
+   for (kk in seq_along(theta)) {
+     # Set pane to draw in
+     par(mfg=c((kk-1) %/% 2, (kk-1) %% 2) + 1)
+     # Set the viewpoint of the pane
+     options(persp.matrix=persp[[kk]])
+ 
+     # Get the first principal component
+     points3d(t(ymid), col=col[ii])
+     lines3d(t(yline), col=col[ii])
+ 
+     # Highlight the last one
+     if (ii == length(maxIter))
+       lines3d(t(yline), col="red", lwd=3)
+   }
+ }
+ 
+ par(opar)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.60    0.01    0.62 

aroma.light.Rcheck/tests_i386/likelihood.smooth.spline.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Define f(x)
> f <- expression(0.1*x^4 + 1*x^3 + 2*x^2 + x + 10*sin(2*x))
> 
> # Simulate data from this function in the range [a,b]
> a <- -2; b <- 5
> x <- seq(a, b, length.out=3000)
> y <- eval(f)
> 
> # Add some noise to the data
> y <- y + rnorm(length(y), 0, 10)
> 
> # Plot the function and its second derivative
> plot(x,y, type="l", lwd=4)
> 
> # Fit a cubic smoothing spline and plot it
> g <- smooth.spline(x,y, df=16)
> lines(g, col="yellow", lwd=2, lty=2)
> 
> # Calculating the (log) likelihood of the fitted spline
> l <- likelihood(g)
> 
> cat("Log likelihood with unique x values:\n")
Log likelihood with unique x values:
> print(l)
Likelihood of smoothing spline: -294361.4 
 Log base: 2.718282 
 Weighted residuals sum of square: 294361.5 
 Penalty: -0.1195492 
 Smoothing parameter lambda: 0.0009257147 
 Roughness score: 129.1426 
> 
> # Note that this is not the same as the log likelihood of the
> # data on the fitted spline iff the x values are non-unique
> x[1:5] <- x[1]  # Non-unique x values
> g <- smooth.spline(x,y, df=16)
> l <- likelihood(g)
> 
> cat("\nLog likelihood of the *spline* data set:\n")

Log likelihood of the *spline* data set:
> print(l)
Likelihood of smoothing spline: -292891 
 Log base: 2.718282 
 Weighted residuals sum of square: 292891.1 
 Penalty: -0.1194972 
 Smoothing parameter lambda: 0.0009261969 
 Roughness score: 129.0192 
> 
> # In cases with non unique x values one has to proceed as
> # below if one want to get the log likelihood for the original
> # data.
> l <- likelihood(g, x=x, y=y)
> cat("\nLog likelihood of the *original* data set:\n")

Log likelihood of the *original* data set:
> print(l)
Likelihood of smoothing spline: -294366.4 
 Log base: 2.718282 
 Weighted residuals sum of square: 294366.5 
 Penalty: -0.1194974 
 Smoothing parameter lambda: 0.0009261969 
 Roughness score: 129.0195 
> 
> 
> 
> 
> 
> 
> proc.time()
   user  system elapsed 
   1.01    0.04    1.04 

aroma.light.Rcheck/tests_x64/likelihood.smooth.spline.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Define f(x)
> f <- expression(0.1*x^4 + 1*x^3 + 2*x^2 + x + 10*sin(2*x))
> 
> # Simulate data from this function in the range [a,b]
> a <- -2; b <- 5
> x <- seq(a, b, length.out=3000)
> y <- eval(f)
> 
> # Add some noise to the data
> y <- y + rnorm(length(y), 0, 10)
> 
> # Plot the function and its second derivative
> plot(x,y, type="l", lwd=4)
> 
> # Fit a cubic smoothing spline and plot it
> g <- smooth.spline(x,y, df=16)
> lines(g, col="yellow", lwd=2, lty=2)
> 
> # Calculating the (log) likelihood of the fitted spline
> l <- likelihood(g)
> 
> cat("Log likelihood with unique x values:\n")
Log likelihood with unique x values:
> print(l)
Likelihood of smoothing spline: -302406.5 
 Log base: 2.718282 
 Weighted residuals sum of square: 302406.6 
 Penalty: -0.1097639 
 Smoothing parameter lambda: 0.0009257147 
 Roughness score: 118.572 
> 
> # Note that this is not the same as the log likelihood of the
> # data on the fitted spline iff the x values are non-unique
> x[1:5] <- x[1]  # Non-unique x values
> g <- smooth.spline(x,y, df=16)
> l <- likelihood(g)
> 
> cat("\nLog likelihood of the *spline* data set:\n")

Log likelihood of the *spline* data set:
> print(l)
Likelihood of smoothing spline: -301668.6 
 Log base: 2.718282 
 Weighted residuals sum of square: 301668.8 
 Penalty: -0.1097469 
 Smoothing parameter lambda: 0.0009261969 
 Roughness score: 118.492 
> 
> # In cases with non unique x values one has to proceed as
> # below if one want to get the log likelihood for the original
> # data.
> l <- likelihood(g, x=x, y=y)
> cat("\nLog likelihood of the *original* data set:\n")

Log likelihood of the *original* data set:
> print(l)
Likelihood of smoothing spline: -302408 
 Log base: 2.718282 
 Weighted residuals sum of square: 302408.1 
 Penalty: -0.1097469 
 Smoothing parameter lambda: 0.0009261969 
 Roughness score: 118.492 
> 
> 
> 
> 
> 
> 
> proc.time()
   user  system elapsed 
   0.67    0.03    0.70 

aroma.light.Rcheck/tests_i386/medianPolish.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Deaths from sport parachuting;  from ABC of EDA, p.224:
> deaths <- matrix(c(14,15,14, 7,4,7, 8,2,10, 15,9,10, 0,2,0), ncol=3, byrow=TRUE)
> rownames(deaths) <- c("1-24", "25-74", "75-199", "200++", "NA")
> colnames(deaths) <- 1973:1975
> 
> print(deaths)
       1973 1974 1975
1-24     14   15   14
25-74     7    4    7
75-199    8    2   10
200++    15    9   10
NA        0    2    0
> 
> mp <- medianPolish(deaths)
> mp1 <- medpolish(deaths, trace=FALSE)
> print(mp)

Median Polish Results (Dataset: "deaths")

Overall: 8

Row Effects:
  1-24  25-74 75-199  200++     NA 
     6     -1      0      2     -8 

Column Effects:
1973 1974 1975 
   0   -1    0 

Residuals:
       1973 1974 1975
1-24      0    2    0
25-74     0   -2    0
75-199    0   -5    2
200++     5    0    0
NA        0    3    0

> 
> ff <- c("overall", "row", "col", "residuals")
> stopifnot(all.equal(mp[ff], mp1[ff]))
> 
> # Validate decomposition:
> stopifnot(all.equal(deaths, mp$overall+outer(mp$row,mp$col,"+")+mp$resid))
> 
> proc.time()
   user  system elapsed 
   0.40    0.12    0.53 

aroma.light.Rcheck/tests_x64/medianPolish.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Deaths from sport parachuting;  from ABC of EDA, p.224:
> deaths <- matrix(c(14,15,14, 7,4,7, 8,2,10, 15,9,10, 0,2,0), ncol=3, byrow=TRUE)
> rownames(deaths) <- c("1-24", "25-74", "75-199", "200++", "NA")
> colnames(deaths) <- 1973:1975
> 
> print(deaths)
       1973 1974 1975
1-24     14   15   14
25-74     7    4    7
75-199    8    2   10
200++    15    9   10
NA        0    2    0
> 
> mp <- medianPolish(deaths)
> mp1 <- medpolish(deaths, trace=FALSE)
> print(mp)

Median Polish Results (Dataset: "deaths")

Overall: 8

Row Effects:
  1-24  25-74 75-199  200++     NA 
     6     -1      0      2     -8 

Column Effects:
1973 1974 1975 
   0   -1    0 

Residuals:
       1973 1974 1975
1-24      0    2    0
25-74     0   -2    0
75-199    0   -5    2
200++     5    0    0
NA        0    3    0

> 
> ff <- c("overall", "row", "col", "residuals")
> stopifnot(all.equal(mp[ff], mp1[ff]))
> 
> # Validate decomposition:
> stopifnot(all.equal(deaths, mp$overall+outer(mp$row,mp$col,"+")+mp$resid))
> 
> proc.time()
   user  system elapsed 
   0.45    0.04    0.50 

aroma.light.Rcheck/tests_i386/normalizeAffine.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pathname <- system.file("data-ex", "PMT-RGData.dat", package="aroma.light")
> rg <- read.table(pathname, header=TRUE, sep="\t")
> nbrOfScans <- max(rg$slide)
> 
> rg <- as.list(rg)
> for (field in c("R", "G"))
+   rg[[field]] <- matrix(as.double(rg[[field]]), ncol=nbrOfScans)
> rg$slide <- rg$spot <- NULL
> rg <- as.matrix(as.data.frame(rg))
> colnames(rg) <- rep(c("R", "G"), each=nbrOfScans)
> 
> rgC <- rg
> 
> layout(matrix(c(1,2,0,3,4,0,5,6,7), ncol=3, byrow=TRUE))
> 
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   channelColor <- switch(channel, R="red", G="green")
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The raw data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   plotMvsAPairs(rg, channel=channel)
+   title(main=paste("Observed", channel))
+   box(col=channelColor)
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The calibrated data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   rgC[,sidx] <- calibrateMultiscan(rg[,sidx], average=NULL)
+ 
+   plotMvsAPairs(rgC, channel=channel)
+   title(main=paste("Calibrated", channel))
+   box(col=channelColor)
+ } # for (channel ...)
There were 50 or more warnings (use warnings() to see the first 50)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The average calibrated data
> #
> # Note how the red signals are weaker than the green. The reason
> # for this can be that the scale factor in the green channel is
> # greater than in the red channel, but it can also be that there
> # is a remaining relative difference in bias between the green
> # and the red channel, a bias that precedes the scanning.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCA <- matrix(NA_real_, nrow=nrow(rg), ncol=2)
> colnames(rgCA) <- c("R", "G")
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCA[,channel] <- calibrateMultiscan(rg[,sidx])
+ }
> 
> plotMvsA(rgCA)
> title(main="Average calibrated")
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The affine normalized average calibrated data
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Create a matrix where the columns represent the channels
> # to be normalized.
> rgCAN <- rgCA
> # Affine normalization of channels
> rgCAN <- normalizeAffine(rgCAN)
> 
> plotMvsA(rgCAN)
> title(main="Affine normalized A.C.")
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # It is always ok to rescale the affine normalized data if its
> # done on (R,G); not on (A,M)! However, this is only needed for
> # esthetic purposes.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCAN <- rgCAN * 2^5
> plotMvsA(rgCAN)
> title(main="Rescaled normalized")
> 
> 
> 
> proc.time()
   user  system elapsed 
   4.15    0.10    4.25 

aroma.light.Rcheck/tests_x64/normalizeAffine.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pathname <- system.file("data-ex", "PMT-RGData.dat", package="aroma.light")
> rg <- read.table(pathname, header=TRUE, sep="\t")
> nbrOfScans <- max(rg$slide)
> 
> rg <- as.list(rg)
> for (field in c("R", "G"))
+   rg[[field]] <- matrix(as.double(rg[[field]]), ncol=nbrOfScans)
> rg$slide <- rg$spot <- NULL
> rg <- as.matrix(as.data.frame(rg))
> colnames(rg) <- rep(c("R", "G"), each=nbrOfScans)
> 
> rgC <- rg
> 
> layout(matrix(c(1,2,0,3,4,0,5,6,7), ncol=3, byrow=TRUE))
> 
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   channelColor <- switch(channel, R="red", G="green")
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The raw data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   plotMvsAPairs(rg, channel=channel)
+   title(main=paste("Observed", channel))
+   box(col=channelColor)
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The calibrated data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   rgC[,sidx] <- calibrateMultiscan(rg[,sidx], average=NULL)
+ 
+   plotMvsAPairs(rgC, channel=channel)
+   title(main=paste("Calibrated", channel))
+   box(col=channelColor)
+ } # for (channel ...)
There were 50 or more warnings (use warnings() to see the first 50)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The average calibrated data
> #
> # Note how the red signals are weaker than the green. The reason
> # for this can be that the scale factor in the green channel is
> # greater than in the red channel, but it can also be that there
> # is a remaining relative difference in bias between the green
> # and the red channel, a bias that precedes the scanning.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCA <- matrix(NA_real_, nrow=nrow(rg), ncol=2)
> colnames(rgCA) <- c("R", "G")
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCA[,channel] <- calibrateMultiscan(rg[,sidx])
+ }
> 
> plotMvsA(rgCA)
> title(main="Average calibrated")
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The affine normalized average calibrated data
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Create a matrix where the columns represent the channels
> # to be normalized.
> rgCAN <- rgCA
> # Affine normalization of channels
> rgCAN <- normalizeAffine(rgCAN)
> 
> plotMvsA(rgCAN)
> title(main="Affine normalized A.C.")
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # It is always ok to rescale the affine normalized data if its
> # done on (R,G); not on (A,M)! However, this is only needed for
> # esthetic purposes.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCAN <- rgCAN * 2^5
> plotMvsA(rgCAN)
> title(main="Rescaled normalized")
> 
> 
> 
> proc.time()
   user  system elapsed 
   3.73    0.07    3.79 

aroma.light.Rcheck/tests_i386/normalizeAverage.list.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate ten samples of different lengths
> N <- 10000
> X <- list()
> for (kk in 1:8) {
+   rfcn <- list(rnorm, rgamma)[[sample(2, size=1)]]
+   size <- runif(1, min=0.3, max=1)
+   a <- rgamma(1, shape=20, rate=10)
+   b <- rgamma(1, shape=10, rate=10)
+   values <- rfcn(size*N, a, b)
+ 
+   # "Censor" values
+   values[values < 0 | values > 8] <- NA_real_
+ 
+   X[[kk]] <- values
+ }
> 
> # Add 20% missing values
> X <- lapply(X, FUN=function(x) {
+   x[sample(length(x), size=0.20*length(x))] <- NA_real_
+   x
+ })
> 
> # Normalize quantiles
> Xn <- normalizeAverage(X, na.rm=TRUE, targetAvg=median(unlist(X), na.rm=TRUE))
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.95    0.06    1.00 

aroma.light.Rcheck/tests_x64/normalizeAverage.list.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate ten samples of different lengths
> N <- 10000
> X <- list()
> for (kk in 1:8) {
+   rfcn <- list(rnorm, rgamma)[[sample(2, size=1)]]
+   size <- runif(1, min=0.3, max=1)
+   a <- rgamma(1, shape=20, rate=10)
+   b <- rgamma(1, shape=10, rate=10)
+   values <- rfcn(size*N, a, b)
+ 
+   # "Censor" values
+   values[values < 0 | values > 8] <- NA_real_
+ 
+   X[[kk]] <- values
+ }
> 
> # Add 20% missing values
> X <- lapply(X, FUN=function(x) {
+   x[sample(length(x), size=0.20*length(x))] <- NA_real_
+   x
+ })
> 
> # Normalize quantiles
> Xn <- normalizeAverage(X, na.rm=TRUE, targetAvg=median(unlist(X), na.rm=TRUE))
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.82    0.06    0.87 

aroma.light.Rcheck/tests_i386/normalizeAverage.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Normalize quantiles
> Xn <- normalizeAverage(X, na.rm=TRUE, targetAvg=median(X, na.rm=TRUE))
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.59    0.06    0.64 

aroma.light.Rcheck/tests_x64/normalizeAverage.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Normalize quantiles
> Xn <- normalizeAverage(X, na.rm=TRUE, targetAvg=median(X, na.rm=TRUE))
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.57    0.03    0.60 

aroma.light.Rcheck/tests_i386/normalizeCurveFit.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pathname <- system.file("data-ex", "PMT-RGData.dat", package="aroma.light")
> rg <- read.table(pathname, header=TRUE, sep="\t")
> nbrOfScans <- max(rg$slide)
> 
> rg <- as.list(rg)
> for (field in c("R", "G"))
+   rg[[field]] <- matrix(as.double(rg[[field]]), ncol=nbrOfScans)
> rg$slide <- rg$spot <- NULL
> rg <- as.matrix(as.data.frame(rg))
> colnames(rg) <- rep(c("R", "G"), each=nbrOfScans)
> 
> layout(matrix(c(1,2,0,3,4,0,5,6,7), ncol=3, byrow=TRUE))
> 
> rgC <- rg
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   channelColor <- switch(channel, R="red", G="green")
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The raw data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   plotMvsAPairs(rg[,sidx])
+   title(main=paste("Observed", channel))
+   box(col=channelColor)
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The calibrated data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   rgC[,sidx] <- calibrateMultiscan(rg[,sidx], average=NULL)
+ 
+   plotMvsAPairs(rgC[,sidx])
+   title(main=paste("Calibrated", channel))
+   box(col=channelColor)
+ } # for (channel ...)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The average calibrated data
> #
> # Note how the red signals are weaker than the green. The reason
> # for this can be that the scale factor in the green channel is
> # greater than in the red channel, but it can also be that there
> # is a remaining relative difference in bias between the green
> # and the red channel, a bias that precedes the scanning.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCA <- rg
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCA[,sidx] <- calibrateMultiscan(rg[,sidx])
+ }
> 
> rgCAavg <- matrix(NA_real_, nrow=nrow(rgCA), ncol=2)
> colnames(rgCAavg) <- c("R", "G")
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCAavg[,channel] <- apply(rgCA[,sidx], MARGIN=1, FUN=median, na.rm=TRUE)
+ }
> 
> # Add some "fake" outliers
> outliers <- 1:600
> rgCAavg[outliers,"G"] <- 50000
> 
> plotMvsA(rgCAavg)
> title(main="Average calibrated (AC)")
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Normalize data
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Weight-down outliers when normalizing
> weights <- rep(1, nrow(rgCAavg))
> weights[outliers] <- 0.001
> 
> # Affine normalization of channels
> rgCANa <- normalizeAffine(rgCAavg, weights=weights)
> # It is always ok to rescale the affine normalized data if its
> # done on (R,G); not on (A,M)! However, this is only needed for
> # esthetic purposes.
> rgCANa <- rgCANa *2^1.4
> plotMvsA(rgCANa)
> title(main="Normalized AC")
> 
> # Curve-fit (lowess) normalization
> rgCANlw <- normalizeLowess(rgCAavg, weights=weights)
Warning message:
In normalizeCurveFit.matrix(X, method = "lowess", ...) :
  Weights were rounded to {0,1} since 'lowess' normalization supports only zero-one weights.
> plotMvsA(rgCANlw, col="orange", add=TRUE)
> 
> # Curve-fit (loess) normalization
> rgCANl <- normalizeLoess(rgCAavg, weights=weights)
> plotMvsA(rgCANl, col="red", add=TRUE)
> 
> # Curve-fit (robust spline) normalization
> rgCANrs <- normalizeRobustSpline(rgCAavg, weights=weights)
> plotMvsA(rgCANrs, col="blue", add=TRUE)
> 
> legend(x=0,y=16, legend=c("affine", "lowess", "loess", "r. spline"), pch=19,
+        col=c("black", "orange", "red", "blue"), ncol=2, x.intersp=0.3, bty="n")
> 
> 
> plotMvsMPairs(cbind(rgCANa, rgCANlw), col="orange", xlab=expression(M[affine]))
> title(main="Normalized AC")
> plotMvsMPairs(cbind(rgCANa, rgCANl), col="red", add=TRUE)
> plotMvsMPairs(cbind(rgCANa, rgCANrs), col="blue", add=TRUE)
> abline(a=0, b=1, lty=2)
> legend(x=-6,y=6, legend=c("lowess", "loess", "r. spline"), pch=19,
+        col=c("orange", "red", "blue"), ncol=2, x.intersp=0.3, bty="n")
> 
> 
> proc.time()
   user  system elapsed 
   8.56    0.09    8.64 

aroma.light.Rcheck/tests_x64/normalizeCurveFit.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pathname <- system.file("data-ex", "PMT-RGData.dat", package="aroma.light")
> rg <- read.table(pathname, header=TRUE, sep="\t")
> nbrOfScans <- max(rg$slide)
> 
> rg <- as.list(rg)
> for (field in c("R", "G"))
+   rg[[field]] <- matrix(as.double(rg[[field]]), ncol=nbrOfScans)
> rg$slide <- rg$spot <- NULL
> rg <- as.matrix(as.data.frame(rg))
> colnames(rg) <- rep(c("R", "G"), each=nbrOfScans)
> 
> layout(matrix(c(1,2,0,3,4,0,5,6,7), ncol=3, byrow=TRUE))
> 
> rgC <- rg
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   channelColor <- switch(channel, R="red", G="green")
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The raw data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   plotMvsAPairs(rg[,sidx])
+   title(main=paste("Observed", channel))
+   box(col=channelColor)
+ 
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   # The calibrated data
+   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+   rgC[,sidx] <- calibrateMultiscan(rg[,sidx], average=NULL)
+ 
+   plotMvsAPairs(rgC[,sidx])
+   title(main=paste("Calibrated", channel))
+   box(col=channelColor)
+ } # for (channel ...)
> 
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # The average calibrated data
> #
> # Note how the red signals are weaker than the green. The reason
> # for this can be that the scale factor in the green channel is
> # greater than in the red channel, but it can also be that there
> # is a remaining relative difference in bias between the green
> # and the red channel, a bias that precedes the scanning.
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> rgCA <- rg
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCA[,sidx] <- calibrateMultiscan(rg[,sidx])
+ }
> 
> rgCAavg <- matrix(NA_real_, nrow=nrow(rgCA), ncol=2)
> colnames(rgCAavg) <- c("R", "G")
> for (channel in c("R", "G")) {
+   sidx <- which(colnames(rg) == channel)
+   rgCAavg[,channel] <- apply(rgCA[,sidx], MARGIN=1, FUN=median, na.rm=TRUE)
+ }
> 
> # Add some "fake" outliers
> outliers <- 1:600
> rgCAavg[outliers,"G"] <- 50000
> 
> plotMvsA(rgCAavg)
> title(main="Average calibrated (AC)")
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Normalize data
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Weight-down outliers when normalizing
> weights <- rep(1, nrow(rgCAavg))
> weights[outliers] <- 0.001
> 
> # Affine normalization of channels
> rgCANa <- normalizeAffine(rgCAavg, weights=weights)
> # It is always ok to rescale the affine normalized data if its
> # done on (R,G); not on (A,M)! However, this is only needed for
> # esthetic purposes.
> rgCANa <- rgCANa *2^1.4
> plotMvsA(rgCANa)
> title(main="Normalized AC")
> 
> # Curve-fit (lowess) normalization
> rgCANlw <- normalizeLowess(rgCAavg, weights=weights)
Warning message:
In normalizeCurveFit.matrix(X, method = "lowess", ...) :
  Weights were rounded to {0,1} since 'lowess' normalization supports only zero-one weights.
> plotMvsA(rgCANlw, col="orange", add=TRUE)
> 
> # Curve-fit (loess) normalization
> rgCANl <- normalizeLoess(rgCAavg, weights=weights)
> plotMvsA(rgCANl, col="red", add=TRUE)
> 
> # Curve-fit (robust spline) normalization
> rgCANrs <- normalizeRobustSpline(rgCAavg, weights=weights)
> plotMvsA(rgCANrs, col="blue", add=TRUE)
> 
> legend(x=0,y=16, legend=c("affine", "lowess", "loess", "r. spline"), pch=19,
+        col=c("black", "orange", "red", "blue"), ncol=2, x.intersp=0.3, bty="n")
> 
> 
> plotMvsMPairs(cbind(rgCANa, rgCANlw), col="orange", xlab=expression(M[affine]))
> title(main="Normalized AC")
> plotMvsMPairs(cbind(rgCANa, rgCANl), col="red", add=TRUE)
> plotMvsMPairs(cbind(rgCANa, rgCANrs), col="blue", add=TRUE)
> abline(a=0, b=1, lty=2)
> legend(x=-6,y=6, legend=c("lowess", "loess", "r. spline"), pch=19,
+        col=c("orange", "red", "blue"), ncol=2, x.intersp=0.3, bty="n")
> 
> 
> proc.time()
   user  system elapsed 
   7.85    0.03    7.87 

aroma.light.Rcheck/tests_i386/normalizeDifferencesToAverage.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three shifted tracks of different lengths with same profiles
> ns <- c(A=2, B=1, C=0.25)*1000
> xx <- lapply(ns, FUN=function(n) { seq(from=1, to=max(ns), length.out=n) })
> zz <- mapply(seq_along(ns), ns, FUN=function(z,n) rep(z,n))
> 
> yy <- list(
+   A = rnorm(ns["A"], mean=0, sd=0.5),
+   B = rnorm(ns["B"], mean=5, sd=0.4),
+   C = rnorm(ns["C"], mean=-5, sd=1.1)
+ )
> yy <- lapply(yy, FUN=function(y) {
+   n <- length(y)
+   y[1:(n/2)] <- y[1:(n/2)] + 2
+   y[1:(n/4)] <- y[1:(n/4)] - 4
+   y
+ })
> 
> # Shift all tracks toward the first track
> yyN <- normalizeDifferencesToAverage(yy, baseline=1)
> 
> # The baseline channel is not changed
> stopifnot(identical(yy[[1]], yyN[[1]]))
> 
> # Get the estimated parameters
> fit <- attr(yyN, "fit")
> 
> # Plot the tracks
> layout(matrix(1:2, ncol=1))
> x <- unlist(xx)
> col <- unlist(zz)
> y <- unlist(yy)
> yN <- unlist(yyN)
> plot(x, y, col=col, ylim=c(-10,10))
> plot(x, yN, col=col, ylim=c(-10,10))
> 
> proc.time()
   user  system elapsed 
   0.54    0.07    0.60 

aroma.light.Rcheck/tests_x64/normalizeDifferencesToAverage.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three shifted tracks of different lengths with same profiles
> ns <- c(A=2, B=1, C=0.25)*1000
> xx <- lapply(ns, FUN=function(n) { seq(from=1, to=max(ns), length.out=n) })
> zz <- mapply(seq_along(ns), ns, FUN=function(z,n) rep(z,n))
> 
> yy <- list(
+   A = rnorm(ns["A"], mean=0, sd=0.5),
+   B = rnorm(ns["B"], mean=5, sd=0.4),
+   C = rnorm(ns["C"], mean=-5, sd=1.1)
+ )
> yy <- lapply(yy, FUN=function(y) {
+   n <- length(y)
+   y[1:(n/2)] <- y[1:(n/2)] + 2
+   y[1:(n/4)] <- y[1:(n/4)] - 4
+   y
+ })
> 
> # Shift all tracks toward the first track
> yyN <- normalizeDifferencesToAverage(yy, baseline=1)
> 
> # The baseline channel is not changed
> stopifnot(identical(yy[[1]], yyN[[1]]))
> 
> # Get the estimated parameters
> fit <- attr(yyN, "fit")
> 
> # Plot the tracks
> layout(matrix(1:2, ncol=1))
> x <- unlist(xx)
> col <- unlist(zz)
> y <- unlist(yy)
> yN <- unlist(yyN)
> plot(x, y, col=col, ylim=c(-10,10))
> plot(x, yN, col=col, ylim=c(-10,10))
> 
> proc.time()
   user  system elapsed 
   0.57    0.03    0.60 

aroma.light.Rcheck/tests_i386/normalizeFragmentLength-ex1.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Example 1: Single-enzyme fragment-length normalization of 6 arrays
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Number samples
> I <- 9
> 
> # Number of loci
> J <- 1000
> 
> # Fragment lengths
> fl <- seq(from=100, to=1000, length.out=J)
> 
> # Simulate data points with unknown fragment lengths
> hasUnknownFL <- seq(from=1, to=J, by=50)
> fl[hasUnknownFL] <- NA_real_
> 
> # Simulate data
> y <- matrix(0, nrow=J, ncol=I)
> maxY <- 12
> for (kk in 1:I) {
+   k <- runif(n=1, min=3, max=5)
+   mu <- function(fl) {
+     mu <- rep(maxY, length(fl))
+     ok <- !is.na(fl)
+     mu[ok] <- mu[ok] - fl[ok]^{1/k}
+     mu
+   }
+   eps <- rnorm(J, mean=0, sd=1)
+   y[,kk] <- mu(fl) + eps
+ }
> 
> # Normalize data (to a zero baseline)
> yN <- apply(y, MARGIN=2, FUN=function(y) {
+   normalizeFragmentLength(y, fragmentLengths=fl, onMissing="median")
+ })
> 
> # The correction factors
> rho <- y-yN
> print(summary(rho))
       V1              V2              V3              V4       
 Min.   :6.214   Min.   :7.617   Min.   :7.727   Min.   :6.617  
 1st Qu.:6.611   1st Qu.:8.020   1st Qu.:7.966   1st Qu.:6.920  
 Median :6.970   Median :8.353   Median :8.269   Median :7.254  
 Mean   :7.151   Mean   :8.331   Mean   :8.319   Mean   :7.432  
 3rd Qu.:7.647   3rd Qu.:8.621   3rd Qu.:8.631   3rd Qu.:7.921  
 Max.   :8.652   Max.   :9.058   Max.   :9.151   Max.   :8.745  
       V5              V6              V7              V8       
 Min.   :3.312   Min.   :7.649   Min.   :2.899   Min.   :6.437  
 1st Qu.:4.073   1st Qu.:7.935   1st Qu.:3.663   1st Qu.:6.805  
 Median :4.917   Median :8.282   Median :4.633   Median :7.199  
 Mean   :5.069   Mean   :8.309   Mean   :4.784   Mean   :7.310  
 3rd Qu.:6.015   3rd Qu.:8.666   3rd Qu.:5.832   3rd Qu.:7.785  
 Max.   :7.349   Max.   :9.091   Max.   :7.272   Max.   :8.546  
       V9       
 Min.   :6.210  
 1st Qu.:6.732  
 Median :7.188  
 Mean   :7.258  
 3rd Qu.:7.767  
 Max.   :8.557  
> # The correction for units with unknown fragment lengths
> # equals the median correction factor of all other units
> print(summary(rho[hasUnknownFL,]))
       V1             V2              V3              V4              V5       
 Min.   :6.97   Min.   :8.353   Min.   :8.269   Min.   :7.254   Min.   :4.917  
 1st Qu.:6.97   1st Qu.:8.353   1st Qu.:8.269   1st Qu.:7.254   1st Qu.:4.917  
 Median :6.97   Median :8.353   Median :8.269   Median :7.254   Median :4.917  
 Mean   :6.97   Mean   :8.353   Mean   :8.269   Mean   :7.254   Mean   :4.917  
 3rd Qu.:6.97   3rd Qu.:8.353   3rd Qu.:8.269   3rd Qu.:7.254   3rd Qu.:4.917  
 Max.   :6.97   Max.   :8.353   Max.   :8.269   Max.   :7.254   Max.   :4.917  
       V6              V7              V8              V9       
 Min.   :8.282   Min.   :4.633   Min.   :7.199   Min.   :7.188  
 1st Qu.:8.282   1st Qu.:4.633   1st Qu.:7.199   1st Qu.:7.188  
 Median :8.282   Median :4.633   Median :7.199   Median :7.188  
 Mean   :8.282   Mean   :4.633   Mean   :7.199   Mean   :7.188  
 3rd Qu.:8.282   3rd Qu.:4.633   3rd Qu.:7.199   3rd Qu.:7.188  
 Max.   :8.282   Max.   :4.633   Max.   :7.199   Max.   :7.188  
> 
> # Plot raw data
> layout(matrix(1:9, ncol=3))
> xlim <- c(0,max(fl, na.rm=TRUE))
> ylim <- c(0,max(y, na.rm=TRUE))
> xlab <- "Fragment length"
> ylab <- expression(log2(theta))
> for (kk in 1:I) {
+   plot(fl, y[,kk], xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab)
+   ok <- (is.finite(fl) & is.finite(y[,kk]))
+   lines(lowess(fl[ok], y[ok,kk]), col="red", lwd=2)
+ }
> 
> # Plot normalized data
> layout(matrix(1:9, ncol=3))
> ylim <- c(-1,1)*max(y, na.rm=TRUE)/2
> for (kk in 1:I) {
+   plot(fl, yN[,kk], xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab)
+   ok <- (is.finite(fl) & is.finite(y[,kk]))
+   lines(lowess(fl[ok], yN[ok,kk]), col="blue", lwd=2)
+ }
> 
> proc.time()
   user  system elapsed 
   0.79    0.07    0.87 

aroma.light.Rcheck/tests_x64/normalizeFragmentLength-ex1.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Example 1: Single-enzyme fragment-length normalization of 6 arrays
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Number samples
> I <- 9
> 
> # Number of loci
> J <- 1000
> 
> # Fragment lengths
> fl <- seq(from=100, to=1000, length.out=J)
> 
> # Simulate data points with unknown fragment lengths
> hasUnknownFL <- seq(from=1, to=J, by=50)
> fl[hasUnknownFL] <- NA_real_
> 
> # Simulate data
> y <- matrix(0, nrow=J, ncol=I)
> maxY <- 12
> for (kk in 1:I) {
+   k <- runif(n=1, min=3, max=5)
+   mu <- function(fl) {
+     mu <- rep(maxY, length(fl))
+     ok <- !is.na(fl)
+     mu[ok] <- mu[ok] - fl[ok]^{1/k}
+     mu
+   }
+   eps <- rnorm(J, mean=0, sd=1)
+   y[,kk] <- mu(fl) + eps
+ }
> 
> # Normalize data (to a zero baseline)
> yN <- apply(y, MARGIN=2, FUN=function(y) {
+   normalizeFragmentLength(y, fragmentLengths=fl, onMissing="median")
+ })
> 
> # The correction factors
> rho <- y-yN
> print(summary(rho))
       V1              V2              V3              V4       
 Min.   :6.913   Min.   :7.542   Min.   :8.025   Min.   :2.821  
 1st Qu.:7.288   1st Qu.:7.745   1st Qu.:8.209   1st Qu.:3.650  
 Median :7.679   Median :7.999   Median :8.484   Median :4.502  
 Mean   :7.715   Mean   :8.108   Mean   :8.537   Mean   :4.722  
 3rd Qu.:8.096   3rd Qu.:8.453   3rd Qu.:8.837   3rd Qu.:5.738  
 Max.   :8.744   Max.   :9.004   Max.   :9.252   Max.   :7.320  
       V5              V6              V7              V8       
 Min.   :7.904   Min.   :6.098   Min.   :6.575   Min.   :6.892  
 1st Qu.:8.269   1st Qu.:6.358   1st Qu.:6.964   1st Qu.:7.179  
 Median :8.492   Median :6.786   Median :7.380   Median :7.528  
 Mean   :8.540   Mean   :6.969   Mean   :7.481   Mean   :7.679  
 3rd Qu.:8.790   3rd Qu.:7.509   3rd Qu.:7.971   3rd Qu.:8.145  
 Max.   :9.338   Max.   :8.505   Max.   :8.715   Max.   :8.927  
       V9       
 Min.   :7.605  
 1st Qu.:8.032  
 Median :8.290  
 Mean   :8.374  
 3rd Qu.:8.711  
 Max.   :9.350  
> # The correction for units with unknown fragment lengths
> # equals the median correction factor of all other units
> print(summary(rho[hasUnknownFL,]))
       V1              V2              V3              V4       
 Min.   :7.679   Min.   :7.999   Min.   :8.484   Min.   :4.502  
 1st Qu.:7.679   1st Qu.:7.999   1st Qu.:8.484   1st Qu.:4.502  
 Median :7.679   Median :7.999   Median :8.484   Median :4.502  
 Mean   :7.679   Mean   :7.999   Mean   :8.484   Mean   :4.502  
 3rd Qu.:7.679   3rd Qu.:7.999   3rd Qu.:8.484   3rd Qu.:4.502  
 Max.   :7.679   Max.   :7.999   Max.   :8.484   Max.   :4.502  
       V5              V6              V7             V8              V9      
 Min.   :8.492   Min.   :6.786   Min.   :7.38   Min.   :7.528   Min.   :8.29  
 1st Qu.:8.492   1st Qu.:6.786   1st Qu.:7.38   1st Qu.:7.528   1st Qu.:8.29  
 Median :8.492   Median :6.786   Median :7.38   Median :7.528   Median :8.29  
 Mean   :8.492   Mean   :6.786   Mean   :7.38   Mean   :7.528   Mean   :8.29  
 3rd Qu.:8.492   3rd Qu.:6.786   3rd Qu.:7.38   3rd Qu.:7.528   3rd Qu.:8.29  
 Max.   :8.492   Max.   :6.786   Max.   :7.38   Max.   :7.528   Max.   :8.29  
> 
> # Plot raw data
> layout(matrix(1:9, ncol=3))
> xlim <- c(0,max(fl, na.rm=TRUE))
> ylim <- c(0,max(y, na.rm=TRUE))
> xlab <- "Fragment length"
> ylab <- expression(log2(theta))
> for (kk in 1:I) {
+   plot(fl, y[,kk], xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab)
+   ok <- (is.finite(fl) & is.finite(y[,kk]))
+   lines(lowess(fl[ok], y[ok,kk]), col="red", lwd=2)
+ }
> 
> # Plot normalized data
> layout(matrix(1:9, ncol=3))
> ylim <- c(-1,1)*max(y, na.rm=TRUE)/2
> for (kk in 1:I) {
+   plot(fl, yN[,kk], xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab)
+   ok <- (is.finite(fl) & is.finite(y[,kk]))
+   lines(lowess(fl[ok], yN[ok,kk]), col="blue", lwd=2)
+ }
> 
> proc.time()
   user  system elapsed 
   0.89    0.09    0.98 

aroma.light.Rcheck/tests_i386/normalizeFragmentLength-ex2.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Example 2: Two-enzyme fragment-length normalization of 6 arrays
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> set.seed(0xbeef)
> 
> # Number samples
> I <- 5
> 
> # Number of loci
> J <- 3000
> 
> # Fragment lengths (two enzymes)
> fl <- matrix(0, nrow=J, ncol=2)
> fl[,1] <- seq(from=100, to=1000, length.out=J)
> fl[,2] <- seq(from=1000, to=100, length.out=J)
> 
> # Let 1/2 of the units be on both enzymes
> fl[seq(from=1, to=J, by=4),1] <- NA_real_
> fl[seq(from=2, to=J, by=4),2] <- NA_real_
> 
> # Let some have unknown fragment lengths
> hasUnknownFL <- seq(from=1, to=J, by=15)
> fl[hasUnknownFL,] <- NA_real_
> 
> # Sty/Nsp mixing proportions:
> rho <- rep(1, I)
> rho[1] <- 1/3;  # Less Sty in 1st sample
> rho[3] <- 3/2;  # More Sty in 3rd sample
> 
> 
> # Simulate data
> z <- array(0, dim=c(J,2,I))
> maxLog2Theta <- 12
> for (ii in 1:I) {
+   # Common effect for both enzymes
+   mu <- function(fl) {
+     k <- runif(n=1, min=3, max=5)
+     mu <- rep(maxLog2Theta, length(fl))
+     ok <- is.finite(fl)
+     mu[ok] <- mu[ok] - fl[ok]^{1/k}
+     mu
+   }
+ 
+   # Calculate the effect for each data point
+   for (ee in 1:2) {
+     z[,ee,ii] <- mu(fl[,ee])
+   }
+ 
+   # Update the Sty/Nsp mixing proportions
+   ee <- 2
+   z[,ee,ii] <- rho[ii]*z[,ee,ii]
+ 
+   # Add random errors
+   for (ee in 1:2) {
+     eps <- rnorm(J, mean=0, sd=1/sqrt(2))
+     z[,ee,ii] <- z[,ee,ii] + eps
+   }
+ }
> 
> 
> hasFl <- is.finite(fl)
> 
> unitSets <- list(
+   nsp  = which( hasFl[,1] & !hasFl[,2]),
+   sty  = which(!hasFl[,1] &  hasFl[,2]),
+   both = which( hasFl[,1] &  hasFl[,2]),
+   none = which(!hasFl[,1] & !hasFl[,2])
+ )
> 
> # The observed data is a mix of two enzymes
> theta <- matrix(NA_real_, nrow=J, ncol=I)
> 
> # Single-enzyme units
> for (ee in 1:2) {
+   uu <- unitSets[[ee]]
+   theta[uu,] <- 2^z[uu,ee,]
+ }
> 
> # Both-enzyme units (sum on intensity scale)
> uu <- unitSets$both
> theta[uu,] <- (2^z[uu,1,]+2^z[uu,2,])/2
> 
> # Missing units (sample from the others)
> uu <- unitSets$none
> theta[uu,] <- apply(theta, MARGIN=2, sample, size=length(uu))
> 
> # Calculate target array
> thetaT <- rowMeans(theta, na.rm=TRUE)
> targetFcns <- list()
> for (ee in 1:2) {
+   uu <- unitSets[[ee]]
+   fit <- lowess(fl[uu,ee], log2(thetaT[uu]))
+   class(fit) <- "lowess"
+   targetFcns[[ee]] <- function(fl, ...) {
+     predict(fit, newdata=fl)
+   }
+ }
> 
> 
> # Fit model only to a subset of the data
> subsetToFit <- setdiff(1:J, seq(from=1, to=J, by=10))
> 
> # Normalize data (to a target baseline)
> thetaN <- matrix(NA_real_, nrow=J, ncol=I)
> fits <- vector("list", I)
> for (ii in 1:I) {
+   lthetaNi <- normalizeFragmentLength(log2(theta[,ii]), targetFcns=targetFcns,
+                      fragmentLengths=fl, onMissing="median",
+                      subsetToFit=subsetToFit, .returnFit=TRUE)
+   fits[[ii]] <- attr(lthetaNi, "modelFit")
+   thetaN[,ii] <- 2^lthetaNi
+ }
> 
> 
> # Plot raw data
> xlim <- c(0, max(fl, na.rm=TRUE))
> ylim <- c(0, max(log2(theta), na.rm=TRUE))
> Mlim <- c(-1,1)*4
> xlab <- "Fragment length"
> ylab <- expression(log2(theta))
> Mlab <- expression(M==log[2](theta/theta[R]))
> 
> layout(matrix(1:(3*I), ncol=I, byrow=TRUE))
> for (ii in 1:I) {
+   plot(NA, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, main="raw")
+ 
+   # Single-enzyme units
+   for (ee in 1:2) {
+     # The raw data
+     uu <- unitSets[[ee]]
+     points(fl[uu,ee], log2(theta[uu,ii]), col=ee+1)
+   }
+ 
+   # Both-enzyme units (use fragment-length for enzyme #1)
+   uu <- unitSets$both
+   points(fl[uu,1], log2(theta[uu,ii]), col=3+1)
+ 
+   for (ee in 1:2) {
+     # The true effects
+     uu <- unitSets[[ee]]
+     lines(lowess(fl[uu,ee], log2(theta[uu,ii])), col="black", lwd=4, lty=3)
+ 
+     # The estimated effects
+     fit <- fits[[ii]][[ee]]$fit
+     lines(fit, col="orange", lwd=3)
+ 
+     muT <- targetFcns[[ee]](fl[uu,ee])
+     lines(fl[uu,ee], muT, col="cyan", lwd=1)
+   }
+ }
> 
> # Calculate log-ratios
> thetaR <- rowMeans(thetaN, na.rm=TRUE)
> M <- log2(thetaN/thetaR)
> 
> # Plot normalized data
> for (ii in 1:I) {
+   plot(NA, xlim=xlim, ylim=Mlim, xlab=xlab, ylab=Mlab, main="normalized")
+   # Single-enzyme units
+   for (ee in 1:2) {
+     # The normalized data
+     uu <- unitSets[[ee]]
+     points(fl[uu,ee], M[uu,ii], col=ee+1)
+   }
+   # Both-enzyme units (use fragment-length for enzyme #1)
+   uu <- unitSets$both
+   points(fl[uu,1], M[uu,ii], col=3+1)
+ }
> 
> ylim <- c(0,1.5)
> for (ii in 1:I) {
+   data <- list()
+   for (ee in 1:2) {
+     # The normalized data
+     uu <- unitSets[[ee]]
+     data[[ee]] <- M[uu,ii]
+   }
+   uu <- unitSets$both
+   if (length(uu) > 0)
+     data[[3]] <- M[uu,ii]
+ 
+   uu <- unitSets$none
+   if (length(uu) > 0)
+     data[[4]] <- M[uu,ii]
+ 
+   cols <- seq_along(data)+1
+   plotDensity(data, col=cols, xlim=Mlim, xlab=Mlab, main="normalized")
+ 
+   abline(v=0, lty=2)
+ }
> 
> 
> proc.time()
   user  system elapsed 
   1.00    0.06    1.04 

aroma.light.Rcheck/tests_x64/normalizeFragmentLength-ex2.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> # Example 2: Two-enzyme fragment-length normalization of 6 arrays
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> set.seed(0xbeef)
> 
> # Number samples
> I <- 5
> 
> # Number of loci
> J <- 3000
> 
> # Fragment lengths (two enzymes)
> fl <- matrix(0, nrow=J, ncol=2)
> fl[,1] <- seq(from=100, to=1000, length.out=J)
> fl[,2] <- seq(from=1000, to=100, length.out=J)
> 
> # Let 1/2 of the units be on both enzymes
> fl[seq(from=1, to=J, by=4),1] <- NA_real_
> fl[seq(from=2, to=J, by=4),2] <- NA_real_
> 
> # Let some have unknown fragment lengths
> hasUnknownFL <- seq(from=1, to=J, by=15)
> fl[hasUnknownFL,] <- NA_real_
> 
> # Sty/Nsp mixing proportions:
> rho <- rep(1, I)
> rho[1] <- 1/3;  # Less Sty in 1st sample
> rho[3] <- 3/2;  # More Sty in 3rd sample
> 
> 
> # Simulate data
> z <- array(0, dim=c(J,2,I))
> maxLog2Theta <- 12
> for (ii in 1:I) {
+   # Common effect for both enzymes
+   mu <- function(fl) {
+     k <- runif(n=1, min=3, max=5)
+     mu <- rep(maxLog2Theta, length(fl))
+     ok <- is.finite(fl)
+     mu[ok] <- mu[ok] - fl[ok]^{1/k}
+     mu
+   }
+ 
+   # Calculate the effect for each data point
+   for (ee in 1:2) {
+     z[,ee,ii] <- mu(fl[,ee])
+   }
+ 
+   # Update the Sty/Nsp mixing proportions
+   ee <- 2
+   z[,ee,ii] <- rho[ii]*z[,ee,ii]
+ 
+   # Add random errors
+   for (ee in 1:2) {
+     eps <- rnorm(J, mean=0, sd=1/sqrt(2))
+     z[,ee,ii] <- z[,ee,ii] + eps
+   }
+ }
> 
> 
> hasFl <- is.finite(fl)
> 
> unitSets <- list(
+   nsp  = which( hasFl[,1] & !hasFl[,2]),
+   sty  = which(!hasFl[,1] &  hasFl[,2]),
+   both = which( hasFl[,1] &  hasFl[,2]),
+   none = which(!hasFl[,1] & !hasFl[,2])
+ )
> 
> # The observed data is a mix of two enzymes
> theta <- matrix(NA_real_, nrow=J, ncol=I)
> 
> # Single-enzyme units
> for (ee in 1:2) {
+   uu <- unitSets[[ee]]
+   theta[uu,] <- 2^z[uu,ee,]
+ }
> 
> # Both-enzyme units (sum on intensity scale)
> uu <- unitSets$both
> theta[uu,] <- (2^z[uu,1,]+2^z[uu,2,])/2
> 
> # Missing units (sample from the others)
> uu <- unitSets$none
> theta[uu,] <- apply(theta, MARGIN=2, sample, size=length(uu))
> 
> # Calculate target array
> thetaT <- rowMeans(theta, na.rm=TRUE)
> targetFcns <- list()
> for (ee in 1:2) {
+   uu <- unitSets[[ee]]
+   fit <- lowess(fl[uu,ee], log2(thetaT[uu]))
+   class(fit) <- "lowess"
+   targetFcns[[ee]] <- function(fl, ...) {
+     predict(fit, newdata=fl)
+   }
+ }
> 
> 
> # Fit model only to a subset of the data
> subsetToFit <- setdiff(1:J, seq(from=1, to=J, by=10))
> 
> # Normalize data (to a target baseline)
> thetaN <- matrix(NA_real_, nrow=J, ncol=I)
> fits <- vector("list", I)
> for (ii in 1:I) {
+   lthetaNi <- normalizeFragmentLength(log2(theta[,ii]), targetFcns=targetFcns,
+                      fragmentLengths=fl, onMissing="median",
+                      subsetToFit=subsetToFit, .returnFit=TRUE)
+   fits[[ii]] <- attr(lthetaNi, "modelFit")
+   thetaN[,ii] <- 2^lthetaNi
+ }
> 
> 
> # Plot raw data
> xlim <- c(0, max(fl, na.rm=TRUE))
> ylim <- c(0, max(log2(theta), na.rm=TRUE))
> Mlim <- c(-1,1)*4
> xlab <- "Fragment length"
> ylab <- expression(log2(theta))
> Mlab <- expression(M==log[2](theta/theta[R]))
> 
> layout(matrix(1:(3*I), ncol=I, byrow=TRUE))
> for (ii in 1:I) {
+   plot(NA, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, main="raw")
+ 
+   # Single-enzyme units
+   for (ee in 1:2) {
+     # The raw data
+     uu <- unitSets[[ee]]
+     points(fl[uu,ee], log2(theta[uu,ii]), col=ee+1)
+   }
+ 
+   # Both-enzyme units (use fragment-length for enzyme #1)
+   uu <- unitSets$both
+   points(fl[uu,1], log2(theta[uu,ii]), col=3+1)
+ 
+   for (ee in 1:2) {
+     # The true effects
+     uu <- unitSets[[ee]]
+     lines(lowess(fl[uu,ee], log2(theta[uu,ii])), col="black", lwd=4, lty=3)
+ 
+     # The estimated effects
+     fit <- fits[[ii]][[ee]]$fit
+     lines(fit, col="orange", lwd=3)
+ 
+     muT <- targetFcns[[ee]](fl[uu,ee])
+     lines(fl[uu,ee], muT, col="cyan", lwd=1)
+   }
+ }
> 
> # Calculate log-ratios
> thetaR <- rowMeans(thetaN, na.rm=TRUE)
> M <- log2(thetaN/thetaR)
> 
> # Plot normalized data
> for (ii in 1:I) {
+   plot(NA, xlim=xlim, ylim=Mlim, xlab=xlab, ylab=Mlab, main="normalized")
+   # Single-enzyme units
+   for (ee in 1:2) {
+     # The normalized data
+     uu <- unitSets[[ee]]
+     points(fl[uu,ee], M[uu,ii], col=ee+1)
+   }
+   # Both-enzyme units (use fragment-length for enzyme #1)
+   uu <- unitSets$both
+   points(fl[uu,1], M[uu,ii], col=3+1)
+ }
> 
> ylim <- c(0,1.5)
> for (ii in 1:I) {
+   data <- list()
+   for (ee in 1:2) {
+     # The normalized data
+     uu <- unitSets[[ee]]
+     data[[ee]] <- M[uu,ii]
+   }
+   uu <- unitSets$both
+   if (length(uu) > 0)
+     data[[3]] <- M[uu,ii]
+ 
+   uu <- unitSets$none
+   if (length(uu) > 0)
+     data[[4]] <- M[uu,ii]
+ 
+   cols <- seq_along(data)+1
+   plotDensity(data, col=cols, xlim=Mlim, xlab=Mlab, main="normalized")
+ 
+   abline(v=0, lty=2)
+ }
> 
> 
> proc.time()
   user  system elapsed 
   1.04    0.07    1.10 

aroma.light.Rcheck/tests_i386/normalizeQuantileRank.list.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate ten samples of different lengths
> N <- 10000
> X <- list()
> for (kk in 1:8) {
+   rfcn <- list(rnorm, rgamma)[[sample(2, size=1)]]
+   size <- runif(1, min=0.3, max=1)
+   a <- rgamma(1, shape=20, rate=10)
+   b <- rgamma(1, shape=10, rate=10)
+   values <- rfcn(size*N, a, b)
+ 
+   # "Censor" values
+   values[values < 0 | values > 8] <- NA_real_
+ 
+   X[[kk]] <- values
+ }
> 
> # Add 20% missing values
> X <- lapply(X, FUN=function(x) {
+   x[sample(length(x), size=0.20*length(x))] <- NA_real_
+   x
+ })
> 
> # Normalize quantiles
> Xn <- normalizeQuantile(X)
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.64    0.06    0.68 

aroma.light.Rcheck/tests_x64/normalizeQuantileRank.list.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate ten samples of different lengths
> N <- 10000
> X <- list()
> for (kk in 1:8) {
+   rfcn <- list(rnorm, rgamma)[[sample(2, size=1)]]
+   size <- runif(1, min=0.3, max=1)
+   a <- rgamma(1, shape=20, rate=10)
+   b <- rgamma(1, shape=10, rate=10)
+   values <- rfcn(size*N, a, b)
+ 
+   # "Censor" values
+   values[values < 0 | values > 8] <- NA_real_
+ 
+   X[[kk]] <- values
+ }
> 
> # Add 20% missing values
> X <- lapply(X, FUN=function(x) {
+   x[sample(length(x), size=0.20*length(x))] <- NA_real_
+   x
+ })
> 
> # Normalize quantiles
> Xn <- normalizeQuantile(X)
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.73    0.04    0.78 

aroma.light.Rcheck/tests_i386/normalizeQuantileRank.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Normalize quantiles
> Xn <- normalizeQuantile(X)
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.54    0.04    0.57 

aroma.light.Rcheck/tests_x64/normalizeQuantileRank.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Normalize quantiles
> Xn <- normalizeQuantile(X)
> 
> # Plot the data
> layout(matrix(1:2, ncol=1))
> xlim <- range(X, Xn, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   0.82    0.03    0.85 

aroma.light.Rcheck/tests_i386/normalizeQuantileSpline.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Plot the data
> layout(matrix(c(1,0,2:5), ncol=2, byrow=TRUE))
> xlim <- range(X, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> 
> Xn <- normalizeQuantile(X)
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> plotXYCurve(X, Xn, xlim=xlim, main="The three normalized distributions")
> 
> Xn2 <- normalizeQuantileSpline(X, xTarget=Xn[,1], spar=0.99)
> plotDensity(Xn2, lwd=2, xlim=xlim, main="The three normalized distributions")
> plotXYCurve(X, Xn2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   1.65    0.01    1.67 

aroma.light.Rcheck/tests_x64/normalizeQuantileSpline.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate three samples with on average 20% missing values
> N <- 10000
> X <- cbind(rnorm(N, mean=3, sd=1),
+            rnorm(N, mean=4, sd=2),
+            rgamma(N, shape=2, rate=1))
> X[sample(3*N, size=0.20*3*N)] <- NA_real_
> 
> # Plot the data
> layout(matrix(c(1,0,2:5), ncol=2, byrow=TRUE))
> xlim <- range(X, na.rm=TRUE)
> plotDensity(X, lwd=2, xlim=xlim, main="The three original distributions")
> 
> Xn <- normalizeQuantile(X)
> plotDensity(Xn, lwd=2, xlim=xlim, main="The three normalized distributions")
> plotXYCurve(X, Xn, xlim=xlim, main="The three normalized distributions")
> 
> Xn2 <- normalizeQuantileSpline(X, xTarget=Xn[,1], spar=0.99)
> plotDensity(Xn2, lwd=2, xlim=xlim, main="The three normalized distributions")
> plotXYCurve(X, Xn2, xlim=xlim, main="The three normalized distributions")
> 
> proc.time()
   user  system elapsed 
   2.26    0.06    2.32 

aroma.light.Rcheck/tests_i386/normalizeTumorBoost.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> library("R.utils")
Loading required package: R.oo
Loading required package: R.methodsS3
R.methodsS3 v1.7.1 (2016-02-15) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.21.0 (2016-10-30) successfully loaded. See ?R.oo for help.

Attaching package: 'R.oo'

The following objects are masked from 'package:methods':

    getClasses, getMethods

The following objects are masked from 'package:base':

    attach, detach, gc, load, save

R.utils v2.6.0 (2017-11-04) successfully loaded. See ?R.utils for help.

Attaching package: 'R.utils'

The following object is masked from 'package:utils':

    timestamp

The following objects are masked from 'package:base':

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

> 
> # Load data
> pathname <- system.file("data-ex/TumorBoost,fracB,exampleData.Rbin", package="aroma.light")
> data <- loadObject(pathname)
> attachLocally(data)
> pos <- position/1e6
> muN <- genotypeN
> 
> layout(matrix(1:4, ncol=1))
> par(mar=c(2.5,4,0.5,1)+0.1)
> ylim <- c(-0.05, 1.05)
> col <- rep("#999999", length(muN))
> col[muN == 1/2] <- "#000000"
> 
> # Allele B fractions for the normal sample
> plot(pos, betaN, col=col, ylim=ylim)
> 
> # Allele B fractions for the tumor sample
> plot(pos, betaT, col=col, ylim=ylim)
> 
> # TumorBoost w/ naive genotype calls
> betaTN <- normalizeTumorBoost(betaT=betaT, betaN=betaN, preserveScale=FALSE)
> plot(pos, betaTN, col=col, ylim=ylim)
> 
> # TumorBoost w/ external multi-sample genotype calls
> betaTNx <- normalizeTumorBoost(betaT=betaT, betaN=betaN, muN=muN, preserveScale=FALSE)
> plot(pos, betaTNx, col=col, ylim=ylim)
> 
> proc.time()
   user  system elapsed 
   0.87    0.01    0.87 

aroma.light.Rcheck/tests_x64/normalizeTumorBoost.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> library("R.utils")
Loading required package: R.oo
Loading required package: R.methodsS3
R.methodsS3 v1.7.1 (2016-02-15) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.21.0 (2016-10-30) successfully loaded. See ?R.oo for help.

Attaching package: 'R.oo'

The following objects are masked from 'package:methods':

    getClasses, getMethods

The following objects are masked from 'package:base':

    attach, detach, gc, load, save

R.utils v2.6.0 (2017-11-04) successfully loaded. See ?R.utils for help.

Attaching package: 'R.utils'

The following object is masked from 'package:utils':

    timestamp

The following objects are masked from 'package:base':

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

> 
> # Load data
> pathname <- system.file("data-ex/TumorBoost,fracB,exampleData.Rbin", package="aroma.light")
> data <- loadObject(pathname)
> attachLocally(data)
> pos <- position/1e6
> muN <- genotypeN
> 
> layout(matrix(1:4, ncol=1))
> par(mar=c(2.5,4,0.5,1)+0.1)
> ylim <- c(-0.05, 1.05)
> col <- rep("#999999", length(muN))
> col[muN == 1/2] <- "#000000"
> 
> # Allele B fractions for the normal sample
> plot(pos, betaN, col=col, ylim=ylim)
> 
> # Allele B fractions for the tumor sample
> plot(pos, betaT, col=col, ylim=ylim)
> 
> # TumorBoost w/ naive genotype calls
> betaTN <- normalizeTumorBoost(betaT=betaT, betaN=betaN, preserveScale=FALSE)
> plot(pos, betaTN, col=col, ylim=ylim)
> 
> # TumorBoost w/ external multi-sample genotype calls
> betaTNx <- normalizeTumorBoost(betaT=betaT, betaN=betaN, muN=muN, preserveScale=FALSE)
> plot(pos, betaTNx, col=col, ylim=ylim)
> 
> proc.time()
   user  system elapsed 
   0.92    0.03    0.93 

aroma.light.Rcheck/tests_i386/normalizeTumorBoost,flavors.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> library("R.utils")
Loading required package: R.oo
Loading required package: R.methodsS3
R.methodsS3 v1.7.1 (2016-02-15) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.21.0 (2016-10-30) successfully loaded. See ?R.oo for help.

Attaching package: 'R.oo'

The following objects are masked from 'package:methods':

    getClasses, getMethods

The following objects are masked from 'package:base':

    attach, detach, gc, load, save

R.utils v2.6.0 (2017-11-04) successfully loaded. See ?R.utils for help.

Attaching package: 'R.utils'

The following object is masked from 'package:utils':

    timestamp

The following objects are masked from 'package:base':

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

> 
> # Load data
> pathname <- system.file("data-ex/TumorBoost,fracB,exampleData.Rbin", package="aroma.light")
> data <- loadObject(pathname)
> 
> # Drop loci with missing values
> data <- na.omit(data)
> 
> attachLocally(data)
> pos <- position/1e6
> 
> # Call naive genotypes
> muN <- callNaiveGenotypes(betaN)
> 
> # Genotype classes
> isAA <- (muN == 0)
> isAB <- (muN == 1/2)
> isBB <- (muN == 1)
> 
> # Sanity checks
> stopifnot(all(muN[isAA] == 0))
> stopifnot(all(muN[isAB] == 1/2))
> stopifnot(all(muN[isBB] == 1))
> 
> # TumorBoost normalization with different flavors
> betaTNs <- list()
> for (flavor in c("v1", "v2", "v3", "v4")) {
+   betaTN <- normalizeTumorBoost(betaT=betaT, betaN=betaN, preserveScale=FALSE, flavor=flavor)
+ 
+   # Assert that no non-finite values are introduced
+   stopifnot(all(is.finite(betaTN)))
+ 
+   # Assert that nothing is flipped
+   stopifnot(all(betaTN[isAA] < 1/2))
+   stopifnot(all(betaTN[isBB] > 1/2))
+ 
+   betaTNs[[flavor]] <- betaTN
+ }
> 
> # Plot
> layout(matrix(1:4, ncol=1))
> par(mar=c(2.5,4,0.5,1)+0.1)
> ylim <- c(-0.05, 1.05)
> col <- rep("#999999", length(muN))
> col[muN == 1/2] <- "#000000"
> for (flavor in names(betaTNs)) {
+   betaTN <- betaTNs[[flavor]]
+   ylab <- sprintf("betaTN[%s]", flavor)
+   plot(pos, betaTN, col=col, ylim=ylim, ylab=ylab)
+ }
> 
> proc.time()
   user  system elapsed 
   0.95    0.07    1.01 

aroma.light.Rcheck/tests_x64/normalizeTumorBoost,flavors.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> library("R.utils")
Loading required package: R.oo
Loading required package: R.methodsS3
R.methodsS3 v1.7.1 (2016-02-15) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.21.0 (2016-10-30) successfully loaded. See ?R.oo for help.

Attaching package: 'R.oo'

The following objects are masked from 'package:methods':

    getClasses, getMethods

The following objects are masked from 'package:base':

    attach, detach, gc, load, save

R.utils v2.6.0 (2017-11-04) successfully loaded. See ?R.utils for help.

Attaching package: 'R.utils'

The following object is masked from 'package:utils':

    timestamp

The following objects are masked from 'package:base':

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

> 
> # Load data
> pathname <- system.file("data-ex/TumorBoost,fracB,exampleData.Rbin", package="aroma.light")
> data <- loadObject(pathname)
> 
> # Drop loci with missing values
> data <- na.omit(data)
> 
> attachLocally(data)
> pos <- position/1e6
> 
> # Call naive genotypes
> muN <- callNaiveGenotypes(betaN)
> 
> # Genotype classes
> isAA <- (muN == 0)
> isAB <- (muN == 1/2)
> isBB <- (muN == 1)
> 
> # Sanity checks
> stopifnot(all(muN[isAA] == 0))
> stopifnot(all(muN[isAB] == 1/2))
> stopifnot(all(muN[isBB] == 1))
> 
> # TumorBoost normalization with different flavors
> betaTNs <- list()
> for (flavor in c("v1", "v2", "v3", "v4")) {
+   betaTN <- normalizeTumorBoost(betaT=betaT, betaN=betaN, preserveScale=FALSE, flavor=flavor)
+ 
+   # Assert that no non-finite values are introduced
+   stopifnot(all(is.finite(betaTN)))
+ 
+   # Assert that nothing is flipped
+   stopifnot(all(betaTN[isAA] < 1/2))
+   stopifnot(all(betaTN[isBB] > 1/2))
+ 
+   betaTNs[[flavor]] <- betaTN
+ }
> 
> # Plot
> layout(matrix(1:4, ncol=1))
> par(mar=c(2.5,4,0.5,1)+0.1)
> ylim <- c(-0.05, 1.05)
> col <- rep("#999999", length(muN))
> col[muN == 1/2] <- "#000000"
> for (flavor in names(betaTNs)) {
+   betaTN <- betaTNs[[flavor]]
+   ylab <- sprintf("betaTN[%s]", flavor)
+   plot(pos, betaTN, col=col, ylim=ylim, ylab=ylab)
+ }
> 
> proc.time()
   user  system elapsed 
   1.07    0.07    1.15 

aroma.light.Rcheck/tests_i386/robustSmoothSpline.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> data(cars)
> attach(cars)
> plot(speed, dist, main = "data(cars)  &  robust smoothing splines")
> 
> # Fit a smoothing spline using L_2 norm
> cars.spl <- smooth.spline(speed, dist)
> lines(cars.spl, col = "blue")
> 
> # Fit a smoothing spline using L_1 norm
> cars.rspl <- robustSmoothSpline(speed, dist)
Warning message:
In stats.smooth.spline(g$x, g$yin, w = w, ..., tol = tol) :
  smoothing parameter value too large
setting df = 1  __use with care!__
> lines(cars.rspl, col = "red")
> 
> # Fit a smoothing spline using L_2 norm with 10 degrees of freedom
> lines(smooth.spline(speed, dist, df=10), lty=2, col = "blue")
> 
> # Fit a smoothing spline using L_1 norm with 10 degrees of freedom
> lines(robustSmoothSpline(speed, dist, df=10), lty=2, col = "red")
> 
> legend(5,120, c(
+     paste("smooth.spline [C.V.] => df =",round(cars.spl$df,1)),
+     paste("robustSmoothSpline [C.V.] => df =",round(cars.rspl$df,1)),
+     "standard with s( * , df = 10)", "robust with s( * , df = 10)"
+   ), col = c("blue","red","blue","red"), lty = c(1,1,2,2), bg='bisque')
> 
> proc.time()
   user  system elapsed 
   0.60    0.06    0.65 

aroma.light.Rcheck/tests_x64/robustSmoothSpline.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> data(cars)
> attach(cars)
> plot(speed, dist, main = "data(cars)  &  robust smoothing splines")
> 
> # Fit a smoothing spline using L_2 norm
> cars.spl <- smooth.spline(speed, dist)
> lines(cars.spl, col = "blue")
> 
> # Fit a smoothing spline using L_1 norm
> cars.rspl <- robustSmoothSpline(speed, dist)
> lines(cars.rspl, col = "red")
> 
> # Fit a smoothing spline using L_2 norm with 10 degrees of freedom
> lines(smooth.spline(speed, dist, df=10), lty=2, col = "blue")
> 
> # Fit a smoothing spline using L_1 norm with 10 degrees of freedom
> lines(robustSmoothSpline(speed, dist, df=10), lty=2, col = "red")
> 
> legend(5,120, c(
+     paste("smooth.spline [C.V.] => df =",round(cars.spl$df,1)),
+     paste("robustSmoothSpline [C.V.] => df =",round(cars.rspl$df,1)),
+     "standard with s( * , df = 10)", "robust with s( * , df = 10)"
+   ), col = c("blue","red","blue","red"), lty = c(1,1,2,2), bg='bisque')
> 
> proc.time()
   user  system elapsed 
   0.78    0.01    0.78 

aroma.light.Rcheck/tests_i386/rowAverages.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> X <- matrix(1:30, nrow=5L, ncol=6L)
> mu <- rowMeans(X)
> sd <- apply(X, MARGIN=1L, FUN=sd)
> 
> y <- rowAverages(X)
> stopifnot(all(y == mu))
> stopifnot(all(attr(y,"deviance") == sd))
> stopifnot(all(attr(y,"df") == ncol(X)))
> 
> proc.time()
   user  system elapsed 
   0.40    0.04    0.43 

aroma.light.Rcheck/tests_x64/rowAverages.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> X <- matrix(1:30, nrow=5L, ncol=6L)
> mu <- rowMeans(X)
> sd <- apply(X, MARGIN=1L, FUN=sd)
> 
> y <- rowAverages(X)
> stopifnot(all(y == mu))
> stopifnot(all(attr(y,"deviance") == sd))
> stopifnot(all(attr(y,"df") == ncol(X)))
> 
> proc.time()
   user  system elapsed 
   0.54    0.04    0.57 

aroma.light.Rcheck/tests_i386/sampleCorrelations.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate 20000 genes with 10 observations each
> X <- matrix(rnorm(n=20000), ncol=10)
> 
> # Calculate the correlation for 5000 random gene pairs
> cor <- sampleCorrelations(X, npairs=5000)
> print(summary(cor))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-0.902409 -0.251713 -0.003641 -0.004366  0.230668  0.920603 
> 
> 
> proc.time()
   user  system elapsed 
   0.68    0.06    0.73 

aroma.light.Rcheck/tests_x64/sampleCorrelations.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # Simulate 20000 genes with 10 observations each
> X <- matrix(rnorm(n=20000), ncol=10)
> 
> # Calculate the correlation for 5000 random gene pairs
> cor <- sampleCorrelations(X, npairs=5000)
> print(summary(cor))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-0.918214 -0.238918  0.002590  0.002827  0.245609  0.872033 
> 
> 
> proc.time()
   user  system elapsed 
   0.96    0.01    0.98 

aroma.light.Rcheck/tests_i386/sampleTuples.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pairs <- sampleTuples(1:10, size=5, length=2)
> print(pairs)
     [,1] [,2]
[1,]    1    5
[2,]    5    8
[3,]    4    1
[4,]    4    6
[5,]    8    1
> 
> triples <- sampleTuples(1:10, size=5, length=3)
> print(triples)
     [,1] [,2] [,3]
[1,]    5    6    1
[2,]    3    8    4
[3,]    7   10    5
[4,]    3    1    2
[5,]    7    8    5
> 
> # Allow tuples with repeated elements
> quadruples <- sampleTuples(1:3, size=5, length=4, replace=TRUE)
> print(quadruples)
     [,1] [,2] [,3] [,4]
[1,]    1    1    2    1
[2,]    1    1    3    3
[3,]    3    2    1    2
[4,]    3    1    3    3
[5,]    1    3    1    1
> 
> proc.time()
   user  system elapsed 
   0.56    0.00    0.56 

aroma.light.Rcheck/tests_x64/sampleTuples.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> pairs <- sampleTuples(1:10, size=5, length=2)
> print(pairs)
     [,1] [,2]
[1,]    1    4
[2,]    7   10
[3,]    6   10
[4,]   10    8
[5,]    1    4
> 
> triples <- sampleTuples(1:10, size=5, length=3)
> print(triples)
     [,1] [,2] [,3]
[1,]    1    6    8
[2,]    2    5    4
[3,]    5    3    2
[4,]    7    3    4
[5,]    5    1    8
> 
> # Allow tuples with repeated elements
> quadruples <- sampleTuples(1:3, size=5, length=4, replace=TRUE)
> print(quadruples)
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    3    3    2    3
[3,]    3    1    2    3
[4,]    3    2    1    1
[5,]    3    1    1    1
> 
> proc.time()
   user  system elapsed 
   0.42    0.07    0.50 

aroma.light.Rcheck/tests_i386/wpca.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ # -------------------------------------------------------------
+ # A first example
+ # -------------------------------------------------------------
+ # Simulate data from the model y <- a + bx + eps(bx)
+ x <- rexp(1000)
+ a <- c(2,15,3)
+ b <- c(2,3,15)
+ bx <- outer(b,x)
+ eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
+ y <- a + bx + eps
+ y <- t(y)
+ 
+ # Add some outliers by permuting the dimensions for 1/3 of the observations
+ idx <- sample(1:nrow(y), size=1/3*nrow(y))
+ y[idx,] <- y[idx,c(2,3,1)]
+ 
+ # Down-weight the outliers W times to demonstrate how weights are used
+ W <- 10
+ 
+ # Plot the data with fitted lines at four different view points
+ N <- 4
+ theta <- seq(0,180,length.out=N)
+ phi <- rep(30, length.out=N)
+ 
+ # Use a different color for each set of weights
+ col <- topo.colors(W)
+ 
+ opar <- par(mar=c(1,1,1,1)+0.1)
+ layout(matrix(1:N, nrow=2, byrow=TRUE))
+ for (kk in seq(theta)) {
+   # Plot the data
+   plot3d(y, theta=theta[kk], phi=phi[kk])
+ 
+   # First, same weights for all observations
+   w <- rep(1, length=nrow(y))
+ 
+   for (ww in 1:W) {
+     # Fit a line using IWPCA through data
+     fit <- wpca(y, w=w, swapDirections=TRUE)
+ 
+     # Get the first principal component
+     ymid <- fit$xMean
+     d0 <- apply(y, MARGIN=2, FUN=min) - ymid
+     d1 <- apply(y, MARGIN=2, FUN=max) - ymid
+     b <- fit$vt[1,]
+     y0 <- -b * max(abs(d0))
+     y1 <-  b * max(abs(d1))
+     yline <- matrix(c(y0,y1), nrow=length(b), ncol=2)
+     yline <- yline + ymid
+ 
+     points3d(t(ymid), col=col)
+     lines3d(t(yline), col=col)
+ 
+     # Down-weight outliers only, because here we know which they are.
+     w[idx] <- w[idx]/2
+   }
+ 
+   # Highlight the last one
+   lines3d(t(yline), col="red", lwd=3)
+ }
+ 
+ par(opar)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.43    0.03    0.45 

aroma.light.Rcheck/tests_x64/wpca.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> for (zzz in 0) {
+ 
+ # This example requires plot3d() in R.basic [http://www.braju.com/R/]
+ if (!require(pkgName <- "R.basic", character.only=TRUE)) break
+ 
+ # -------------------------------------------------------------
+ # A first example
+ # -------------------------------------------------------------
+ # Simulate data from the model y <- a + bx + eps(bx)
+ x <- rexp(1000)
+ a <- c(2,15,3)
+ b <- c(2,3,15)
+ bx <- outer(b,x)
+ eps <- apply(bx, MARGIN=2, FUN=function(x) rnorm(length(x), mean=0, sd=0.1*x))
+ y <- a + bx + eps
+ y <- t(y)
+ 
+ # Add some outliers by permuting the dimensions for 1/3 of the observations
+ idx <- sample(1:nrow(y), size=1/3*nrow(y))
+ y[idx,] <- y[idx,c(2,3,1)]
+ 
+ # Down-weight the outliers W times to demonstrate how weights are used
+ W <- 10
+ 
+ # Plot the data with fitted lines at four different view points
+ N <- 4
+ theta <- seq(0,180,length.out=N)
+ phi <- rep(30, length.out=N)
+ 
+ # Use a different color for each set of weights
+ col <- topo.colors(W)
+ 
+ opar <- par(mar=c(1,1,1,1)+0.1)
+ layout(matrix(1:N, nrow=2, byrow=TRUE))
+ for (kk in seq(theta)) {
+   # Plot the data
+   plot3d(y, theta=theta[kk], phi=phi[kk])
+ 
+   # First, same weights for all observations
+   w <- rep(1, length=nrow(y))
+ 
+   for (ww in 1:W) {
+     # Fit a line using IWPCA through data
+     fit <- wpca(y, w=w, swapDirections=TRUE)
+ 
+     # Get the first principal component
+     ymid <- fit$xMean
+     d0 <- apply(y, MARGIN=2, FUN=min) - ymid
+     d1 <- apply(y, MARGIN=2, FUN=max) - ymid
+     b <- fit$vt[1,]
+     y0 <- -b * max(abs(d0))
+     y1 <-  b * max(abs(d1))
+     yline <- matrix(c(y0,y1), nrow=length(b), ncol=2)
+     yline <- yline + ymid
+ 
+     points3d(t(ymid), col=col)
+     lines3d(t(yline), col=col)
+ 
+     # Down-weight outliers only, because here we know which they are.
+     w[idx] <- w[idx]/2
+   }
+ 
+   # Highlight the last one
+   lines3d(t(yline), col="red", lwd=3)
+ }
+ 
+ par(opar)
+ 
+ } # for (zzz in 0)
Loading required package: R.basic
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'R.basic'
> rm(zzz)
> 
> proc.time()
   user  system elapsed 
   0.51    0.03    0.53 

aroma.light.Rcheck/tests_i386/wpca2.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # -------------------------------------------------------------
> # A second example
> # -------------------------------------------------------------
> # Data
> x <- c(1,2,3,4,5)
> y <- c(2,4,3,3,6)
> 
> opar <- par(bty="L")
> opalette <- palette(c("blue", "red", "black"))
> xlim <- ylim <- c(0,6)
> 
> # Plot the data and the center mass
> plot(x,y, pch=16, cex=1.5, xlim=xlim, ylim=ylim)
> points(mean(x), mean(y), cex=2, lwd=2, col="blue")
> 
> 
> # Linear regression y ˜ x
> fit <- lm(y ˜ x)
> abline(fit, lty=1, col=1)
> 
> # Linear regression y ˜ x through without intercept
> fit <- lm(y ˜ x - 1)
> abline(fit, lty=2, col=1)
> 
> 
> # Linear regression x ˜ y
> fit <- lm(x ˜ y)
> c <- coefficients(fit)
> b <- 1/c[2]
> a <- -b*c[1]
> abline(a=a, b=b, lty=1, col=2)
> 
> # Linear regression x ˜ y through without intercept
> fit <- lm(x ˜ y - 1)
> b <- 1/coefficients(fit)
> abline(a=0, b=b, lty=2, col=2)
> 
> 
> # Orthogonal linear "regression"
> fit <- wpca(cbind(x,y))
> 
> b <- fit$vt[1,2]/fit$vt[1,1]
> a <- fit$xMean[2]-b*fit$xMean[1]
> abline(a=a, b=b, lwd=2, col=3)
> 
> # Orthogonal linear "regression" without intercept
> fit <- wpca(cbind(x,y), center=FALSE)
> b <- fit$vt[1,2]/fit$vt[1,1]
> a <- fit$xMean[2]-b*fit$xMean[1]
> abline(a=a, b=b, lty=2, lwd=2, col=3)
> 
> legend(xlim[1],ylim[2], legend=c("lm(y˜x)", "lm(y˜x-1)", "lm(x˜y)",
+           "lm(x˜y-1)", "pca", "pca w/o intercept"), lty=rep(1:2,3),
+                      lwd=rep(c(1,1,2),each=2), col=rep(1:3,each=2))
> 
> palette(opalette)
> par(opar)
> 
> proc.time()
   user  system elapsed 
   0.65    0.04    0.68 

aroma.light.Rcheck/tests_x64/wpca2.matrix.Rout


R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library("aroma.light")
aroma.light v3.8.0 (2017-04-14) successfully loaded. See ?aroma.light for help.
> 
> # -------------------------------------------------------------
> # A second example
> # -------------------------------------------------------------
> # Data
> x <- c(1,2,3,4,5)
> y <- c(2,4,3,3,6)
> 
> opar <- par(bty="L")
> opalette <- palette(c("blue", "red", "black"))
> xlim <- ylim <- c(0,6)
> 
> # Plot the data and the center mass
> plot(x,y, pch=16, cex=1.5, xlim=xlim, ylim=ylim)
> points(mean(x), mean(y), cex=2, lwd=2, col="blue")
> 
> 
> # Linear regression y ˜ x
> fit <- lm(y ˜ x)
> abline(fit, lty=1, col=1)
> 
> # Linear regression y ˜ x through without intercept
> fit <- lm(y ˜ x - 1)
> abline(fit, lty=2, col=1)
> 
> 
> # Linear regression x ˜ y
> fit <- lm(x ˜ y)
> c <- coefficients(fit)
> b <- 1/c[2]
> a <- -b*c[1]
> abline(a=a, b=b, lty=1, col=2)
> 
> # Linear regression x ˜ y through without intercept
> fit <- lm(x ˜ y - 1)
> b <- 1/coefficients(fit)
> abline(a=0, b=b, lty=2, col=2)
> 
> 
> # Orthogonal linear "regression"
> fit <- wpca(cbind(x,y))
> 
> b <- fit$vt[1,2]/fit$vt[1,1]
> a <- fit$xMean[2]-b*fit$xMean[1]
> abline(a=a, b=b, lwd=2, col=3)
> 
> # Orthogonal linear "regression" without intercept
> fit <- wpca(cbind(x,y), center=FALSE)
> b <- fit$vt[1,2]/fit$vt[1,1]
> a <- fit$xMean[2]-b*fit$xMean[1]
> abline(a=a, b=b, lty=2, lwd=2, col=3)
> 
> legend(xlim[1],ylim[2], legend=c("lm(y˜x)", "lm(y˜x-1)", "lm(x˜y)",
+           "lm(x˜y-1)", "pca", "pca w/o intercept"), lty=rep(1:2,3),
+                      lwd=rep(c(1,1,2),each=2), col=rep(1:3,each=2))
> 
> palette(opalette)
> par(opar)
> 
> proc.time()
   user  system elapsed 
   0.64    0.07    0.70 

Example timings

aroma.light.Rcheck/examples_i386/aroma.light-Ex.timings

nameusersystemelapsed
backtransformAffine0.030.000.03
backtransformPrincipalCurve0.440.000.86
calibrateMultiscan000
callNaiveGenotypes0.720.000.72
distanceBetweenLines0.080.000.07
findPeaksAndValleys0.040.000.05
fitPrincipalCurve0.530.000.53
fitXYCurve0.050.000.05
iwpca0.060.000.06
likelihood.smooth.spline0.130.000.13
medianPolish000
normalizeAffine7.120.027.14
normalizeCurveFit7.220.037.25
normalizeDifferencesToAverage0.240.000.23
normalizeFragmentLength0.780.010.80
normalizeQuantileRank0.230.000.23
normalizeQuantileRank.matrix0.060.000.07
normalizeQuantileSpline1.160.001.15
normalizeTumorBoost0.310.020.33
robustSmoothSpline0.070.020.08
sampleCorrelations0.240.000.24
sampleTuples0.010.000.01
wpca0.110.000.11

aroma.light.Rcheck/examples_x64/aroma.light-Ex.timings

nameusersystemelapsed
backtransformAffine0.030.000.03
backtransformPrincipalCurve0.470.000.47
calibrateMultiscan000
callNaiveGenotypes0.780.000.78
distanceBetweenLines0.090.000.09
findPeaksAndValleys0.030.000.04
fitPrincipalCurve0.640.000.64
fitXYCurve0.050.000.04
iwpca0.060.000.07
likelihood.smooth.spline0.130.010.14
medianPolish0.010.000.42
normalizeAffine7.440.027.45
normalizeCurveFit7.310.037.34
normalizeDifferencesToAverage0.210.020.22
normalizeFragmentLength0.730.000.74
normalizeQuantileRank0.20.00.2
normalizeQuantileRank.matrix0.050.000.05
normalizeQuantileSpline1.220.001.22
normalizeTumorBoost0.280.010.29
robustSmoothSpline0.110.000.11
sampleCorrelations0.340.000.35
sampleTuples0.020.000.01
wpca0.110.000.11