2013-03-03 13 views
5

Python'de bir istatistik önyükleme kütüphanesi var mı? BulduğumPython istatistik önyükleme kütüphanesi?

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

aranıyor:

http://mjtokelly.blogspot.com/2006/04/bootstrap-statistics-in-python.html (koduna bağlantısı kesik)

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

ben R bootstrap sunulan ne benzer özelliğe sahip istiyoruz

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

Ancak yukarıdakiler tüm işlevler (özellikle olasılık ağırlıkları) sunmuyor gibi görünmektedir.

İşaretçiler var mı? Sadece R'ın örnek fonksiyonunun bir piton sürümü arıyorsanız

Bu

geçenlerde numpy.random

teşekkür

cevap

4

eklenen var, şunu deneyin: Ben bir sorun açıldı 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

Teşekkür Bu fonksiyonu ekleyerek ilgileneceklerini görmek için pandalarla. https://github.com/pydata/pandas/issues/2963 – gliptak

İlgili konular