# What's new in Analytica 4.0?

This page lists some of the enhancements that are (or will be) new to Release 4.0. For a complete listing, or for info on bugs fixed, please consult the Enterprize Wizard bug base. (I am not listing bug fixes here -- there are a lot).

## Contents

## Analytica Application Features

- Recovery of Unsaved Changes

- Analytica releases CPU when waiting.

No longer takes 100% of CPU when in focus.

- DLLs eliminated.

The MathFunctions, ArrayFunctions and FinancialFunctions DLLs have been eliminated. The contained functions have been moved into the engine.

- Unix new-line standard, LF, now recognized in model files.

This has sometimes an issue when models are emailed or placed on a Unix server.

- Multi-monitor support

- Internal exception-based handling of out-of-memory conditions.

Should cut down on the crashes that result when memory is exhausted during the evaluation of a model.

- Character set (for ascii>127) has been changed to be a Windows standard, rather than a Mac standard. This allows foreign language characters (with accents, etc) to be copy/pasted from other applications.

- NaN change & warning.

0*NaN and 0*INF issue a warning and return NaN, consistent with IEEE standard 754. Earlier releases of Analytica returned 0.

- Maximum number of user-defined objects increased

Analytica 4.0 allows more than 31900 user-defined objects, approximately double that in Analytica 3.1.2.

## New Functions

- Library (re)organization

- ArgMax, ArgMin, PositionInIndex, SubIndex, LinearInterp, StepInterp and CubicInterp have all been moved to the Array library (formerly in Special).

- Excel data offset option
- DateAdd( )
- DatePart( )
- MakeDate( )

Returns the PDF or CDF (or Prob Mass, cum prob mass for discrete results) as an array value. Previously, these were only available in the GUI, but couldn't be used directly by the model.

- New Random number functions

- Random( ), see ER 4977
- Shuffle( ), see ER 4978

- RunConsoleProcess( )
- GetRegistryValue( )
- ShowPdfFile( )

- Argmin(X,I)
- PositionInIndex(A,u,I)
- Slice assignment, e.g. A[I=x] := b
- Position operator: @I, A[@I=x]
- Subscript notation is now an operator and can be used after any expression, e.g., (A+B)[I=x]
- IndexesOf(A)

- Special Functions

- TypeOf(X): Returns the type of each atom as a string.
- VarTerm(X)

- Optimizer Functions

- Misc syntax

- Version-gated comments

## Enhanced Functions

Many functions have been extended, in some cases accepting additional parameters, and in others, increased scope.

Previously statistical functions operated only over the Run index and on the sampled value. They have now been generalized so that they can be applied to any index in context mode, eliminating the need for the "Data Statistics Library" module. They've also been extended to support Importance Weighting.

- Mean, SDeviation, Variance, Skewness, Kurtosis
- Frequency, Probability, GetFract
- Correlation
- RankCorrel

Now computes correlation using the mid rank by default (rather than lower-rank).

- Array Functions

Allows selection of mid, lower, or upper rank (i.e., rank number in the event of a tie)

Optional fifth index parameter: Area(R,I,X1,X2,J)

Allows selection of the value column. Abstracting over that parameter allows "fact-tables" (as they are called in the OLAP community) to be transformed.

- ArgMin, ArgMax: Can now perform the min/max over multiple indexes, and can return either index value or index position.

- Truncate(dist,min,max) : [ER 5556] Now accepts min and/or max threshold parameters (both optional, but at least one required), and preserves rank correlation. Note (for docs) that 2nd parameter has been renamed.
- LogNormal( ) : [ER 5928] Can be optionally specified using arithmetic mean and/or arithmetic stddev.
- Uniform( ): optional integer parameter, over parameter, and singleSampMethod parameter.
- Over parameter added to many of the distribution functions, used to specify dimensions over which independent samples should be returned.

## New Engine Features

- Date and Currency Formatting

- Custom date formats on output
- Use of international date settings on output
- Extensions to currency formatting, including Euro.
- Additional options for formatting of negative numbers.

- Ellipsis declaration syntax
- NonNegative qualifier
- ContextSamp qualifier
- Optional indexes
- Default values for optional parameters
- A parameter declared as IndexType evaluates to its index values in a value context (relevant when a variable with a self-index is passed as an index parameter).

- Automatic, discrete, and continuous domain types. This is then picked up PDF computations to determine whether a PDF or ProbMass graph (or cum versions) are appropriate for numeric-valued samples.
- Index-valued domain. The domain can obtain its values from a different index. The evaluated index values become the index values for the variable.

Although this remains a bit of a hidden feature, it is possible to assign a different weight to each sample (e.g., weight indexed by Run), which is then utilized transparently by statistics functions and views. Two important uses of this are sampling from distribution other than the target distribution, and a poor-man's version of posterior conditioning. The system variable SampleWeight specifies the weighting.

- Support for new SQL Server 2005 data types (DbTable, etc)

- Function improvements

- Hierarchical beta, geometric and hypergeometric distributions are much faster.
- Range of parameter for Gamma, Binomial distributions extended, as well as for the GammaIInv function.
- MdTable. Can be used to transform a fact table (in which the first N columns specify coordinates, and the remaining M columns specify "measures"). Also, the conglomeration parameter has been generalized -- it is possible to conglomerate using a user-defined function.
- Uniform() with an optional
**integer:true**parameter generates uniformly distributed integers.

- AnalyticaEdition
- SampleWeight
- IsSampleEvalMode

## Optimizer Enhancements

