亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何用 Python 創建指數概率論文

如何用 Python 創建指數概率論文

四季花海 2023-09-12 10:38:50
我現在正在嘗試用python重新創建這個指數概率論文的圖表。為了做到這一點,我必須將 CDF 函數線性化為:x = a*g(Fx(x)) + b然后繪制xvs g(Fx(x))。該圖顯示了不同分布的參數但是我不知道如何繼續。顯然 x 軸的比例必須改變。我已經嘗試過使用 probplot,但結果完全相同。有任何想法嗎?import matplotlib.pyplot as pltimport numpy as npfrom scipy.stats import exponfrom scipy.stats import probplot# Creating plotfig,ax =plt.subplots()newax=ax.twiny()ax.grid()# Lognormallambda_expon=0.04i=1/lambda_exponprobs=np.arange(0.01,0.99,0.01) # array with probabilitiesppf =expon.ppf(probs,i) cdf=expon.cdf(ppf,i) x=-np.log(1-cdf) # variabley=-np.log(1-cdf)*i # linearized form CDFax.plot(x,y)newax.set_xticks([0.01,0.5,0.8,0.9,0.96,0.99])newax.set_xticks([0.01,0.5,0.90,0.99])ax.plot()
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

不確定,為什么你認為這是 CDF 圖。如果在 X 軸上放置概率,在 Y 軸上繪制x,它看起來像分位數圖。


我沒有在 Python/Matplotlib 中看到內置的此類比例,logit看起來像是最佳近似值。


或者我誤解了你的問題?


代碼,Python 3.8 x64 Win10


import numpy as np

import matplotlib.pyplot as plt


# exponential distribution

def PDF(x, λ):

    return λ*np.exp(-λ*x)


def CDF(x, λ):

    return 1.0 - np.exp(-λ*x)


def Q(p, λ): # quantile

    x = -np.log(1.0 - p)/λ

    return x


# plots

λ = 0.04


p = np.linspace(0.01, 0.99, 101)

x = Q(p, λ)


fig = plt.figure()

ax  = fig.add_subplot(2, 1, 1)


ax.set_xscale('logit')

ax.plot(p, x, 'r-')


plt.show()

你會得到類似的東西

https://img1.sycdn.imooc.com//64ffcf6d0001c25f06010209.jpg

更新


如果您需要概率圖,這里是


代碼


from scipy.stats import expon


rve = expon(loc=0.0, scale=1.0/λ)


p = np.linspace(0.01, 0.99, 101)

x = rve.ppf(p) #  Q(p, λ)


q = rve.rvs(size = 10000)


fig = plt.figure()

ax  = fig.add_subplot(2, 1, 1)

   

res = stats.probplot(q, dist=rve, plot=ax)


plt.show()

和圖表

https://img1.sycdn.imooc.com//64ffcf7b0001581e06230245.jpg

好吧,當你發送消息時我已經寫好了代碼。無論如何將其放置在這里,它看起來與您詢問的圖表完全相同 - 與自定義標簽呈線性。


import matplotlib.ticker as ticker


def linear(x0, xn, y0, yn, x):

    q = (x-x0)/(xn-x0)

    return q * yn + (1.0 - q) * y0


pmin = 0.009

pmax = 0.991


xmin = Q(pmin, λ)

xmax = Q(pmax, λ)


x = np.linspace(xmin, xmax, 2)

p = np.linspace(pmin, pmax, 2)


tick_values = [0.01, 0.50, 0.80, 0.90, 0.96, 0.99] # probabilies

tick_names  = [str(v) for v in tick_values] # ticks to place on graph


tick_xvals  = [Q(p, λ) for p in tick_values] # x values for each p

tick_places = [linear(xmin, xmax, pmin, pmax, x) for x in tick_xvals] # x from linear function


fig = plt.figure()

ax  = fig.add_subplot(2, 1, 1)


ax.axes.xaxis.set_major_locator(ticker.FixedLocator((tick_places)))

ax.xaxis.set_major_formatter(ticker.FixedFormatter((tick_names)))


ax.plot(p, x, 'r-')


plt.show()

和圖表本身

https://img1.sycdn.imooc.com//64ffcf8700013ffc05910205.jpg

查看完整回答
反對 回復 2023-09-12
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號