2016-02-27 93 views
1

我試圖在Jonh Stachurski的書(專門教授經濟學家如何使用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) 

類和鍛鍊; Tibial讀取

【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)。

不知道關於(2)。