71
votes
$\begingroup$

What are some valuable Statistical Analysis open source projects available right now?

Edit: as pointed out by Sharpie, valuable could mean helping you get things done faster or more cheaply.

$\endgroup$
3
  • 7
    $\begingroup$ Could be a poster child for argumentative and subjective. At the least, need to define 'valuable'. $\endgroup$
    – Sharpie
    Jul 19, 2010 at 19:15
  • 3
    $\begingroup$ Maybe the focus shouldn't be on "valuable" but rather "pros" and "cons" of each project? $\endgroup$
    – A Lion
    Jul 19, 2010 at 19:44
  • 1
    $\begingroup$ Or maybe even "How X will help you get Y done faster/cheaper and kill the germs that cause bad breath." $\endgroup$
    – Sharpie
    Jul 19, 2010 at 20:15

19 Answers 19

90
votes
$\begingroup$

The R-project

http://www.r-project.org/

R is valuable and significant because it was the first widely-accepted Open-Source alternative to big-box packages. It's mature, well supported, and a standard within many scientific communities.

$\endgroup$
3
  • $\begingroup$ Yes, R is nice- but WHY is it 'valuable'. $\endgroup$
    – Sharpie
    Jul 19, 2010 at 19:16
  • 11
    $\begingroup$ It's mature, well supported, and a standard within certain scientific communities (popular in our AI department, for example) $\endgroup$
    – Menno
    Jul 19, 2010 at 19:19
  • 10
    $\begingroup$ It's extensible and there's no statistical technique that can't be done in it. $\endgroup$
    – aL3xa
    Jul 20, 2010 at 1:22
22
votes
$\begingroup$

For doing a variety of MCMC tasks in Python, there's PyMC, which I've gotten quite a bit of use out of. I haven't run across anything that I can do in BUGS that I can't do in PyMC, and the way you specify models and bring in data seems to be a lot more intuitive to me.

$\endgroup$
19
votes
$\begingroup$

This may get downvoted to oblivion, but I happily used the Matlab clone Octave for many years. There are fairly good libraries in octave forge for generation of random variables from different distributions, statistical tests, etc, though clearly it is dwarfed by R. One possible advantage over R is that Matlab/octave is the lingua franca among numerical analysts, optimization researchers, and some subset of applied mathematicians (at least when I was in school), whereas nobody in my department, to my knowledge, used R. my loss. learn both if possible!

$\endgroup$
2
  • 5
    $\begingroup$ True comment. But as an experienced programmer I feel dirty every time I use Matlab/Octave, which is a horribly-designed (if it's designed at all) language. Of course, I also cringe at SAS, which was obviously designed for punched cards. $\endgroup$
    – Wayne
    May 19, 2011 at 13:38
  • 1
    $\begingroup$ @Wayne true enough. I recall once hearing Bob Harper refer to the Matlab language as 'semantically suspect' ;) As with many languages, though, once you use it enough, you learn to cope with its oddities. $\endgroup$
    – shabbychef
    Jun 2, 2011 at 17:30
17
votes
$\begingroup$

Two projects spring to mind:

  1. Bugs - taking (some of) the pain out of Bayesian statistics. It allows the user to focus more on the model and a bit less on MCMC.
  2. Bioconductor - perhaps the most popular statistical tool in Bioinformatics. I know it's a R repository, but there are a large number of people who want to learn R, just for Bioconductor. The number of packages available for cutting edge analysis, make it second to none.
$\endgroup$
2
  • 1
    $\begingroup$ Andrew Gelman has a nice R library that links Bugs to R. $\endgroup$
    – bshor
    Jul 19, 2010 at 19:30
  • 4
    $\begingroup$ I'd rephrase that "the most popular statistical tool in bioinformatics"... Bioinformaticians doing microarray analysis use it extensively, yes. But bioinformatics is not limited to that ;) $\endgroup$
    – Nicojo
    Jul 19, 2010 at 20:25
15
votes
$\begingroup$

Incanter is a Clojure-based, R-like platform (environment + libraries) for statistical computing and graphics.

$\endgroup$
3
15
votes
$\begingroup$

Weka for data mining - contains many classification and clustering algorithms in Java.

