Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算和绘制累积经验分布的练习_Python_Statistics_Montecarlo_Mcmc - Fatal编程技术网

Python 计算和绘制累积经验分布的练习

Python 计算和绘制累积经验分布的练习,python,statistics,montecarlo,mcmc,Python,Statistics,Montecarlo,Mcmc,我正试图完成Jonh Stachurski的书(一本专门教经济学家如何使用Python的教科书)中的一个练习。其中之一是关于如何计算和绘制累积经验分布。它们提供了一个名为ecdf的类来计算经验分布函数 # Filename: ecdf.py # Author: John Stachurski # Date: December 2008 # Corresponds to: Listing 6.3 class ECDF: def __init__(self, observations):

我正试图完成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)
这个数字是需要复制的

还有算法的幻觉

以下是我的初步尝试

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循环创建子地块。我还遇到了其他一些小错误。 谢谢你的建议。

关于(1),我的建议是创建一个字典(例如,对于观察值的每个数字
n
创建一个类似
d={}
的字典,然后创建一个
d[n]=ECDF(数据)

关于(1),我的建议是创建一个字典(例如,对于观察值的每个数字,创建一个类似于
d={}
的字典,然后创建一个
d[n]=ECDF(数据)

不知道(2)

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