## Welcome

SOLAR-Eclipse is an extensive, flexible software package for genetic variance components analysis, including linkage analysis, quantitative genetic analysis, SNP association analysis (QTN and QTLD), and covariate screening. Operations are included for calculation of marker-specific or multipoint identity-by-descent (IBD) matrices in pedigrees of arbitrary size and complexity, and for linkage analysis of multiple quantitative traits and/or discrete traits which may involve multiple loci (oligogenic analysis), dominance effects, household effects, and interactions. Additional features include functionality for mega and meta-genetic analyses where data from diverse cohorts can be pooled to improve statistical significance.

**** New in version 8.5.1 **** 2019-10-24

Further speed improvements in all SOLAR operations. Stable GPU version of fphi and gwas. Experimental version of gwas screening - uses Wald test to improve the speed of the association analyses. This method is primarily intended as a screening tool for whole-genome or imputed genotype analyses. The outcome of the test could be used to reduce the number of potential genotypes for full maximum LRT evaluation.

**** New in version 8.1.1 **** 2015-11-20

1. Speed improvements in all SOLAR operations thanks to improved compiler optimization. Polygenic runs 1.73 times faster compared with previous official version 7.6.4. The biggest improvement is in C++ intensive mathmatrix operations based on Eigen; as a result of this and other changes "fphi -p" is now 25 times faster than in version 8.0.6.

2. The implentation of fphi p value estimation, working since 8.0.6, is made cleaner and slightly faster. The use of a new mathmatrix operation PermuteY which eliminates the need to create an intermediate shuffled vector for each column of the permuted matrix (as had been done in 8.0.6). Far fewer temporary matrices are created. These changes had only a small effect on speed compared with the improved compiler optimizations.

3. fphi p value estimation now uses better random numbers to shuffle the Y matrix: Mersenne Twister mt19937 which has a period of 2^19937. AFAIK this is the best quality fast random generator available, and it is included in the recent C++11 standard so is widely available.

4. fphi p value calculation numerator was off by one. Now p values from "fphi -p" are slightly smaller (better).

5. Other changes to fphi: Tcl code is cleaned up with much junk removed, variables given meaningful names, obsolete -method argument removed, -testonly is now called -indicator.

6. option ShuffleReseeding controls how the mt19937 random number generator used for matrix shuffling is seeded. The default value is 1 which means the generator is reseeded to the default value 5489u at the beginning of each matrix shuffle operation. This gives consistent p value results every time, and the most comparable results when the same sample is used across a range of models. The options are:

1...seeded on every shuffle to 5489u for consistent results (DEFAULT)

0...seeded first shuffle to 5489u, then free running

-1...seeded every shuffle to time() for purely stochastic results

-2...seeded first shuffle to time(), then free running

Other values: seed to this value at beginning of each shuffle

7. Errors in test models in mga (either the regular test model or the interaction test model) would cause mga to exit. Now such errors are reported to the screen and a line with SNP name but blank results is written to the output file.

8. option MatrixNumberFormat controls the formatting precision of numbers output by matrix operations such as "show". The default of 15 eliminates long unrounded numbers such as 0.4999999999999999.

9. This version is the first ever to have a public source code release, along with the usual binary releases for Linux, Mac, and Microsoft Windows. The binary releases are fully tested and replace Official Version 7.6.4 on the general download links at http://solar.txbiomedgenetics.org. Due to the now distributed nature of SOLAR Eclipse development, this release is not called Official but instead General as in intended-for-general-use. An Official version with coordinated updates from all developers may be available soon.

**** New in version 8.0.4 **** 2015-05-26

1. fphi is now producing reasonable approximations of heritability. Several implementation errors from 8.0.3 had to be corrected to make this possible, and the procedure now uses "Method 1" consistently. See "help fphi" for more information on FPHI methods 1 and 2.

2. "option ResetRandom 1" will reset the random number sequence used during maximization to its initial starting value at the beginning of maximization for the current model. This is for experimental use in solving convergence inconsistencies.

3. fphi has a -method2 option which attempts to use "Method 2". This does not appear to be working yet.

4. The first value returned by fphi is now correctly labeled an "indicator variable." The actual test-statistic is still being implemented. The primary significance of the indicator variable is that heritability estimation is impossible if it is non-positive.

5. evdinx now loads the X matrix without a leading column of 1's as as required for Method 1. To get the column of 1's as required for Method 2, give the command "evdinx -method2", or simply use the command "fphi -method2" which takes care of this.

6. fphi now allows the direct specification of X, Y, and Z matrices. If all three are specified, it is not necessary to specify trait and covariates, and "evdout" is not invoked.

**** New in version 8.0.3 **** 2015-04-24

1. New procedure fphi calculates a test statistic and fast estimated h2r. The model trait and covariates must have already been chosen. If the -testonly option is specified, only the test-statistic is returned and h2r is not estimated.

2. Matrix operations "ols" and "solve" now have X and Y arguments reversed as is common practice (octave, matlab, R). So now the commands are "ols y x" and "solve y x" corresponding to the standard description "regress y on x" where Y is the dependent variable and X is the design matrix.

