Rで 確率分布:一般化パレート分布 を試みます。
本ポストはこちらの続きです。

1. 一般化パレート分布とは
一般化パレート分布(Generalized Pareto Distribution, GPD)は、極値統計学(Extreme Value Theory, EVT)の分野で利用される確率分布です。通常のパレート分布が「最小値\(x_m\)以上の値」をモデル化するのに対し、GPDはより一般的に、ある高い閾値(threshold)を超えた分のデータ(超過量)の分布をモデル化するために用いられます。
この分布の理論的背景は、十分に高い閾値を超える超過量の分布は、その元の分布が何であれ、近似的にGPDに従うという「ピーク・オーバー・スレッショルド(POT)理論」にあります。
確率密度関数 (Probability Density Function, PDF)
GPDに従う確率変数 \(X\) の確率密度関数 \(f(x)\) は、3つのパラメータを用いて以下のように定義されます。
\[f\left(x | \xi, \sigma, \mu\right) = \dfrac{1}{\sigma} \left(1 + \xi \dfrac{x-\mu}{\sigma}\right)^{-(1/\xi + 1)}\]
この式は、形状パラメータ \(\xi \neq 0\) の場合に適用されます。\(\xi = 0\) の場合は、この式の極限として指数分布が現れます。
\[f\left(x | \xi=0, \sigma, \mu\right) = \dfrac{1}{\sigma} \exp\left(-\dfrac{x-\mu}{\sigma}\right)\]
この分布は、3つのパラメータによってその形状が決定されます。
- \(\mu\): 位置パラメータ (location parameter)
- 分布の開始点となる閾値です。\(x \ge \mu\) の範囲で定義されます。
- \(\sigma\): 尺度パラメータ (scale parameter)
- 分布の広がり(ばらつき)を決定する正のパラメータです。
- \(\xi\): 形状パラメータ (shape parameter)
- 分布の裾の挙動を決定するパラメータです。この値の符号によって、分布の性質が根本的に変わります。
- \(\xi > 0\): パレート型(ヘビーテール)。裾はべき乗的にゆっくりと減少し、分布が取りうる値(確率変数 \(x\) の値)に上限はありません。通常のパレート分布やコーシー分布などがこのファミリーに属します。
- \(\xi = 0\): 指数型(ライトテール)。裾は指数的に速く減少します。このとき、GPDは指数分布と一致します。正規分布やガンマ分布などもこのファミリーに分類されます。
- \(\xi < 0\): ベータ型(ショートテール)。分布は有限の点で終わり、上限が存在します(上限は \(\mu - \sigma/\xi\))。一様分布やベータ分布などがこのファミリーです。
- 分布の裾の挙動を決定するパラメータです。この値の符号によって、分布の性質が根本的に変わります。
主な特徴
- 定義域: \(x \ge \mu\)。また、\(\xi < 0\) の場合は、さらに \(x \le \mu - \sigma/\xi\) という上限があります。
- 形状の柔軟性: 形状パラメータ \(\xi\) の値だけで、裾が非常に重い分布から、指数的な分布、さらには有限の裾を持つ分布まで、3つの全く異なるタイプの分布を統一的に表現できます。
2. 一般化パレート分布の応用例
GPDは、非常に稀だが壊滅的な影響をもたらす「極端なイベント」をモデル化する際に利用されます。
- 金融リスク管理
- 市場の暴落など、極端な資産損失のモデリングに利用されます。高い閾値(例: 1日の下落率が5%)を設定し、それを超える損失の分布をGPDで分析することで、VaR(バリュー・アット・リスク)やES(期待ショートフォール)といったリスク指標をより正確に推定します。
- 保険数理
- 巨大ハリケーンや大地震による保険金支払額など、天文学的な額になりうる極端な請求額の分布をモデル化し、再保険の設計や資本要件の計算に役立てます。
- 水文学・気象学
- 100年に一度、1000年に一度といった極端な豪雨量や河川の流量を予測し、堤防の設計や防災計画の策定に利用されます。
- 通信工学
- ネットワークにおける極端なトラフィック(バーストトラフィック)のモデリング。
3. R言語によるシミュレーション
ここでは、位置パラメータ \(\mu=0\)、尺度パラメータ \(\sigma=1\) で固定し、形状パラメータ \(\xi\) を変更した3つのケースを1枚のチャートに描画します。これにより、\(\xi\) が分布のタイプをどのように決定するかを視覚的に理解します。
- ケース1:
ξ=0.5
(パレート型:ヘビーテール) - ケース2:
ξ=0
(指数型:指数分布と同一) - ケース3:
ξ=-0.5
(ベータ型:ショートテール、上限あり)
Rコード
# 必要なライブラリを読み込みます
library(evd)
library(ggplot2)
library(dplyr)
library(tidyr)
# 1. 描画範囲となるx軸の値を生成
# ξ=-0.5 の場合、上限は μ - σ/ξ = 0 - 1/(-0.5) = 2 となる
<- seq(0, 8, length.out = 1000)
x_vals
# 2. 異なるパラメータを持つGPDの確率密度を計算
# dgpd(x, loc, scale, shape) を使用
<- tibble(
df x = x_vals
%>%
) mutate(
`ξ=0.5 (パレート型)` = dgpd(x, loc = 0, scale = 1, shape = 0.5),
`ξ=0 (指数型)` = dgpd(x, loc = 0, scale = 1, shape = 0),
`ξ=-0.5 (ベータ型)` = dgpd(x, loc = 0, scale = 1, shape = -0.5)
)
# 3. ggplotで描画しやすいように、データを「ロングフォーマット」に変換
<- df %>%
df_long pivot_longer(
cols = -x,
names_to = "parameters",
values_to = "density"
%>%
) # 凡例の順序を調整
mutate(parameters = factor(parameters, levels = c(
"ξ=0.5 (パレート型)",
"ξ=0 (指数型)",
"ξ=-0.5 (ベータ型)"
)))
# 4. 各分布に割り当てる色を定義
<- c(
manual_colors `ξ=0.5 (パレート型)` = "blue",
`ξ=0 (指数型)` = "red",
`ξ=-0.5 (ベータ型)` = "darkgreen"
)
# 5. ggplotを使用してチャートを描画
<- ggplot(df_long, aes(x = x, y = density, color = parameters)) +
p # 密度がNAになる部分(定義域外)はプロットしない
geom_line(data = . %>% filter(!is.na(density)), linewidth = 1.2) +
scale_color_manual(values = manual_colors) +
labs(
title = "形状パラメータ(ξ)による一般化パレート分布(GPD)の変化",
subtitle = "ξの符号によって、裾の挙動が3つのタイプに分かれる",
x = "閾値からの超過量 (x)",
y = "確率密度",
color = "形状パラメータ (ξ)"
+
) coord_cartesian(xlim = c(0, 8), ylim = c(0, 1.1)) +
theme_minimal(base_size = 14) +
theme(
legend.position = "top",
plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40")
)
# チャートの表示
print(p)
Figure 1 の解説
上記のRコードを実行すると、3つのタイプのGPDが描画されたチャート Figure 1 が生成されます。
-
ξ=0.5
(青線): パレート型。右側に非常に長く、重い裾を引いています。これは、極端に大きな値が発生する可能性が無視できないことを示しており、金融市場の暴落などのモデル化に利用されます。 -
ξ=0
(赤線): 指数型。これは尺度パラメータが1の指数分布そのものです。裾は指数的に速く減少します。 -
ξ=-0.5
(緑線): ベータ型。分布は \(x=2\) で途切れ、確率密度が0になっています。これは、この分布に従う現象には明確な物理的・理論的な上限が存在することを意味します。
このシミュレーションから、GPDが形状パラメータ \(\xi\) というたった一つのパラメータを調整するだけで、裾が無限に重い分布から、指数的な分布、そして有限の裾を持つ分布まで、質的に全く異なる3つのクラスの分布をシームレスに表現できる分布であることがわかります。
以上です。