- Upgrade to Frontline 7.0
- The new frontline comes with some licensing restrictions that were not present previously. These are detailed at Analytica Optimizer Licensing.
- Ability to add-on external solver engines (Knitro, Mosek, Xpress, etc).
- Function SolverInfo can be used to retrieve information about a solver engine, such search control settings and their allowed ranges, or any of the parameters defining an LP/QP/NLP (e.g., objcoef, Q, lhs, sense, rhs, maximize, lb, ub, engine).
- QpDefine has support for quadratic constraints.
- Function LpFindIIS can be used to relax variable bounds along with constraints (or just constraints, as before). Two new parameters control this, and whether a subset of constraints is returned or a new LP.
- Grouped integer variable type.
- LpWrite, LpRead, and LpWriteIIS now support three file formats: LP, MPS, and LPFML.
- ObjNl and LhsNl parameters have another option: 'Q' (quadratic dependence)
- Tracefile for debugging NLP optimizations.
- Hooks for array abstraction in NLPs: Enhancements to NlpDefine give a model author more flexibility to structure a large model so that NLP optimization array abstracts, solving multiple optimization problems during what-if, etc.
- Almost all parameters to NlpDefine are now optional, making it less cumbersome to define an optimization problem involving a scalar decision variable, only zero or one constraints, or finding feasible solutions only.
- NlpDefine can (optionally) make use of explicit expressions that compute the Hessians -- second derivatives of the objective and lhs.

## New GUI features

### Table extensions

- Dropdowns in edit tables
- Cell contains Choice(x, 1).
- If view in Browse-Only, dropdown appears. In Edit mode, appears as text. So must be i

- Find text within a table
- Can do a Find in Edit table or Result table. Find or control-F, when table is top window.
- Search box has case-sensitive, match-entire cell checkboxes
- Starts from current cell and wraps at the bottom. control-F and return.

- Control order of slicers above table (also controls index order in Export and Copy Table)
- Remembers current slicer selections
- Remembers local & magic index positions in pivot
- Smarter pivoting.
- Display of full huge arrays in tables (eliminated truncation to 32000 rows,cols)
- Navigation Keys: Added many navigation key combinations found in Excel. [ER 5669]
- Copy/Paste:
- Wrapping copy [ER 5481]
- Copy Table output includes any coordinate or exogenous variable columns.
- Copy Table occurs at full precision
- When copying a list into an index definition, the number of elements can expand to accommodate the incoming data.
- User can control index order in Copy Table (by ordering slicers)

### Graphing extensions

- Data selection

- Coordinate indexes
- Multiple exogenous indexes

- Setting Associations

- Line-style tied to primary dimension & categorical/continuous.

Leads to much smoother experience when switching between statistical views and pivoting.

- Axis-settings tied to index.
- Set default transfers to other graphs based on index, etc.
- Bar Origin treated as a graphing role

- Graph appearance control

- Background colors with solid, gradient & hatch options.
- Font face, size and color control.
- 3-D effects, spherical or rectangular bars
- Key position (left, bottom, or right)
- tic direction
- line thickness
- Label rotations
- Transparency for area fills
- Graph Style Templates

- Additional graphing power

- Graphing of higher dimensions via graphing roles (coordinate indexes, multiple exogenous variables)
- Stacked bars
- Filled area
- Flip axis (e.g., for horizontal tornados)

- Axis scaling

- Association with index, rather than axis
- Log scale
- Categorical axis control
- More intelligent label selection.
- Date-aware label selection
- Non-overlapping labels
- Auto-increase of number precision so rounded labels don't appear.

- Multiple dimensions with a horizontal value dimension

E.g., XY graph when X is categorical but has multiple dimensions, so the X-values depend on what slice is being viewed. When there is also a key, the labels for multiple slices are merged.

- Graph settings changed to index-based

- Smarter axis scaling and rendering
- Several new graph settings (to be listed here)
- New graph dialog (still to be specified)

### Influence Diagram

- Layout / Alignment Menu Items

- Primary selected node (reference) when multiple nodes selected
- Align top/left/right/bottom/v.center/h.center
- Make Same Size (height,width,both)
- Space Evenly (across, down)

- Documentation adornment (flag to show which nodes have descriptions)
- Hyperlinks

Hyperlinks in a text node description appear as hyperlinks on the influence diagram.

### Number Formatting

- New dialog
- Currency extensions. Euro, custom currency, etc. region-aware.
- Trailing zeros option
- Region-aware and custom date format extensions.

### Keyboard and mouse shortcuts

- Control-E on a button opens its Script. As before, on a Function or Variable, Control-E opens its Definition.
- Mouse Wheel (vertical scrolling) and CTRL-Mouse Wheel (horizontal scrolling)
- Recent file list: # of entries controllable from user registry, defaults now to 6 rather than 4.

### Export

- While viewing a graph result, you can select File->Export... and export the graph as a JPEG, etc.
- Export table data includes any external variable columns (or coordinate index columns, of course)

## Libraries

- New distributions in "Multivariate Distributions.ana"

- MultiUniform
- Uniform_Spherical

- Distribution variations

(Note: these distributions can also be used within the Random function for single variate generation)

- Smooth_fractile
- Warp_dist
- Erlang
- Pareto
- Rayleigh
- Lorenzian
- NegBinomial
- InverseGaussian
- Wald

- Functions in the new "Generalized Regression.ana" library

- Logistic_Regression
- Probit_Regression

(These require Analytica Optimizer to use)

Enable comment auto-refresher