2016-02-27 2 views
1

Я пытался закончить упражнение в книге Йона Стачурски (учебник, посвященный обучению экономистов использованию Python). Один из них - о том, как рассчитать и построить кумулятивное эмпирическое распределение. Они обеспечивают класс, называемый ecdf для вычисления эмпирической функции распределенияУпражнение по вычислению и построению кумулятивного эмпирического распределения

# Filename: ecdf.py 
# Author: John Stachurski 
# Date: December 2008 
# Corresponds to: Listing 6.3 

class ECDF: 

    def __init__(self, observations): 
     self.observations = observations 

    def __call__(self, x): 
     counter = 0.0 
     for obs in self.observations: 
      if obs <= x: 
       counter += 1 
     return counter/len(self.observations) 

И Excercise читает

【Exercise 6.1.12】 Add a method to the ECDF class that uses Matplotlib to plot the em- 
pirical distribution over a specified interval. Replicate the four graphs in figure 6.3 
(modulo randomness). 

цифра должна быть воспроизведена в enter image description here

и иллюзия алгоритма

enter image description here

Следующая моя первая попытка

from ecdf import ECDF 
import numpy as np 
import matplotlib.pyplot as plt 
from srs import SRS 
from math import sqrt 
from random import lognormvariate 

# ========================= 
# parameters and arguments 
# ========================= 
alpha, sigma2, s, delta = 0.3, 0.2, 0.5, 0.1 
# numbers of draws 
n = 1000 
# length of each markov chain 
t = 20 
num_simu = [4,25,100,5000] 

# Define F(k, z) = s k^alpha z + (1 - delta) k 
F = lambda k, z: s * (k**alpha) * z + (1 - delta) * k 
lognorm = lambda: lognormvariate(0, sqrt(sigma2)) 


# ===================== 
# create empirical distribution 
# ===================== 

# different draw numbers 
k = np.linspace(0,25,500) 
for n in num_simu: 
    for x in range(n): 
    # list used to store capital stock (kt) in the last periods (t=20) 
    kt = [] 
    solow_srs = SRS(F=F, phi=lognorm, X=1.0) 
    px = solow_srs.sample_path(t) 
    kt.append(px[-1]) 
    # generate the empirical distribution function 
    F = ECDF(kt) 
    prob_kt_n = [F(i) for i in k] # need to determine range 
            # n refers to the n-th draw 
# ================================== 
# use for-loop to create subplots 
# ================================== 
#k = np.linspace(0,25,500) 
#num_rows,num_cols = 2,2 

трудности для меня являются 1) Как я могу хранить список/массив эмпирических результатов распределения для различных чисел вытяжке в данной графе. 2) Как создать подзаголовки, используя for-loop. Я также столкнулся с некоторыми другими крошечными ошибками. Спасибо за ваши предложения.

ответ

0

О (1), мой совет - создать словарь (т. Е. Что-то вроде d = {}, а затем d[n] = ECDF(data) для каждого номера n наблюдений).

Dunno about (2).

Смежные вопросы