Tôi có một biến ngẫu nhiên và tôi biết.
Có cách nào để tính không? Tôi đã cố gắng tìm ra tích phân, nhưng không đạt được nhiều tiến bộ. Nó thậm chí có thể?
Tôi có một biến ngẫu nhiên và tôi biết.
Có cách nào để tính không? Tôi đã cố gắng tìm ra tích phân, nhưng không đạt được nhiều tiến bộ. Nó thậm chí có thể?
Câu trả lời:
Như đã đề cập trong các nhận xét và câu trả lời của @Martijn, dường như không có giải pháp phân tích nào cho ngoài trường hợp đặc biệt trong đó mang lại cho .
Ngoài ra bởi bất đẳng thức của Jensen, chúng ta có nếu và ngược lại rằng nếu . Vì là lồi khivà lõm khivà hầu hết các khối mật độ bình thường sẽ nằm trong những khu vực phụ thuộc vào giá trị của.
Có nhiều cách để tính gần đúng , tôi đã nêu chi tiết một vài cách tôi quen thuộc và bao gồm một số mã R ở cuối.
Điều này khá dễ hiểu / thực hiện:
nơi mà chúng tôi vẽ mẫu từ .
Điều này bao gồm nhiều phương pháp xấp xỉ tích phân ở trên - trong mã tôi đã sử dụng hàm tích hợp của R sử dụng phương pháp cầu phương thích nghi.
Xem ví dụ Bộ lọc Kalman không tập trung cho Ước tính phi tuyến của Eric A. Wan và Rudolph van der Merwe mô tả:
Phép biến đổi không tập trung (UT) là một phương pháp để tính toán số liệu thống kê của một biến ngẫu nhiên trải qua một phép biến đổi phi tuyến
Phương pháp này bao gồm việc tính toán một số lượng nhỏ "điểm sigma" sau đó được biến đổi bởi và lấy giá trị trung bình có trọng số. Điều này trái ngược với việc lấy mẫu ngẫu nhiên nhiều điểm, biến đổi chúng bằng và lấy giá trị trung bình.
Phương pháp này hiệu quả hơn nhiều so với lấy mẫu ngẫu nhiên. Thật không may, tôi không thể tìm thấy một triển khai R trực tuyến vì vậy đã không bao gồm nó trong mã dưới đây.
Đoạn mã sau tạo dữ liệu với các giá trị khác nhau của và cố định . Nó kết quả đầu ra f_mu
là , và xấp xỉ của thông qua sampling
và 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)
}
đầu ra:
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
Tôi thực sự đã tìm thấy một phép chuyển đổi không tập trung dễ dàng trong bộ lọc gói python (mặc dù nó thực sự khá nhanh để thực hiện từ đầu):
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}))
đầu ra nào:
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()
Thông tin thêm về các bản phân phối này được mô tả trong một bài viết có sẵn miễn phí: Atchison, J. và Sheng M. Shen. "Phân phối logistic-normal: Một số thuộc tính và cách sử dụng." Biometrika 67.2 (1980): 261-272.
Trong văn bản đó, họ không đưa ra bất kỳ biểu thức nào cho các giới hạn, xấp xỉ hoặc hành vi của các khoảnh khắc (ngoại trừ việc đề cập rằng chúng tồn tại). Nhưng, chúng tiếp tục với các biểu thức cho giá trị kỳ vọng cho tỷ lệ của hai thành phần trong một biến phân phối chuẩn logistic đa biến.