[解決済み] Pythonで累積分布関数(CDF)を計算する
2022-03-01 22:07:07
質問
を計算するには、pythonでどうすればよいですか? 累積分布関数(CDF) ?
scipyなどにある連続分布ではなく、私が持っている点の配列(離散分布)から計算したいのです。
どのように解決するのですか?
(私の解釈が間違っている可能性もありますが)。もし質問が、離散PDFから離散CDFに変換する方法であれば
np.cumsum
を適当な定数で割ったもので、サンプルが等間隔に配置されていれば、それで十分です。もし、配列が等間隔でない場合は
np.cumsum
に各点間の距離を乗じたものです)。
サンプルの離散配列があり、サンプルのCDFを知りたい場合、配列をソートすればよいのです。ソート結果を見ると、最小の値が0%、最大の値が100%を表していることがわかります。分布の 50 % の値を知りたい場合は,ソートされた配列の中央の要素を見ればよいのです.
簡単な例で詳しく見てみましょう。
import matplotlib.pyplot as plt
import numpy as np
# create some randomly ddistributed data:
data = np.random.randn(10000)
# sort the data:
data_sorted = np.sort(data)
# calculate the proportional values of samples
p = 1. * np.arange(len(data)) / (len(data) - 1)
# plot the sorted data:
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.plot(p, data_sorted)
ax1.set_xlabel('$p$')
ax1.set_ylabel('$x$')
ax2 = fig.add_subplot(122)
ax2.plot(data_sorted, p)
ax2.set_xlabel('$x$')
ax2.set_ylabel('$p$')
これは次のようなプロットとなり、右側のプロットは伝統的な累積分布関数となります。これは点の背後にあるプロセスのCDFを反映しているはずですが、点の数が有限である限り当然ながらそうではありません。
この関数は簡単に反転させることができ、どのような形が必要かは用途によって異なります。
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
PythonによるExcelファイルの一括操作の説明
-
Python 入出力と高次代入の基礎知識
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。