2013-03-03 10 views
5

Pythonに統計ブートストラップライブラリはありますか?Pythonの統計ブートストラップライブラリ?

私はR bootstrapで提供されるものと同様の機能を持っているしたいと思います:

http://statistics.ats.ucla.edu/stat/r/library/bootstrap.htm

私が見つけた検索:

http://mjtokelly.blogspot.com/2006/04/bootstrap-statistics-in-python.html(コードへのリンクが壊れている)

http://adorio-research.org/wordpress/?p=9048

https://github.com/cgevans/scikits-bootstrap

しかし、これらはすべての機能(特に確率重み付け)を提供しているようではありません。

任意のポインタ?

この最近あなただけRのサンプル関数のPythonのバージョンを探しているなら、この試すnumpy.random

おかげ

答えて

4

に追加しました:私は問題を開いた jnnnnn

import collections 
import random 
import bisect 

def sample(xs, sample_size = None, replace=False, sample_probabilities = None): 
    """Mimics the functionality of http://statistics.ats.ucla.edu/stat/r/library/bootstrap.htm sample()""" 

    if not isinstance(xs, collections.Iterable): 
     xs = range(xs) 
    if not sample_size: 
     sample_size = len(xs)    

    if not sample_probabilities: 
     if replace: 
      return [random.choice(xs) for _ in range(sample_size)] 
     else: 
      return random.sample(xs, sample_size) 
    else: 
     if replace: 
      total, cdf = 0, [] 
      for x, p in zip(xs, sample_probabilities): 
       total += p 
       cdf.append(total) 

      return [ xs[ bisect.bisect(cdf, random.uniform(0, total)) ] 
        for _ in range(sample_size) ] 
     else:    
      assert len(sample_probabilities) == len(xs) 
      xps = list(zip(xs, sample_probabilities))   
      total = sum(sample_probabilities) 
      result = [] 
      for _ in range(sample_size): 
       # choose an item based on weights, and remove it from future iterations. 
       # this is slow (N^2), a tree structure for xps would be better (NlogN) 
       target = random.uniform(0, total) 
       current_total = 0     
       for index, (x,p) in enumerate(xps): 
        current_total += p 
        if current_total > target: 
         xps.pop(index) 
         result.append(x) 
         total -= p 
         break 
      return result 
+0

感謝をパンダと一緒にこの機能を追加するのに興味があるかどうかを確認してください。 https://github.com/pydata/pandas/issues/2963 – gliptak