ホーム » コードあり » 2019 Q3(5)

投稿一覧

2019 Q3(5)

関数の期待値がゼロになる条件を求めました。

 

コード

u(Y)を与え、E[u(Y)]を求めるシミュレーションをします。

まずは適当なu(Y) = Y^2 - 2Yを与え、E[u(Y)]を求めてみます。

# 2019 Q3(5)  2024.9.21

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
theta_true = 10  # 真のθ
n = 15  # サンプルサイズ
num_simulations = 10000  # シミュレーション回数

# 仮の関数 u(Y) を定義(θと期待値に基づいた関数)
def u(Y, theta, n):
    # 例として、Y の関数として適当に定義(例えば u(Y) = Y^2 - 2Y)
    return Y**2 - 2*Y

# シミュレーションでの最大値Yを格納するリスト
max_values = []

# シミュレーション開始
for _ in range(num_simulations):
    # U(0, theta_true) から n 個の乱数を生成
    samples = np.random.uniform(0, theta_true, n)
    
    # その中での最大値Yを記録
    max_values.append(np.max(samples))

# 関数 u(Y) に基づく E[u(Y)] を計算
u_values = [u(y, theta_true, n) for y in max_values]
expected_u_Y = np.mean(u_values)

# 結果の表示
print(f"シミュレーションによる E[u(Y)]: {expected_u_Y}")

# u(Y) の値のヒストグラムを描画
plt.hist(u_values, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black', label='u(Y) のシミュレーション結果')

# 期待値の線を追加
plt.axvline(expected_u_Y, color='red', linestyle='--', label=f'期待値 E[u(Y)] = {expected_u_Y:.4f}')

# グラフ設定
plt.title('関数 u(Y) の分布と期待値')
plt.xlabel('u(Y) の値')
plt.ylabel('密度')
plt.legend()
plt.grid(True)
plt.show()
シミュレーションによる E[u(Y)]: 69.66620056705366

E[u(Y)]=0にはなりませんでした。

次にu(Y) = 0を与え、E[u(Y)]を求めてみます。

# 2019 Q3(5)  2024.9.21

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
theta_true = 10  # 真のθ
n = 15  # サンプルサイズ
num_simulations = 10000  # シミュレーション回数

# 仮の関数 u(Y) を定義(θと期待値に基づいた関数)
def u(Y, theta, n):
    # 例: 0
    return 0

# シミュレーションでの最大値Yを格納するリスト
max_values = []

# シミュレーション開始
for _ in range(num_simulations):
    # U(0, theta_true) から n 個の乱数を生成
    samples = np.random.uniform(0, theta_true, n)
    
    # その中での最大値Yを記録
    max_values.append(np.max(samples))

# 関数 u(Y) に基づく E[u(Y)] を計算
u_values = [u(y, theta_true, n) for y in max_values]
expected_u_Y = np.mean(u_values)

# 結果の表示
print(f"シミュレーションによる E[u(Y)]: {expected_u_Y}")

# u(Y) の値のヒストグラムを描画
plt.hist(u_values, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black', label='u(Y) のシミュレーション結果')

# 期待値の線を追加
plt.axvline(expected_u_Y, color='red', linestyle='--', label=f'期待値 E[u(Y)] = {expected_u_Y:.4f}')

# グラフ設定
plt.title('関数 u(Y) の分布と期待値')
plt.xlabel('u(Y) の値')
plt.ylabel('密度')
plt.legend()
plt.grid(True)
plt.show()
シミュレーションによる E[u(Y)]: 0.0

E[u(Y)]=0になりました。

次にu(Y) = Y - \frac{n}{n + 1} \thetaを与え、E[u(Y)]を求めてみます。

# 2019 Q3(5)  2024.9.21

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
theta_true = 10  # 真のθ
n = 15  # サンプルサイズ
num_simulations = 10000  # シミュレーション回数

# 仮の関数 u(Y) を定義(θと期待値に基づいた関数)
def u(Y, theta, n):
    # 例: Y - n/(n+1) * θ
    return Y - (n / (n + 1)) * theta

# シミュレーションでの最大値Yを格納するリスト
max_values = []

# シミュレーション開始
for _ in range(num_simulations):
    # U(0, theta_true) から n 個の乱数を生成
    samples = np.random.uniform(0, theta_true, n)
    
    # その中での最大値Yを記録
    max_values.append(np.max(samples))

# 関数 u(Y) に基づく E[u(Y)] を計算
u_values = [u(y, theta_true, n) for y in max_values]
expected_u_Y = np.mean(u_values)

# 結果の表示
print(f"シミュレーションによる E[u(Y)]: {expected_u_Y}")

# u(Y) の値のヒストグラムを描画
plt.hist(u_values, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black', label='u(Y) のシミュレーション結果')

# 期待値の線を追加
plt.axvline(expected_u_Y, color='red', linestyle='--', label=f'期待値 E[u(Y)] = {expected_u_Y:.4f}')

# グラフ設定
plt.title('関数 u(Y) の分布と期待値')
plt.xlabel('u(Y) の値')
plt.ylabel('密度')
plt.legend()
plt.grid(True)
plt.show()
シミュレーションによる E[u(Y)]: -0.0069045066145089744

E[u(Y)]=0に近い値を取りました。u(Y) = 0でなくてもE[u(Y)]=0になるのはなぜでしょうか。おそらくこの問はu(Y)にθが含まれない前提になっているのでしょう。