我有Yahoo从2000年1月1日至2018年12月31日的特定股票的每日价格数据。我了解股票价格的每日百分比变化遵循正态分布,因此我执行了以下操作:
df['pct_change'] = df['Adj Close'].pct_change()
df = df.dropna()
# Plot normal distribution of daily returns
mu = df['pct_change'].mean()
std = df['pct_change'].std()
x = np.linspace(mu - 5*std, mu + 5*std,100)
plt.plot(x, stats.norm.pdf(x, mu, std))
plt.show()
现在,我想用对数正态分布来绘制股票价格,但是我对stats.lognorm.pdf()
函数和要包含的参数感到非常困惑。由于价格的日志是正态分布的,我应该在原始数据框中创建Adj Price
列的日志的新列吗?如果有帮助,请参见数据框的head()
。谢谢。
High Low Open Close Volume Adj Close \
Date
2000-01-03 4.017857 3.631696 3.745536 3.997768 133949200.0 3.488905
2000-01-04 3.950893 3.613839 3.866071 3.660714 128094400.0 3.194754
2000-01-05 3.948661 3.678571 3.705357 3.714286 194580400.0 3.241507
2000-01-06 3.821429 3.392857 3.790179 3.392857 191993200.0 2.960991
2000-01-07 3.607143 3.410714 3.446429 3.553571 115183600.0 3.101249
pct_change
Date
2000-01-03 0.088754
2000-01-04 -0.084310
2000-01-05 0.014634
2000-01-06 -0.086539
2000-01-07 0.047368
答案 0 :(得分:0)
假设您要使用MLE估计对数正态的参数,并且特别对df.Close
的值感兴趣,则可以使用lognorm.fit
:>
shape, location, scale = stats.lognorm.fit(df.Close)
从那里,您可以像对正态分布情况一样绘制分布,并通过
获得密度。stats.lognorm.pdf(x, s=shape, loc=location, scale=scale)