ランダム変数と私はを知っています。
を計算する方法はありますか?私は積分を計算しようとしましたが、あまり進歩していません。可能ですか?
ランダム変数と私はを知っています。
を計算する方法はありますか?私は積分を計算しようとしましたが、あまり進歩していません。可能ですか?
回答:
@Martijnによる質問のコメントと回答ですでに述べたように、E (Y )= 0.5を与えるμ = 0の特別な場合を除いて、分析解はないようです。
さらに、ジェンセンの不等式によって、μ > 0の場合はあり、逆にE (Y )= E (f (X ))> f (E (X ))μ < 0の場合。ので、F (凸ときと凹部とき、正常濃度塊の大部分がの値に応じて、それらの領域にあるであろう。
を概算する方法はたくさんあります。私がよく知っているいくつかの方法を詳しく説明し、最後にRコードを含めました。
これは理解/実装が非常に簡単です。
我々は、サンプル描くところから。
これには、上記の積分を近似する多くの方法が含まれます。コードでは、適応求積法を使用するRの積分関数を使用しました。
たとえば、エリックA.ワンとルドルフファンデルメルウェによる非線形推定のための無香料カルマンフィルターを参照してください。
無香変換(UT)は、非線形変換を受ける確率変数の統計を計算する方法です。
この方法では、少数の「シグマポイント」を計算し、それをで変換して加重平均をとります。これは、ランダムに多数のポイントをサンプリングし、それらをで変換して平均を取ることとは対照的です。
この方法は、ランダムサンプリングよりもはるかに計算効率が高くなります。残念ながら、オンラインでRの実装を見つけることができなかったので、以下のコードには含めていません。
次のコードは、値が異なり、固定されたデータを作成します。その出力f_mu
であるとの近似値を介して、sampling
およびintegration
。
integrate_approx <- function(mu, sigma) {
f <- function(x) {
plogis(x) * dnorm(x, mu, sigma)
}
int <- integrate(f, lower = -Inf, upper = Inf)
int$value
}
sampling_approx <- function(mu, sigma, n = 1e6) {
x <- rnorm(n, mu, sigma)
mean(plogis(x))
}
mu <- seq(-2.0, 2.0, by = 0.5)
data <- data.frame(mu = mu,
sigma = 3.14,
f_mu = plogis(mu),
sampling = NA,
integration = NA)
for (i in seq_len(nrow(data))) {
mu <- data$mu[i]
sigma <- data$sigma[i]
data$sampling[i] <- sampling_approx(mu, sigma)
data$integration[i] <- integrate_approx(mu, sigma)
}
出力:
mu sigma f_mu sampling integration
1 -2.0 3.14 0.1192029 0.2891102 0.2892540
2 -1.5 3.14 0.1824255 0.3382486 0.3384099
3 -1.0 3.14 0.2689414 0.3902008 0.3905315
4 -0.5 3.14 0.3775407 0.4450018 0.4447307
5 0.0 3.14 0.5000000 0.4999657 0.5000000
6 0.5 3.14 0.6224593 0.5553955 0.5552693
7 1.0 3.14 0.7310586 0.6088106 0.6094685
8 1.5 3.14 0.8175745 0.6613919 0.6615901
9 2.0 3.14 0.8807971 0.7105594 0.7107460
私は実際には、Pythonパッケージfilterpyで無香変換を使用するのが簡単であることがわかりました(実際には、最初から実装するのは非常に迅速ですが)。
import filterpy.kalman as fp
import numpy as np
import pandas as pd
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
m = 9
n = 1
z = 1_000_000
alpha = 1e-3
beta = 2.0
kappa = 0.0
means = np.linspace(-2.0, 2.0, m)
sigma = 3.14
points = fp.MerweScaledSigmaPoints(n, alpha, beta, kappa)
ut = np.empty_like(means)
sampling = np.empty_like(means)
for i, mean in enumerate(means):
sigmas = points.sigma_points(mean, sigma**2)
trans_sigmas = sigmoid(sigmas)
ut[i], _ = fp.unscented_transform(trans_sigmas, points.Wm, points.Wc)
x = np.random.normal(mean, sigma, z)
sampling[i] = np.mean(sigmoid(x))
print(pd.DataFrame({"mu": means,
"sigma": sigma,
"ut": ut,
"sampling": sampling}))
出力:
mu sigma ut sampling
0 -2.0 3.14 0.513402 0.288771
1 -1.5 3.14 0.649426 0.338220
2 -1.0 3.14 0.716851 0.390582
3 -0.5 3.14 0.661284 0.444856
4 0.0 3.14 0.500000 0.500382
5 0.5 3.14 0.338716 0.555246
6 1.0 3.14 0.283149 0.609282
7 1.5 3.14 0.350574 0.662106
8 2.0 3.14 0.486598 0.710284
import matplotlib.pyplot as plt
x = np.random.normal(means[0], sigma, z)
plt.hist(sigmoid(x), bins=50)
plt.title("mu = {}, sigma = {}".format(means[0], sigma))
plt.xlabel("f(x)")
plt.show()
これらのディストリビューションの詳細については、無料で入手できる記事(Atchison、J.、およびSheng M. Shen)を参照してください。「ロジスティック正規分布:いくつかの特性と用途。」Biometrika 67.2(1980):261-272。
そのテキストでは、モーメントの制限、近似、または振る舞いに関する表現はありません(それらが存在することを言及している場合を除きます)。ただし、多変量ロジスティック正規分布変数の2つのコンポーネントの比率の期待値の式は引き続き使用されます。