二项分布
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
n_list <- c(25, 50, 100)
p_list <- c(0.3, 0.5, 0.8)
df <- data.frame()
for (n in n_list) {
for (p in p_list) {
k <- 0:n
dbinom <- dbinom(k, n, p)
df <- rbind(df, data.frame(k = k, dbinom = dbinom, n=factor(n),p = factor(p)))
}
}
ggplot(df, aes(x = k, y = dbinom, color = p, linetype = n,linewidth = n)) +
geom_line() +
scale_linetype_manual(
name = "试验次数 n",
values = c(
"25" = "solid",
"50" = "dashed",
"100" = "solid"
)
) +
scale_linewidth_manual(
name = "试验次数 n",
values = c(
"25" = 1.0,
"50" = 1.0,
"100" = 0.5
)
) +
labs(title = "二项分布:不同n和p的对比",
x = "成功次数 k", y = "概率 P(X=k)",
color = "成功概率 p") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
泊松分布
lambda_list <- c(1:9)
k <- 0:20
df = data.frame()
for (lambda in lambda_list) {
pois <- dpois(k, lambda = lambda)
df <- rbind(df, data.frame(k = k, pois = pois, lambda=factor(lambda)))
}
ggplot(df, aes(x = k, y = pois, color = lambda, group = lambda)) +
geom_line(linewidth = 0.5) +
scale_color_viridis_d(
name = "参数 λ",
end = 0.9
) +
labs(
title = "泊松分布:不同λ的对比",
x = "事件发生次数 k",
y = "概率 P(X=k)",
color = "参数 λ"
) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
负二项分布
n_list <- c(5, 10, 30)
p_list <- c(0.3, 0.5, 0.7)
df <- data.frame()
for (n in n_list) {
for (p in p_list) {
k <- 0:(n*5)
nb <- dnbinom(k, size = n, prob = p)
df <- rbind(df, data.frame(k = k, nb = nb, n=factor(n),p = factor(p)))
}
}
ggplot(df, aes(x = k, y = nb, color = p, linetype = n,linewidth = n)) +
geom_line() +
scale_linetype_manual(
name = "目标成功次数 n",
values = c(
"5" = "solid",
"10" = "dashed",
"30" = "solid"
)
) +
scale_linewidth_manual(
name = "目标成功次数 n",
values = c(
"5" = 0.3,
"10" = 0.5,
"30" = 1
)
) +
labs(title = "负二项分布:不同 n 和 p 的对比",
x = "试验失败次数 k", y = "概率 P(X=k)",
color = "成功概率 p") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
正态分布
mean_list <- c(-2, 0, 2)
sigma_list <- c(0.3, 0.5, 0.8)
df <- data.frame()
for (mean in mean_list) {
for (sigma in sigma_list) {
x <- seq(-5, 5, length.out = 1000)
norm <- dnorm(x, mean=mean, sd= sigma)
df <- rbind(df, data.frame(x = x, norm = norm, mean=factor(mean),sigma = factor(sigma)))
}
}
ggplot(df, aes(x = x, y = norm, color = mean, linetype = sigma,linewidth = sigma)) +
geom_line() +
scale_linetype_manual(
name = "标准差σ",
values = c(
"0.3" = "solid",
"0.5" = "dashed",
"0.8" = "solid"
)
) +
scale_linewidth_manual(
name = "标准差σ",
values = c(
"0.3" = 0.5,
"0.5" = 0.5,
"0.8" = 0.5
)
) +
labs(title = "正态分布:不同μ和σ的对比",
x = "随机变量x", y = '概率密度f(x)',
color = "均值mean") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
幂律分布
alpha_list <- c(1.5,2.0, 3.0,4.0)
xmin <- 1
x <- seq(xmin, 10, length.out = 1000)
col_list <- c("red", "blue", "green",'pink')
par(mfrow = c(1, 2))
#线性坐标
plot(0, 0, type = "n",
xlim = c(xmin, 10),
ylim = c(0, 2),
main = "幂律分布(线性坐标)",
xlab = "x", ylab = "概率密度 f(x)")
for (i in 1:length(alpha_list)) {
alpha <- alpha_list[i]
pdf_power <- ((alpha - 1)/xmin) * (xmin/x)^alpha
lines(x, pdf_power, col = col_list[i],lwd=1.5)
}
legend("topright", legend = paste0("α=", alpha_list),
col = col_list,bty = "n")
grid(lty = 2, col = "gray")
#双对数坐标
plot(0, 0, type = "n",
xlim = log(range(x)),
ylim = c(-5, 1),
main = "幂律分布(双对数坐标)",
xlab = "log(x)", ylab = "log(f(x))")
for (i in 1:length(alpha_list)) {
alpha <- alpha_list[i]
pdf_power <- ((alpha - 1)/xmin) * (xmin/x)^alpha
lines(log(x), log(pdf_power), col = col_list[i],lwd=1.5)
}
legend("bottomleft", legend = paste0("α=", alpha_list),
col = col_list, bty = "n")
grid(lty = 2, col = "gray")