$\endgroup$
3
  • $\begingroup$ how's the performance of this? (I run screaming whenever I see the word 'Java'...) $\endgroup$
    – shabbychef
    Sep 3, 2010 at 18:01
  • $\begingroup$ @shabbychef Seem quite good from what I've heard, but generally Weka is used as a first step to test several algorithms and look at their performance on given data sets (or a subset thereof), then one recode part of the core program to optimize its efficiency (e.g. with high-dimensional data calling for cross-validation or bootstraping), sometimes in C or Python. $\endgroup$
    – chl
    Sep 3, 2010 at 18:14
  • 2
    $\begingroup$ @shabbychef: Java programs doesn't have to be a slow monsters. I admit that well written C-code will almost always be faster than a similar implementation in Java but well written Java code will most likely not be super slow. Plus developing in Java has many significant advantages. $\endgroup$
    – posdef
    Feb 10, 2011 at 12:52
15
votes
$\begingroup$

ggobi "is an open source visualization program for exploring high-dimensional data."

Mat Kelcey has a good 5 minute intro to ggobi.

$\endgroup$
14
votes
$\begingroup$

There are also those projects initiated by the FSF or redistributed under GNU General Public License, like:

  • PSPP, which aims to be a free alternative to SPSS
  • GRETL, mostly dedicated to regression and econometrics

There is even applications that were released just as a companion software for a textbook, like JMulTi, but are still in use by few people.

