Files
MA-223/Oblig/2a/markeringAvIntervallestimat.R
2026-03-12 16:36:50 +01:00

473 lines
23 KiB
R

# ============================================================
# Oppgave 3g -- Symmetrisk 90% intervallestimat
# Genererer pdf, CDF og iCDF for alle 8 grupper
# med markerte 5. og 95. prosentiler
# ============================================================
install.packages(c("ggplot2", "patchwork", "scales"))
library(ggplot2)
library(patchwork)
col_curve <- "red3"
col_shade <- scales::alpha("red3", 0.2)
col_mark <- "steelblue"
theme_oblig <- theme_classic() +
theme(
axis.title = element_text(size = 9),
axis.text = element_text(size = 8),
plot.title = element_text(size = 10, face = "bold")
)
# Hjelpefunksjon for segmenter (unngaar advarsler fra geom_segment med aes)
seg <- function(x1, y1, x2, y2, ...) {
annotate("segment", x = x1, xend = x2, y = y1, yend = y2, ...)
}
# Lagringsfunksjon med feilhåndtering
lagre_gruppe <- function(navn, pdf_plot, cdf_plot, icdf_plot) {
tryCatch({
kombinert <- pdf_plot + cdf_plot + icdf_plot +
plot_annotation(
title = paste("Gruppe", navn),
theme = theme(plot.title = element_text(size = 12, face = "bold"))
)
ggsave(paste0("gruppe_", navn, ".png"), kombinert,
width = 12, height = 4, dpi = 150)
message("OK: gruppe_", navn, ".png lagret")
}, error = function(e) {
message("FEIL gruppe ", navn, ": ", conditionMessage(e))
})
}
# x-vektor for kontinuerlige fordelinger (brukes av d, e, f, g, h)
x_kont <- seq(0, 10, length.out = 500)
# ============================================================
# GRUPPE a -- Diskret, ujevn
# ============================================================
tryCatch({
vals_a <- 1:10
prob_a <- c(0.03, 0.08, 0.09, 0.03, 0.03, 0.065, 0.14, 0.21, 0.19, 0.075)
prob_a <- prob_a / sum(prob_a)
cdf_a <- cumsum(prob_a)
p05_a <- min(vals_a[cdf_a >= 0.05])
p95_a <- min(vals_a[cdf_a >= 0.95])
df_a <- data.frame(x = vals_a, f = prob_a, F = cdf_a)
pdf_a <- ggplot(df_a, aes(x, f)) +
geom_bar(stat = "identity",
fill = ifelse(vals_a >= p05_a & vals_a <= p95_a, col_shade, "white"),
color = col_curve, width = 0.4) +
geom_vline(xintercept = c(p05_a, p95_a), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_a, y = max(prob_a) * 0.95,
label = paste0("x[0.05]==", p05_a), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_a, y = max(prob_a) * 0.95,
label = paste0("x[0.95]==", p95_a), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) +
labs(title = "pdf a", x = "x", y = "f(x)") + theme_oblig
cdf_a_plot <- ggplot(df_a, aes(x, F)) +
geom_step(color = col_curve, linewidth = 0.8) +
geom_point(color = col_curve, size = 2) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_a, 0, p05_a, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_a, 0, p95_a, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_a, y = 0.08,
label = paste0("x[0.05]==", p05_a), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_a, y = 0.92,
label = paste0("x[0.95]==", p95_a), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) +
labs(title = "CDF E", x = "x", y = "F(x)") + theme_oblig
icdf_a_df <- data.frame(p = c(0, cdf_a), x = c(vals_a[1], vals_a))
icdf_a_plot <- ggplot(icdf_a_df, aes(p, x)) +
geom_step(color = col_curve, linewidth = 0.8, direction = "vh") +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
annotate("text", x = 0.05, y = 9.5, label = "p==0.05", parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9.5, label = "p==0.95", parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_y_continuous(breaks = 1:10) +
labs(title = "iCDF (a)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("a", pdf_a, cdf_a_plot, icdf_a_plot)
}, error = function(e) message("FEIL gruppe a: ", e$message))
# ============================================================
# GRUPPE b -- Diskret, synkende
# ============================================================
tryCatch({
vals_b <- 1:10
prob_b <- c(0.40, 0.25, 0.13, 0.08, 0.05, 0.04, 0.02, 0.015, 0.01, 0.005)
prob_b <- prob_b / sum(prob_b)
cdf_b <- cumsum(prob_b)
p05_b <- min(vals_b[cdf_b >= 0.05])
p95_b <- min(vals_b[cdf_b >= 0.95])
df_b <- data.frame(x = vals_b, f = prob_b, F = cdf_b)
pdf_b <- ggplot(df_b, aes(x, f)) +
geom_bar(stat = "identity",
fill = ifelse(vals_b >= p05_b & vals_b <= p95_b, col_shade, "white"),
color = col_curve, width = 0.4) +
geom_vline(xintercept = c(p05_b, p95_b), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_b, y = max(prob_b) * 0.95,
label = paste0("x[0.05]==", p05_b), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_b, y = max(prob_b) * 0.70,
label = paste0("x[0.95]==", p95_b), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) +
labs(title = "pdf b", x = "x", y = "f(x)") + theme_oblig
cdf_b_plot <- ggplot(df_b, aes(x, F)) +
geom_step(color = col_curve, linewidth = 0.8) +
geom_point(color = col_curve, size = 2) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_b, 0, p05_b, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_b, 0, p95_b, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_b, y = 0.08,
label = paste0("x[0.05]==", p05_b), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_b, y = 0.92,
label = paste0("x[0.95]==", p95_b), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) +
labs(title = "CDF C", x = "x", y = "F(x)") + theme_oblig
icdf_b_df <- data.frame(p = c(0, cdf_b), x = c(vals_b[1], vals_b))
icdf_b_plot <- ggplot(icdf_b_df, aes(p, x)) +
geom_step(color = col_curve, linewidth = 0.8, direction = "vh") +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
annotate("text", x = 0.05, y = 9.5, label = "p==0.05", parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9.5, label = "p==0.95", parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_y_continuous(breaks = 1:10) +
labs(title = "iCDF (b)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("b", pdf_b, cdf_b_plot, icdf_b_plot)
}, error = function(e) message("FEIL gruppe b: ", e$message))
# ============================================================
# GRUPPE c -- Diskret, uniform
# ============================================================
tryCatch({
vals_c <- 1:10
prob_c <- rep(0.1, 10)
cdf_c <- cumsum(prob_c)
p05_c <- min(vals_c[cdf_c >= 0.05])
p95_c <- min(vals_c[cdf_c >= 0.95])
df_c <- data.frame(x = vals_c, f = prob_c, F = cdf_c)
pdf_c <- ggplot(df_c, aes(x, f)) +
geom_bar(stat = "identity", fill = col_shade, color = col_curve, width = 0.4) +
geom_vline(xintercept = c(p05_c, p95_c), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_c, y = 0.13,
label = paste0("x[0.05]==", p05_c), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_c, y = 0.13,
label = paste0("x[0.95]==", p95_c), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) + ylim(0, 0.15) +
labs(title = "pdf c", x = "x", y = "f(x)") + theme_oblig
cdf_c_plot <- ggplot(df_c, aes(x, F)) +
geom_step(color = col_curve, linewidth = 0.8) +
geom_point(color = col_curve, size = 2) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_c, 0, p05_c, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_c, 0, p95_c, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_c, y = 0.08,
label = paste0("x[0.05]==", p05_c), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_c, y = 0.92,
label = paste0("x[0.95]==", p95_c), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_x_continuous(breaks = 1:10) +
labs(title = "CDF G", x = "x", y = "F(x)") + theme_oblig
icdf_c_df <- data.frame(p = c(0, cdf_c), x = c(vals_c[1], vals_c))
icdf_c_plot <- ggplot(icdf_c_df, aes(p, x)) +
geom_step(color = col_curve, linewidth = 0.8, direction = "vh") +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
annotate("text", x = 0.05, y = 9.5, label = "p==0.05", parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9.5, label = "p==0.95", parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
scale_y_continuous(breaks = 1:10) +
labs(title = "iCDF (c)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("c", pdf_c, cdf_c_plot, icdf_c_plot)
}, error = function(e) message("FEIL gruppe c: ", e$message))
# ============================================================
# GRUPPE d -- Kontinuerlig, bimodal
# ============================================================
tryCatch({
pdf_d_fun <- function(x) 0.55 * dnorm(x, 2, 0.9) + 0.45 * dnorm(x, 6, 1.2)
cdf_d_fun <- function(x) 0.55 * pnorm(x, 2, 0.9) + 0.45 * pnorm(x, 6, 1.2)
p05_d <- uniroot(function(x) cdf_d_fun(x) - 0.05, c(-5, 15))$root
p95_d <- uniroot(function(x) cdf_d_fun(x) - 0.95, c(-5, 15))$root
df_d <- data.frame(x = x_kont, f = pdf_d_fun(x_kont), F = cdf_d_fun(x_kont))
# iCDF via approxfun (unngaar uniroot-feil)
x_vid <- seq(-3, 13, length.out = 3000)
icdf_d_fn <- approxfun(cdf_d_fun(x_vid), x_vid, rule = 2)
p_seq_d <- seq(0.001, 0.999, length.out = 400)
df_icdf_d <- data.frame(p = p_seq_d, x = icdf_d_fn(p_seq_d))
pdf_d <- ggplot(df_d, aes(x, f)) +
geom_area(data = subset(df_d, x >= p05_d & x <= p95_d), fill = col_shade) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(p05_d, p95_d), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_d, y = max(df_d$f) * 0.95,
label = sprintf("x[0.05]==%.2f", p05_d), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_d, y = max(df_d$f) * 0.95,
label = sprintf("x[0.95]==%.2f", p95_d), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
labs(title = "pdf d", x = "x", y = "f(x)") + theme_oblig
cdf_d_plot <- ggplot(df_d, aes(x, F)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_d, 0, p05_d, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_d, 0, p95_d, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_d, y = 0.08,
label = sprintf("%.2f", p05_d), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = p95_d, y = 0.92,
label = sprintf("%.2f", p95_d), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "CDF A", x = "x", y = "F(x)") + theme_oblig
icdf_d_plot <- ggplot(df_icdf_d, aes(p, x)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(0.05, 0, 0.05, p05_d, color = col_mark, linewidth = 0.8) +
seg(0.95, 0, 0.95, p95_d, color = col_mark, linewidth = 0.8) +
annotate("text", x = 0.05, y = 9.5, label = "p==0.05", parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9.5, label = "p==0.95", parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
labs(title = "iCDF (d)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("d", pdf_d, cdf_d_plot, icdf_d_plot)
}, error = function(e) message("FEIL gruppe d: ", e$message))
# ============================================================
# GRUPPE e -- Normal(5, 1.5)
# ============================================================
tryCatch({
mu_e <- 5; sigma_e <- 1.5
p05_e <- qnorm(0.05, mu_e, sigma_e)
p95_e <- qnorm(0.95, mu_e, sigma_e)
df_e <- data.frame(x = x_kont,
f = dnorm(x_kont, mu_e, sigma_e),
F = pnorm(x_kont, mu_e, sigma_e))
p_seq_e <- seq(0.001, 0.999, length.out = 300)
df_icdf_e <- data.frame(p = p_seq_e, x = qnorm(p_seq_e, mu_e, sigma_e))
pdf_e <- ggplot(df_e, aes(x, f)) +
geom_area(data = subset(df_e, x >= p05_e & x <= p95_e), fill = col_shade) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(p05_e, p95_e), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_e, y = max(df_e$f) * 0.95,
label = sprintf("x[0.05]==%.2f", p05_e), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_e, y = max(df_e$f) * 0.95,
label = sprintf("x[0.95]==%.2f", p95_e), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
labs(title = "pdf e", x = "x", y = "f(x)") + theme_oblig
cdf_e_plot <- ggplot(df_e, aes(x, F)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_e, 0, p05_e, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_e, 0, p95_e, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_e, y = 0.08,
label = sprintf("%.2f", p05_e), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = p95_e, y = 0.92,
label = sprintf("%.2f", p95_e), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "CDF H", x = "x", y = "F(x)") + theme_oblig
icdf_e_plot <- ggplot(df_icdf_e, aes(p, x)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(0.05, 0, 0.05, p05_e, color = col_mark, linewidth = 0.8) +
seg(0.95, 0, 0.95, p95_e, color = col_mark, linewidth = 0.8) +
annotate("text", x = 0.05, y = 9,
label = sprintf("%.2f", p05_e), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9,
label = sprintf("%.2f", p95_e), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "iCDF (e)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("e", pdf_e, cdf_e_plot, icdf_e_plot)
}, error = function(e) message("FEIL gruppe e: ", e$message))
# ============================================================
# GRUPPE f -- Uniform(0, 10)
# ============================================================
tryCatch({
p05_f <- qunif(0.05, 0, 10)
p95_f <- qunif(0.95, 0, 10)
df_f <- data.frame(x = x_kont,
f = dunif(x_kont, 0, 10),
F = punif(x_kont, 0, 10))
p_seq_f <- seq(0, 1, length.out = 300)
df_icdf_f <- data.frame(p = p_seq_f, x = qunif(p_seq_f, 0, 10))
pdf_f <- ggplot(df_f, aes(x, f)) +
geom_area(data = subset(df_f, x >= p05_f & x <= p95_f), fill = col_shade) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(p05_f, p95_f), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_f, y = 0.13,
label = sprintf("x[0.05]==%.1f", p05_f), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_f, y = 0.13,
label = sprintf("x[0.95]==%.1f", p95_f), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
ylim(0, 0.15) +
labs(title = "pdf f", x = "x", y = "f(x)") + theme_oblig
cdf_f_plot <- ggplot(df_f, aes(x, F)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_f, 0, p05_f, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_f, 0, p95_f, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_f, y = 0.08,
label = sprintf("%.1f", p05_f), hjust = -0.3, size = 3, color = col_mark) +
annotate("text", x = p95_f, y = 0.92,
label = sprintf("%.1f", p95_f), hjust = 1.3, size = 3, color = col_mark) +
labs(title = "CDF B", x = "x", y = "F(x)") + theme_oblig
icdf_f_plot <- ggplot(df_icdf_f, aes(p, x)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(0.05, 0, 0.05, p05_f, color = col_mark, linewidth = 0.8) +
seg(0.95, 0, 0.95, p95_f, color = col_mark, linewidth = 0.8) +
annotate("text", x = 0.05, y = 9,
label = sprintf("%.1f", p05_f), hjust = -0.3, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9,
label = sprintf("%.1f", p95_f), hjust = 1.3, size = 3, color = col_mark) +
labs(title = "iCDF (f)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("f", pdf_f, cdf_f_plot, icdf_f_plot)
}, error = function(e) message("FEIL gruppe f: ", e$message))
# ============================================================
# GRUPPE g -- Triangel(0, 10). F(x) = x^2/100
# ============================================================
tryCatch({
p05_g <- 10 * sqrt(0.05)
p95_g <- 10 * sqrt(0.95)
pdf_g_f <- function(x) ifelse(x >= 0 & x <= 10, x / 50, 0)
cdf_g_f <- function(x) ifelse(x < 0, 0, ifelse(x > 10, 1, x^2 / 100))
df_g <- data.frame(x = x_kont, f = pdf_g_f(x_kont), F = cdf_g_f(x_kont))
p_seq_g <- seq(0, 1, length.out = 300)
df_icdf_g <- data.frame(p = p_seq_g, x = 10 * sqrt(p_seq_g))
pdf_g <- ggplot(df_g, aes(x, f)) +
geom_area(data = subset(df_g, x >= p05_g & x <= p95_g), fill = col_shade) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(p05_g, p95_g), color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_g, y = 0.23,
label = sprintf("x[0.05]==%.2f", p05_g), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = p95_g, y = 0.23,
label = sprintf("x[0.95]==%.2f", p95_g), parse = TRUE,
hjust = 1.1, size = 3, color = col_mark) +
labs(title = "pdf g", x = "x", y = "f(x)") + theme_oblig
cdf_g_plot <- ggplot(df_g, aes(x, F)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_g, 0, p05_g, 0.05, color = col_mark, linewidth = 0.8) +
seg(p95_g, 0, p95_g, 0.95, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_g, y = 0.08,
label = sprintf("%.2f", p05_g), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = p95_g, y = 0.92,
label = sprintf("%.2f", p95_g), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "CDF F", x = "x", y = "F(x)") + theme_oblig
icdf_g_plot <- ggplot(df_icdf_g, aes(p, x)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(0.05, 0, 0.05, p05_g, color = col_mark, linewidth = 0.8) +
seg(0.95, 0, 0.95, p95_g, color = col_mark, linewidth = 0.8) +
annotate("text", x = 0.05, y = 9.5,
label = sprintf("%.2f", p05_g), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = 9.5,
label = sprintf("%.2f", p95_g), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "iCDF (g)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("g", pdf_g, cdf_g_plot, icdf_g_plot)
}, error = function(e) message("FEIL gruppe g: ", e$message))
# ============================================================
# GRUPPE h -- Eksponensiell(rate=0.2)
# 95. prosentil er ~15, utenfor x-aksen [0,10]
# ============================================================
tryCatch({
rate_h <- 0.2
p05_h <- qexp(0.05, rate_h)
p95_h <- qexp(0.95, rate_h)
df_h <- data.frame(x = x_kont,
f = dexp(x_kont, rate_h),
F = pexp(x_kont, rate_h))
p_seq_h <- seq(0.001, 0.99, length.out = 300)
df_icdf_h <- data.frame(p = p_seq_h, x = qexp(p_seq_h, rate_h))
pdf_h <- ggplot(df_h, aes(x, f)) +
geom_area(data = subset(df_h, x >= p05_h), fill = col_shade) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = p05_h, color = col_mark,
linetype = "dashed", linewidth = 0.8) +
annotate("text", x = p05_h, y = max(df_h$f) * 0.9,
label = sprintf("x[0.05]==%.2f", p05_h), parse = TRUE,
hjust = -0.1, size = 3, color = col_mark) +
annotate("text", x = 4.5, y = max(df_h$f) * 0.45,
label = "x[0.95] == 14.98 (utenfor)", parse = FALSE,
hjust = 0, size = 3, color = col_mark) +
labs(title = "pdf h", x = "x", y = "f(x)") + theme_oblig
cdf_h_plot <- ggplot(df_h, aes(x, F)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_hline(yintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(p05_h, 0, p05_h, 0.05, color = col_mark, linewidth = 0.8) +
annotate("text", x = p05_h, y = 0.08,
label = sprintf("%.2f", p05_h), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = 4, y = 0.95,
label = "x[0.95] = 14.98 (utenfor)", parse = FALSE,
hjust = 0, size = 3, color = col_mark) +
labs(title = "CDF D", x = "x", y = "F(x)") + theme_oblig
icdf_h_plot <- ggplot(df_icdf_h, aes(p, x)) +
geom_line(color = col_curve, linewidth = 0.8) +
geom_vline(xintercept = c(0.05, 0.95), color = col_mark, linetype = "dashed") +
seg(0.05, 0, 0.05, p05_h, color = col_mark, linewidth = 0.8) +
seg(0.95, 0, 0.95, p95_h, color = col_mark, linewidth = 0.8) +
annotate("text", x = 0.05, y = max(df_icdf_h$x) * 0.9,
label = sprintf("%.2f", p05_h), hjust = -0.2, size = 3, color = col_mark) +
annotate("text", x = 0.95, y = max(df_icdf_h$x) * 0.9,
label = sprintf("%.2f", p95_h), hjust = 1.2, size = 3, color = col_mark) +
labs(title = "iCDF (h)", x = "p", y = "F-inv(p)") + theme_oblig
lagre_gruppe("h", pdf_h, cdf_h_plot, icdf_h_plot)
}, error = function(e) message("FEIL gruppe h: ", e$message))
message("\nFerdig! Sjekk konsollen for eventuelle feilmeldinger.")