Zad 1. Estymacja błędu standardowego średniej próbkowej metodą bootstrap.

Poniżej znajduje się wygenerowany przykład populacji o liczności 25 z rozkładu normalnego o średniej 3 i odchyleniu standardowym 1

populacja <- rnorm(25, mean = 3, sd = 1)
print(populacja)
##  [1] 3.7930132 3.5222513 4.7462222 1.7286639 5.1973895 3.4331308 1.4298004
##  [8] 2.0650943 3.0634933 2.9976067 0.7232188 3.7574122 2.4515944 3.1725495
## [15] 3.5628531 4.5118180 3.6590252 4.1220281 2.2153586 2.5743077 3.3929976
## [22] 3.0367571 1.9679163 1.7351385 2.7730347

Na podstawie wygenerowanej populacji poniżej zostaje wygenerowane 1000 prób o liczności 25

próby <- replicate(1000, sample(populacja, size = 25, replace = TRUE))

Następnie z wykorzystaniem funkcji apply zostają obliczone średnie dla wszystkich prób

średnie <- apply(próby, 2, mean)
# Wyświetlanie histogramu średnich prób bootstrapowych
hist(średnie, breaks = 30, col = "lightyellow", main = "Histogram średnich prób bootstrapowych", xlab = "Średnie prób")

# Obliczanie parametrów dla funkcji normalnej
mean_val <- mean(średnie)
sd_val <- sd(średnie)

# Tworzenie punktów na osi x dla wykresu funkcji normalnej
x <- seq(min(średnie), max(średnie), length.out = 100)

# Obliczanie wartości funkcji normalnej dla punktów x
y <- dnorm(x, mean = mean_val, sd = sd_val)

# Skalowanie wartości funkcji normalnej do wartości histogramu
max_y <- max(hist(średnie, plot = FALSE)$counts)
y_scaled <- y * max_y / (max(y)*2)

# Dodawanie wykresu funkcji normalnej do histogramu
lines(x, y_scaled, col = "blue", lwd = 2)

Jak widać na podstawie histogramu średnich prób bootstrapowych, rozkład średnich nie odwzierciedla idelanie rozkładu normalnego dla zadanych wartości. Jest on delikatnie przesunięty w prawo. Nie są to natomiast odchylenia, które są znaczne.

Poniżej dodatkowo zostały obliczone średnie dla populacji i całej próby

 # Obliczanie średniej wygenerowanej próby wyjściowej
średnia_próba_wyjściowa <- mean(populacja)

# Obliczanie średniej wektora średnich z prób bootstrapowych
średnia_prób_bootstrapowych <- mean(średnie)

# Obliczanie różnicy średnich
różnica <- średnia_próba_wyjściowa - średnia_prób_bootstrapowych
## [1] 3.025307
## [1] 3.041074
## [1] -0.01576697

Na podstawie powyższych wyników można stwierdzić, że średnia prób bootstrapowych jest bardzo zbliżona do średniej uzyskanej z oryginalnej próby danych. Błąd wynosi około 0,004, wobec czego można sądzić, że jest niewielki. Szacowana średnia wartość prób okazała się być niewiele mniejsza aniżeli średnia obliczona z próby wyjściowej.

# Definiowanie funkcji do obliczania średniej
oblicz_srednia <- function(data, xx) {
  return(mean(data[xx]))
}

# Wykorzystywanie funkcji boot do obliczenia błędu standardowego dla średniej
błąd_std <- boot(data = populacja, statistic = oblicz_srednia, R = 1000)

print(błąd_std)
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = populacja, statistic = oblicz_srednia, R = 1000)
## 
## 
## Bootstrap Statistics :
##     original      bias    std. error
## t1* 3.025307 -0.00307225   0.2080688

Analizując wyniki estymacji błędu standardowego dla średniej, uzyskane przy użyciu funkcji boot, można zauważyć, że wartość estymowanego błędu standardowego wynosi 0.2080688 Oznacza to, że wartość średnia próby jest obarczona tym błędem, co sugeruje, że istnieje pewne rozproszenie wokół prawdziwej wartości średniej populacji.

Wnioskiem z tego wyniku jest to, że wyniki średnich prób bootstrapowych nie są całkowicie precyzyjne i mogą się różnić od prawdziwej wartości średniej populacji. Oszacowany błąd standardowy średniej wskazuje na pewną niepewność w pomiarze średniej.

Zad 2. Estymacja przedziałowa średniej metodą bootstrap.

set.seed(21)
# Wczytanie pliku danych
dane <- haven::read_sav("./dane.sav")

# Wygenerowanie próby losowej o rozmiarze 50 z populacji
próba <- sample(dane$Oplaty_miesieczne_GD, size = 50, replace = FALSE)

# Oszacowanie przedziałowe klasyczne (aproksymacja rozkładem normalnym)
średnia_klasyczna <- mean(próba)
błąd_std_klasyczny <- sd(próba) / sqrt(length(próba))
przedział_klasyczny <- c(średnia_klasyczna - 1.96 * błąd_std_klasyczny, średnia_klasyczna + 1.96 * błąd_std_klasyczny)

# Oszacowanie przedziałowe nieklasyczne (funkcja boot.ci())
próba_boot <- boot(próba, statistic = function(data, i) mean(data[i]), R = 1000)
przedział_boot <- boot.ci(próba_boot, type = "basic")

# Obliczenie błędów standardowych (względny %)
błąd_std_klasyczny_procent <- (błąd_std_klasyczny / średnia_klasyczna) * 100
błąd_std_nieklasyczny_procent <- ((przedział_boot$basic[5] - przedział_boot$basic[4]) / 2 / średnia_klasyczna) * 100
## Przedział klasyczny: 300.6317 409.1791
## Przedział nieklasyczny: 0.95 975.98 25.03 302.4084 408.6118
## Błąd standardowy klasyczny (procent) 7.802265
## Błąd standardowy nieklasyczny (procent) 14.96221

Przedziały estymacyjne, zarówno klasyczny, jak i nieklasyczny, reprezentują zakres wartości, w których znajduje się prawdopodobna wartość średniej populacyjnej na podstawie dostępnych danych próbnych. Przedział klasyczny jest oparty na aproksymacji rozkładem normalnym, podczas gdy przedział nieklasyczny jest obliczany przy użyciu metody bootstrap.

Szerokość przedziału: Przedział nieklasyczny (0.95 - 975.98) jest znacznie szerszy niż przedział klasyczny (300.6317 409.1791). Oznacza to, że przedział nieklasyczny ma większą niepewność i jest bardziej rozszerzony, obejmując większy zakres wartości możliwych dla średniej populacyjnej.

Błąd standardowy: Błąd standardowy nieklasyczny (14,96%) jest większy niż błąd standardowy klasyczny (7,80%). To oznacza, że estymacja przedziałowa nieklasyczna jest bardziej zmienna i ma większy błąd estymacji w porównaniu do estymacji przedziałowej klasycznej.

Podsumowując, wyniki przedstawione w kodzie wskazują na różnice w zakresie przedziałów i błędów estymacji między podejściami nieklasycznym a klasycznym. Wybór odpowiedniej metody zależy od specyfiki badania i celu analizy.