I am still playing with xlispstat, from time to time, although Lisp has been largely superseded by R (see Jan de Leeuw's overview on Lisp vs. R in the Journal of Statistical Software). Interestingly, one of the cofounders of the R language, Ross Ihaka, argued on the contrary that the future of statistical software is... Lisp: Back to the Future: Lisp as a Base for a Statistical Computing System. @Alex already pointed to the Clojure-based statistical environment Incanter, so maybe we will see a revival of Lisp-based software in the near future? :-)

$\endgroup$
11
votes
$\begingroup$

RapidMiner for data and text mining

$\endgroup$
9
votes
$\begingroup$

First of all let me tell you that in my opinion the best tool of all by far is R, which has tons of libraries and utilities I am not going to enumerate here.

Let me expand the discussion about weka

There is a library for R, which is called RWeka, which you can easily install in R, and use many of the functionalities from this great program along with the ones in R, let me give you a code example for doing a simple decision tree read from a standard database that comes with this package (it is also very easy to draw the resulting tree but I am going to let you do the research about how to do it, which is in the RWeka documentation:

library(RWeka)
iris <- read.arff(system.file("arff", "iris.arff", package = "RWeka"))
classifier <- IBk(class ~., data = iris)
summary(classifier)

There are also several python libraries for doing this (python is very very easy to learn)

First let me enumerate the packages you can use, I am not going to go in detail about them; Weka (yes you have a library for python), NLKT (the most famous open source package for textmining besides datamining), statPy, sickits, and scipy.

There is also orange which is excellent (I will also talk about it later), here is a code example for doing a tree from the data in the table cmpart1, that also performs 10 folds validation, you can also graph the tree

    import orange, orngMySQL, orngTree
    
    data = orange.ExampleTable("c:\\python26\\orange\\cmpart1.tab")
    
    domain=data.domain
    n=10
    buck=len(data)/n
    l2=[]
    for i in range(n):
        tmp=[]
        if i==n-1:
            tmp=data[n*buck:]
        else:
            tmp=data[buck*i:buck*(i+1)]
        l2.append(tmp)
    
    train=[]
    test=[]
    di={'yy':0,'yn':0,'ny':0,'nn':0}
    for i in range(n):
        train=[]
        test=[]
        for j in range(n):
            if j==i:
                test=l2[i]
            else:
                train.extend(l2[j])
        print "-----"
        trai=orange.Example(domain, train)
        tree = orngTree.TreeLearner(train)
        for ins in test:
            d1= ins.getclass()
            d2=tree(ins)
            print d1
            print d2
            ind=str(d1)+str(d2)
            di[ind]=di[ind]+1
    print di

To end with some other packages I used and found interesting

Orange:data visualization and analysis for novice and experts. Data mining through visual programming or Python scripting. Components for machine learning. Extensions for bioinformatics and text mining. (I personally recommend this, I used it a lot integrating it in python and it was excelent) I can send you some python code if you want me to.

ROSETTA: toolkit for analyzing tabular data within the framework of rough set theory. ROSETTA is designed to support the overall data mining and knowledge discovery process: From initial browsing and preprocessing of the data, via computation of minimal attribute sets and generation of if-then rules or descriptive patterns, to validation and analysis of the induced rules or patterns.(This I also enjoyed using very much)

KEEL:assess evolutionary algorithms for Data Mining problems including regression, classification, clustering, pattern mining and so on. It allows us to perform a complete analysis of any learning model in comparison to existing ones, including a statistical test module for comparison.

DataPlot: for scientific visualization, statistical analysis, and non-linear modeling. The target Dataplot user is the researcher and analyst engaged in the characterization, modeling, visualization, analysis, monitoring, and optimization of scientific and engineering processes.

Openstats: Includes A Statistics and Measurement Primer, Descriptive Statistics, Simple Comparisons, Analyses of Variance, Correlation, Multiple Regression, Interrupted Time Series, Multivariate Statistics, Non-Parametric Statistics, Measurement, Statistical Process Control, Financial Procedures, Neural Networks, Simulation.

$\endgroup$
0
8
votes
$\begingroup$

Colin Gillespie mentioned BUGS, but a better option for Gibbs Sampling, etc, is JAGS.

If all you want to do is ARIMA, you can't beat X12-ARIMA, which is a gold-standard in the field and open source. It doesn't do real graphs (I use R to do that), but the diagnostics are a lesson on their own.

Venturing a bit farther afield to something I recently discovered and have just begun to learn...

ADMB (AD Model Builder), which does non-linear modeling based on the AUTODIF library, with MCMC and a few other features thrown in. It preprocesses and compiles the model down to a C++ executable and compiles it as a standalone app, which is supposed to be way faster than equivalent models implemented in R, MATLAB, etc. ADMB Project.

It started and is still most popular in the fisheries world, but looks quite interesting for other purposes. It does not have graphing or other features of R, and would most likely be used in conjunction with R.

If you want to work with Bayesian Networks in a GUI: SamIam is a nice tool. R has a couple of packages that also do this, but SamIam is very nice.

$\endgroup$
7
votes
$\begingroup$

I really enjoy working with RooFit for easy proper fitting of signal and background distributions and TMVA for quick principal component analyses and modelling of multivariate problems with some standard tools (like genetic algorithms and neural networks, also does BDTs). They are both part of the ROOT C++ libraries which have a pretty heavy bias towards particle physics problems though.

$\endgroup$
7
votes
$\begingroup$

GSL for those of you who wish to program in C / C++ is a valuable resource as it provides several routines for random generators, linear algebra etc. While GSL is primarily available for Linux there are also ports for Windows (See: this and this).

$\endgroup$
7
votes
$\begingroup$

Few more on top of already mentioned:

  • KNIME together with R, Python and Weka integration extensions for data mining
  • Mondrian for quick EDA

And from spatial perspective:

  • GeoDa for spatial EDA and clustering of areal data
  • SaTScan for clustering of point data
$\endgroup$
2
  • 3
    $\begingroup$ As a note GeoDa and SatScan aren't open source, they are freeware (not that it makes much difference to me though!) $\endgroup$
    – Andy W
    Feb 14, 2011 at 14:06
  • 1
    $\begingroup$ pySal by the GeoDa Center is open source (see below) $\endgroup$
    – b_dev
    May 19, 2011 at 13:29
6
votes
$\begingroup$

I second that Jay. Why is R valuable? Here's a short list of reasons. http://www.inside-r.org/why-use-r. Also check out ggplot2 - a very nice graphics package for R. Some nice tutorials here.

$\endgroup$
1
  • 10
    $\begingroup$ why ask the question here? All are community-wiki, why not just fix the canonical answer? $\endgroup$ Jul 19, 2010 at 19:22
4
votes
$\begingroup$

This falls on the outer limits of 'statistical analysis', but Eureqa is a very user friendly program for data-mining nonlinear relationships in data via genetic programming. Eureqa is not as general purpose, but it does what it does fairly well, and the GUI is quite intuitive. It can also take advantage of the available computing power via the eureqa server.

$\endgroup$
3
votes
$\begingroup$

Symbolic mathematics software can be a good support for statistics, too. Here are a few GPL ones I use from time to time:

  1. sympy is python-based and very small, but can still do a lot: derivatives, integrals, symbolic sums, combinatorics, series expansions, tensor manipulations, etc. There is an R package to call it from R.
  2. sage is python-based and HUGE! If sympy can't do what you want, try sage (but there is no native windows version).
  3. maxima is lisp-based and very classical, intermediate in size between (1) and (2).

All three are in active development.

$\endgroup$
3
votes
$\begingroup$

Meta.Numerics is a .NET library with good support for statistical analysis.

Unlike R (an S clone) and Octave (a Matlab clone), it does not have a "front end". It is more like GSL, in that it is a library that you link to when you are writing your own application that needs to do statistical analysis. C# and Visual Basic are more common programming languages than C/C++ for line-of-business apps, and Meta.Numerics has more extensive support for statistical constructs and tests than GSL.

$\endgroup$
3
votes
$\begingroup$
  • clusterPy for analytical regionalization or geospatial clustering
  • PySal for spatial data analysis.
$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.