3. The diagonal command now does one of two things: it returns a vector when given a rectangular matrix, or (new) it returns a "diagonal matrix" when given a vector. A "diagonal matrix" is a square matrix with non-zero values only on the diagonal. A "rectangular matrix" has more than 1 rows and more than 1 columns. A vector has either 1 row or 1 column. SOLAR does not keep track of which matrices are diagonal.

4. New dinverse command does a fast matrix inversion on a diagonal matrix. The matrix must be a diagonal matrix and dinverse does not check this.

5. The plus and minus commands now permit one or two scalar arguments so you can add or subtract: 1) matrix and matrix, 2) scalar and matrix, and 3) scalar and scalar. The times command already allowed scalars like this.

**** New in version 8.0.2 **** 2015-03-20

1. evdout is entirely redesigned to output the just the EVD transformed variables, unless the -evectors option is used. The transformed variables are writted to evddata.out.

2. New procedures evdinx (reads in X matrix), evdiny (reads in Y matrix), and evdinev (reads in eigenvectors matrix) added to read EVD data written by evdout into matrixes.

3. evdmat is obsoleted. Use evdout then evdinx, evdiny, and/or evdinev. Memory-to-matrix commands evdmatx, evdmaty, and evdmatev were designed but not finished in time for version 8.0.2.

**** New in version 8.0.1 **** 2015-03-03

1. Interactive and scriptable matrix algebra is now supported. Commands include new, load, show, row, col, diagonal, rows, cols, times, plus minus, transpose, inverse, ols, solve, evalues, evectors, mean, min and max. See "help mathmatrix" for details. MathMatrix objects are different from the sample relationship matrixes used during maximization. They are implemented in C++ using Eigen.

2. evdout will output phi2 eigenvectors and eigenvalues as used by SOLAR for EVD2 maximization. See 'help evdout' for details on evdout, evdin, and evdmat.

3. evdin will read in the matrix file(s) created by evdout and create MathMatrix object(s) representing them.

4. evdmat creates MathMatrix object(s) directly from the current phi2 eigenvectors without writing or reading a file. See 'help evdmat' for details.

5. zscoring using a command like "define zt = zscore_trait" generated spurious messages about zscores being deleted. These messages had no useful meaning and have been removed. The zscoring feature works fine.

**** New in version 8.0.0 **** 2014-12-31

1. Version 8.0.0 is compiled with 64 bit memory model (linux releases only) to enable handling larger numbers of traits, parameters, and/or individuals per pedigree. However, memory beyond 2 Gb can not usually be allocated because contiguous memory is currently required. That may be addressed in future updates. However 64 bit compilation is a necessary first step, it sometimes helps, and also failed memory allocation is now usually reported with an error message rather than causing an unexplained crash as usually happened before. Maximization is about 2% faster for all model types.

**** New in version 7.6.6 **** 2014-12-29

1. polygenic -residinor fixed, was mistakenly using previous null output.

**** New in version 7.6.5 **** 2014-12-9

1. polygenic -residinor computes a residual trait from the final sporadic model and inormalizes it as the final trait to determine heritability.

2. restore_phen restores the original phenotypes file after running polygenic -residinor

**** New in version 7.5.9 **** 2014-07-01

1. Up to 20000 mztwins are now supported.

2. "load pedigree" will use 5 columns for the mztwin id in the pedindex if more than 999 mztwin groups are found in the pedigree. Otherwise, it will use only 3 columns, to ensure compatibility with previous checksums stored in matrixes.

**** New in version 7.5.8 **** 2014-07-01

1. Up to 15000 mztwins are now supported (7500 pairs of twins).

2. CSV matrixes can now be loaded even if they have ID's not in the current pedigree. Warnings are displayed and written to a file named matrix.load.err, but in the end the matrix is loaded and may be useable.

**** New in version 7.4.4 **** 2014-04-11

1. polygenic now has option -testcovar, to test a single covariate. All other covariates are fixed and untested. The tested covariate is not removed from the final model in any case. The default probability level for declared significance is changed to 0.05. The proportion of variance is reported only for the tested covariate.

**** New in version 7.4.1 **** 2014-03-12

1. A new session option ExpNotation has been added, to force output in exponential notation (such as -1.004e-4) in specific cases where needed. Normally, many commands such as mga output in fixed point notation as long as there are a few digits shown, and then they switch to exponential for tiny values which would otherwise be reported as zero. So if a value is shown as 0.00000 by mga it must actually be zero. But sometimes people wonder if that is actually correct. So the ExpNotation option has been added to force output of all numbers in exponential notation, so there can be no doubt. Currently this option only affects the output of mga, but it may be applied to other commands in the future. It defaults to 0 (zero) meaning to use the default auto mode, and is set to 1 to force exponential:

option ExpNotation 1

This option remains in effect during a single session of SOLAR. It is not saved to models, and will return to default for subsequent or concurrent sessions of SOLAR.

**** New in version 7.3.5 **** 2014-01-17

polyclass function -maxsnp option was added to perform multi-pedigree association analysis. The -intrait functionality is used for data normalization.

Tawes Ct., Catonsville, MD 21228 (map/directions) | phone: 410-402-6110 | email: PKochunov@mprc.umaryland.edu