library(dplyr)
<- function(k, sigma) {
func_Chebyshev_inequality_for_normal <- pnorm(q = k * sigma, mean = 0, sd = sigma, lower.tail = F) * 2
P <- 1/k^2
k2_reciprocal return(list(P = P, k2_reciprocal = k2_reciprocal))
}
Rで確率・統計:チェビシェフの不等式
Rでデータサイエンス
チェビシェフの不等式
証明
確率変数\(X=\left\{x_1,x_2\cdots,x_n\right\}\)、対応する確率を\(P=\left\{p_1,p_2,\cdots,p_n\right\}\)、\(E\left[X\right]=\mu\)、分散\(V\left[X\right]=\sigma^2\)、\(k>0\)としたとき
\[\begin{aligned}\sigma^2&=E\left[\left(X-\mu\right)^2\right]\\ &=\sum\limits_k\left(x_k-\mu\right)^2p_k\\ &=\sum\limits_{|x_k-\mu|<k\sigma}\left(x_k-\mu\right)^2p_k+\sum\limits_{|x_k-\mu|\geq k\sigma}\left(x_k-\mu\right)^2p_k\\ &\geq \sum\limits_{|x_k-\mu|\geq k\sigma}\left(x_k-\mu\right)^2p_k\\ &= \sum\limits_{|x_k-\mu|\geq k\sigma}\left|x_k-\mu\right|^2p_k\\ &\geq \sum\limits_{|x_k-\mu|\geq k\sigma}k^2\sigma^2p_k\quad\cdots\,\,\because|x_k-\mu|\geq k\sigma\\ &= k^2\sigma^2\sum\limits_{|x_k-\mu|\geq k\sigma}p_k\\&=k^2\sigma^2P\left(|X-\mu|\geq k\sigma\right)\end{aligned}\]
よって\(\sigma^2 \geq k^2\sigma^2P\left(|X-\mu|\geq k\sigma\right)\)より\[\dfrac{1}{k^2}\geq P\left(|X-\mu|\geq k\sigma\right)\]
これは\(X\)の平均\(\mu\)との差の絶対値が、標準偏差\(\sigma\)の\(k\)倍以上になる確率は\(\dfrac{1}{k^2}\)以下になることを意味し、これは離散分布でも連続分布でも成立する。
# sigma = 1(標準正規分布)の場合
library(tidyr)
library(ggplot2)
<- data.frame()
df <- 1
cnt for (k in seq(0.1, 20, 0.01)) {
<- func_Chebyshev_inequality_for_normal(k = k, sigma = 1)
result <- result$P
P <- result$k2_reciprocal
k2_reciprocal 1] <- cnt
df[cnt, 2] <- P
df[cnt, 3] <- k2_reciprocal
df[cnt, <- cnt + 1
cnt
}colnames(df) <- c("N", "P", "k2_reciprocal")
<- ggplot(data = df, mapping = aes(x = P, y = k2_reciprocal))
g0 + geom_point(size = 0.1) + geom_abline(slope = 1, intercept = 0, col = "red") + xlim(0, 0.4) + scale_y_continuous(breaks = seq(0, 1, 0.1), limits = c(0, 1)) g0
# 参考
integrate(f = "dnorm", lower = -Inf, upper = -1.96)
0.0249979 with absolute error < 0.000019
参考引用資料
最終更新
Sys.time()
[1] "2024-04-14 14:08:14 JST"
R、Quarto、Package
R.Version()$version.string
[1] "R version 4.3.3 (2024-02-29 ucrt)"
::quarto_version() quarto
[1] '1.4.542'
packageVersion(pkg = "tidyverse")
[1] '2.0.0'