We completely rewrote the graphing and charting engine, adding
a wide range of new styles and options. The Graph setup dialog
now has six tabs:
Chart type tab includes stacked bars, filled areas with transparency,
using symbol shape and size to indicate extra dimensions, 3D effects
on bar charts, cylinders or boxes, and changing line width. It lets
you swap horizontal (X) and vertical (Y) axes, e.g., to create horizontal
bars for tornado diagrams.
Axis tab offers log scales, reversed scales, and categorical
scale. You can save axis settings as defaults associated with corresponding
index variables. Graphing is much smarter in choosing which dates
to display along an axis-by week, month, quarter, or year.
Style tab lets you change colors of grid and frame-in addition
to style of the grid, frame, tick marks, and key.
Text tab lets you change the font type, size, style, and color for
titles and labels. You can also rotate labels for axis tick marks
to prevent overlaps, say for long text values.
Background tab now lets you set a color or color gradient
for the background of the entire chart, plot area, or key.
Preview tab lets you look at the effects of the options you
have selected before you decide to accept it (see image below).
You can apply new graph settings to the current graph, or as defaults
for all graphs.
Graph
Style Templates
Graph Style
Templates let you apply and reuse a collection of graph settings,
for a consistent style for a model or your entire organization.
Graphing associates settings with the view so that it changes appropriately
when you pivot or change the uncertainty view.
XY
comparison
XY comparison
now lets you plot one slice against another slice of an array variable
over the Comparison index, as well as one variable against another.
Tables
In graphs or
tables, you can reorder slicer indexes (any graph indexes not
shown on horizontal axis or key) simply by dragging them.
You can create smarter end-user interfaces by putting dropdown
menus in cells of an edit table, using Choice() to let end
users select from a list of options. When viewing a table, using Find
from the Object menu (Control-F) lets you search for selected
text.
The new SubTable function lets you define a variable as a subset
of another edit table-any edit to a subtable makes the same change
to its parent table, and vice versa.
Smart table splicing controls how an edit table changes if
its indexes change, e.g., editing a label or adding an item or index.
You can specify default values for new cells created by expanding
and index.
Number,
currency, dates, and languages
Analytica is
less US-centric: Number formats offer multiple currency symbols and
flexible date formats, with format and language of days and months
depending on Windows regional settings. You can paste text containing
accents and non-English characters (Ascii>127) into Object attributes
and diagram nodes. The date functions DateAdd, DatePart,
and Today add flexibility for computing dates.
Scroll
wheel and keyboard shortcuts
The scroll
wheel on your mouse scrolls windows (Diagrams, Tables, and Objects),
vertically, or horizontally when you pressControl. Dozens of new
keyboard shortcuts let you navigate and select cells and regions
from tables (like Microsoft Excel). When editing a diagram, shortcuts
Control-1, Control-2, etc., add a new Decision node, Variable node,
etc. Control-e now opens the script of a button, just like it opens
the definition for a variable or function.
Influence
diagrams
To make diagrams
neater, use the new Align, Make same size, and Space
evenly options from the Diagram menu. You can now add web links
to a diagram as URLs in a text node. An optional red flag in node
shows which objects have descriptions.
Here's an alternative to drawing arrows: When you're editing a definition
in the Attribute pane below a Diagram window, Alt-click
another node in the diagram to insert its identifier into the definition.
The
Application
Auto
Save
Analytica writes
each change to an auto save file, so you won't lose any work
after a software or hardware crash. Next time you start the model,
it asks if you want to use the backup or revert to the previously
saved version.
CPU
Sharing
It shares
CPU nicely with other applications, and doesn't hog the CPU when
it is active.
Multiple
Screens
Analytica now
supports editing diagrams across multiple screens for a larger
desktop.
Probability
distributions and statistical functions
Discrete
or continuous
When graphing
a probability distribution, it is smarter about displaying a probability
mass functions for a discrete variable or density function for a continuous
variable. If needed, you can override this, by specifying Continuous
or Discrete in the Domain attribute, or checking Categorical
in the Axis scale tab in Graph set up.
New
functions
Random( )
generates single random sample from any distribution. Shuffle(x,
i) randomly shuffles an array. Pdf(x) and Cdf(x)
return the estimated probability density or cumulative probability
functions as arrays. The system variable IsSampleMode returns
true in Prob mode, false in Mid mode, so you can tell the evaluation
mode within a function.
Over
parameter
You can create
an array of independent probability distributions over one or more
indexes by adding optional Over parameter to a univariate probability
distribution, e.g., Normal(0, 1, Over: I, J).
Extended
functions
Lognormal
uses mean and stddev (standard deviation) as an alternative
to median and gsdev (geometric standard deviation).
Truncate(x, min, max) accepts min and/ or max threshold parameters
and preserves sample ordering, and hence rank correlations. Uniform(min,
max, integer) adds the optional parameter integer to specify
that values be integers in the range. CumDist(p, r, i, smooth)
adds an optional Smooth parameter to control interpolation.
Uncertain
parameters
Many distribution
functions are much faster, especially when their parameters are uncertain
(hierarchical distributions). Gamma, Binomial, GammaIInv are
more accurate for extremely large or small parameter values.
Multivariate
distributions library
New distributions
include MultiUniform and Uniform_Spherical, generalized
Reshape_dist, functions for creating time series with serial
correlations, and uncertainty about regression coefficients.
Distribution
variations library
New distributions
include Smooth_fractile, Warp_dist, Erlang, Pareto,
Rayleigh, Lorenzian, NegBinomial, InverseGaussian,
Wald.
Running
index for statistics
By default,
the running index defining which dimension statistical functions operate
over is Run, the index over random samples. You may specify
a different running index as the last parameter to any statistical
function if you want something other than Run, e.g., Variance(X,
I) computes the variance over index I, even if X is not uncertain.
This renders obsolete the Data StatisticsLibrary.ana,
previously included with Analytica.
Importance
weighting
Importance
weighting is a powerful enhancement to Monte Carlo simulation
that lets you get more information from fewer samples; this is especially
valuable for risky situations with a small probability of an especially
good or bad outcome. Instead of treating all samples as equally likely,
you can set SampleWeighting, for each sample, generating more
samples in the most important areas of sample space. Graphs of probability
distributions and statistical functions downweight sample values with
SampleWeighting so that their results are unbiased. You can
modify SampleWeighting interactively to reflect different input
distributions and so rapidly see the effects the effects on results
without having to rerun the simulation. In the default mode, it uses
equal weights, as before, so you don't have to worry about importance
sampling unless you want to use it.
Weights
for statistics
By default,
statistics functions use SampleWeighting when you are using
importance sampling. You may also provide an optional parameter W
to a statistical function to specify a nondefault set of weights.
For example, Mean(X, W: X > 0) gives the mean of X
conditional on X being positive.
New
functions and language extensions
List
of variables
If you define
a variable as a list of variables, e.g., X := [A, B], it creates the
list variables as the Index value of X. This is very convenient for
comparing several variables. In a Table view, it usually shows the
Title of each variable in the index. If you double-click a variable
title, it opens its Object window. You can add another variable
C to the list simply by drawing an arrow from C to X, or remove it
by redrawing the arrow.
IndexVals
If you define
X as a list of variables, as above, it saves the list of variables
as its index in its IndexVals attribute. You can get these
with the IndexVals(X) function. If you pass X to a function
as an Index parameter, it uses indexVals.
FOR
iteration index
In FOR j
:= x DO e, x can now be any expression that evaluates to
an array. It evaluates e with j set successively to
each cell (atom) of x. The value of the For expression is an
array with the same index(es) as x.
You can now subscript an expression, as in (A+B)[I=x].
Position
operator @
@J returns
the position (an integer from 1 to n) of each element of index J.
X[@J = 2] is equivalent to Slice(A, J, 2). PositionInIndex(a,
u, i) gives the position n in index i for which a[i=n] = u.
Slice
assignment
x[I=y] :=
b, now lets you assign to a cell or slice of a local variable
x, allowing you to write some algorithms much more efficiently.
Argmin
and Argmax
The new Argmin(x,
i) and existing ArgMax(x, i) can both now work over multiple
indexes, and return the value or position of the indexes containing
the minimum or maximum value.
Trig
functions
We have added
the inverse trigonometric functions ArcCos, ArcSin,
ArcTan, and hyperbolic functions CosH, SinH,
and TanH. They use or return degrees, not radians.
XREFRank
Lets you specify
mid, lower, or upper rank in the event of a tie.
RunConsoleProcess
Lets you run
another application from Analytica. It can pass data as function parameters
or via data files. It can run a process concurrently with Analytica
or wait for its result to be computed.
System
functions
GetRegistryValue(
) returns selected values from the computer registry, such as
the default directory for model or datafiles. ShowPdfFile( )
shows an Adobe PDF file, for example, to open PDF documentation for
a model. AnalyticaLicenseInfo returns information about the
license, such as its edition, beta status, expiration date, or user
ID.
TypeOf(X)
Returns the
type of each atom in X as a text value, incuding "Number",
"Text", "Reference", or "Null". If X
is a handle, it returns the class of the object pointed to by X.
Handles
A pointer to
an object, such as a variable or module. The Inputs, Outputs,
or Contains attributes create a list of handles to objects.
With handles, you can write functions that navigate around a model,
e.g., to get a list of the inputs or all ancestors of a variable.
The new function Handle(X) gives a handle to X (instead of
its value). HandleFromIdentifier(T), as you might expect, gives
a handle if T is the text identifier of an object. IndexesOf(A)
returns a list of handles of the indexes of array A.
Optional
and repeated parameters
The qualifier
Optional in the parameters of a function specifies that the
parameter is optional. You can also supply a default for when the
parameter is omitted. The repeat qualifier " " lets
you define a function that takes one or more parameters of the given
type.
Mutiply
by zero
0*NaN
and 0*INF now give a warning and return NaN, consistent
with the IEEE 754 and SANE arithmetic standards. Earlier releases
simply returned 0.
Analytica
Enterprise Edition
These features
are available in the Enterprise edition, and may be used from the
Power Player edition:
Database
functions
DbQuery,
which returns a list of rows from a relational database, can now assign
its result to a local index variable. This lets you create a single
variable or function to return a relational table with its rows and
columns as local indexes, so you no longer need to define auxiliary
global indexes.
MDX
hypercube access
The new MDXQuery
function supports the standard MDX language for querying and writing
to multidimensional OLAP hypercube databases, such as offered by Microsoft
SQL Server Analysis Services. It greatly expands ways to integrate
Analytica with business intelligence and related applications.
MdTable
Now lets you
specify the first N columns of X as coordinates and the rest
as measures, as used in a fact table, the format used
to specify OLAP hypercubes. It also lets you pass it a conglomeration
function.
Analytica
Optimizer Edition
The Analytica
Optimizer uses the new 7.0 release of the Premium Solver from Frontline
Systems.
New
Optimizer Features
New features
include: Grouped Integer variable type, where a solution must
assign a different integer from 1 to n to each variable in the group.
The quadratic programming solver, QpDefine, now supports quadratic
constraints in additional to linear constraints. SolverInfo
function returns information about the current solver. The solvers
offer a more flexible option for passing all parameters as a single
array of parameters, labeled by parameter name in the index.
New
Solvers Available
You can add
yet more powerful solvers, including OptQuest, Knitro NLP, Mosek SOCP
and NLP, and Xpress LP, QP and MIP (priced separately). See the Optimizer
Guide or What's New in Optimizer 4.0 for more.
Generalized
Regression library
Offers Logistic_Regression
and Probit_Regression, using the Optimizer.