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

Załóżmy, że chcemy badać populację o rozkładzie normalnym ze średnią 3 i odchyleniem standardowym 1. i) Wygeneruj przykładową populację liczności 25 o takim rozkładzie (funkcja rnorm()). ii) Wygeneruj 1000 prób o liczności 25 z otrzymanych danych (funkcja replicate()). iii) Oblicz średnią każdej z 1000 wylosowanych prób bootstrapowych oraz przedstaw histogram rozkładu tych średnich. Porównaj ten rozkład z rozkładem cechy (rozkładem normalnym N (3;1)). Oceń, czy przybliżenie rozkładu metodą bootstrap jest adekwatne (czy kształty obu rozkładów są podobne) iv) Porównaj średnią wygenerowanej próby wyjściowej ze średnią wektora średnich z prób bootstrapowych. Oceń ich różnicę. v) Przy użyciu funkcji boot (pakiet boot) wyznacz błąd standardowy dla średniej.

library(boot)

# Ustawienie ziarna losowości
set.seed(123)

# i) Generowanie przykładowej populacji
populacja <- rnorm(25, mean = 3, sd = 1)

# ii) Generowanie 1000 prób bootstrapowych
licznosc <- length(populacja)
próby <- replicate(1000, sample(populacja, replace = TRUE))

# iii) Obliczanie średnich z prób bootstrapowych i histogramu
średnie <- apply(próby, 2, mean)
hist(średnie, breaks = 30, col = "lightblue", main = "Rozkład średnich prób bootstrapowych")

# Porównanie z rozkładem cechy
linia_normalna <- seq(min(średnie), max(średnie), length.out = 100)
krzywa_normalna <- dnorm(linia_normalna, mean = mean(średnie), sd = sd(średnie))
lines(linia_normalna, krzywa_normalna, col = "red", lwd = 2)

# iv) Porównanie średnich prób bootstrapowych z próbą wyjściową
średnia_wyjściowa <- mean(populacja)
średnia_bootstrapowa <- mean(średnie)
różnica <- średnia_wyjściowa - średnia_bootstrapowa
print(paste("Różnica między średnimi:", różnica))
## [1] "Różnica między średnimi: 0.00965324170074755"
# v) Obliczanie błędu standardowego dla średniej przy użyciu funkcji boot
estymator_boot <- function(data, i) {
  return(mean(data[i]))
}

boot_obj <- boot(data = populacja, statistic = estymator_boot, R = 1000)
błąd_standardowy <- boot_obj$se[1]
print(paste("Błąd standardowy dla średniej:", błąd_standardowy))
## [1] "Błąd standardowy dla średniej: 10403"
m <- function(probki,i){mean(probki[i])}
boot(próby, m, 1000)
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = próby, statistic = m, R = 1000)
## 
## 
## Bootstrap Statistics :
##     original       bias    std. error
## t1* 2.866068 -0.004027818   0.2116814
  1. Wygenerowaliśmy przykładową populację o rozkładzie normalnym o średniej 3 i odchyleniu standardowym 1.

  2. Z otrzymanej populacji wygenerowaliśmy 1000 prób bootstrapowych o liczności 25. Próby bootstrapowe są losowymi próbkami z powtórzeniami pobranymi z populacji.

  3. Obliczając średnią każdej z 1000 prób bootstrapowych, otrzymaliśmy rozkład średnich prób bootstrapowych. Następnie przedstawiliśmy ten rozkład za pomocą histogramu. Porównaliśmy go z rozkładem cechy, który jest rozkładem normalnym o średniej równiej średniej średnich prób bootstrapowych i odchyleniu standardowym obliczonym na podstawie tych średnich. Jeśli rozkład średnich prób bootstrapowych jest podobny do rozkładu cechy, to możemy stwierdzić, że metoda bootstrapowa adekwatnie przybliża rozkład cechy.

  4. Porównaliśmy średnią wygenerowanej próby wyjściowej z średnią wektora średnich z prób bootstrapowych. Różnica między tymi średnimi informuje nas o odchyleniu wyników próby wyjściowej od średnich prób bootstrapowych.

  5. Przy użyciu funkcji boot z pakietu boot obliczyliśmy błąd standardowy dla średniej na podstawie wygenerowanej próby, który wynosi0.2116814. Błąd standardowy jest miarą rozproszenia średnich prób bootstrapowych i wskazuje, jak dokładnie estymujemy średnią populacji na podstawie próby.

Otrzymane wyniki pozwalają nam ocenić dokładność i adekwatność metody bootstrapowej w estymacji błędu standardowego średniej próbkowej dla analizowanej populacji.

###Zadanie 2. Estymacja przedziałowa średniej metodą bootstrap.

  1. Wygeneruj próbkę losową 50 obserwacji wybranej zmiennej z pliku dane.sav (funkcja sample()). Jako populację potraktuj cały zbiór N-obserwacji w pliku.
  2. Oszacuj przedziałowo (klasycznie – stosując aproksymację rozkładem normalnym) oraz nieklasycznie (stosując funkcję boot.ci()) średnią wybranej zmiennej w próbce. Oblicz oraz porównaj oba błędy standardowe (względny %) estymacji przedziałowej klasycznej i nieklasycznej. Podaj wnioski.
#wczytanie pliku 
library(haven)
dane <- read_sav("dane.sav")
head(dane)
## # A tibble: 6 × 9
##   Wojewodztwo Powierzchnia_mieszka…¹ Oplaty_miesieczne_GD Calkowity_dochod_GD_…²
##   <dbl+lbl>                    <dbl>                <dbl>                  <dbl>
## 1 12 [Malopo…                     80                 112.                   550 
## 2 10 [Lodzki…                     18                 741.                  1062.
## 3  2 [Dolnos…                     29                 188                    623 
## 4 14 [Mazowi…                     28                 184.                  1168.
## 5 32 [Zachod…                     53                 247.                  1736.
## 6 30 [Wielko…                     24                 140.                   565.
## # ℹ abbreviated names: ¹​Powierzchnia_mieszkalna, ²​Calkowity_dochod_GD_GUS
## # ℹ 5 more variables: Calkowite_wydatki_GD_GUS <dbl>, Dochod_na_osobe <dbl>,
## #   Calkowity_dochod_GD_dane <dbl>, Wiek_glowy_rodziny <dbl>, Wiek <dbl>
# i) Generowanie próbki losowej
próbka <- sample(dane$Dochod_na_osobe, size = 50)

# ii) Estymacja przedziałowa średniej
# Estymacja klasyczna
średnia_klasyczna <- mean(próbka)
błąd_standardowy_klasyczny <- sd(próbka) / sqrt(length(próbka))
przedział_klasyczny <- c(średnia_klasyczna - 1.96 * błąd_standardowy_klasyczny,
                         średnia_klasyczna + 1.96 * błąd_standardowy_klasyczny)

# Estymacja nieklasyczna z wykorzystaniem funkcji boot.ci()
estymator_boot <- function(data, index) {
  return(mean(data[index]))
}

boot_obj <- boot(data = próbka, statistic = estymator_boot, R = 1000)
błąd_standardowy_boot <- boot_obj$se[1]
przedział_boot <- boot.ci(boot_obj, type = "basic")$basic

# Obliczanie błędów standardowych w % względem estymacji przedziałowej klasycznej
błąd_standardowy_procent_klasyczny <- (błąd_standardowy_boot - błąd_standardowy_klasyczny) / błąd_standardowy_klasyczny * 100

# Wyświetlanie wyników
print("Estymacja przedziałowa klasyczna:")
## [1] "Estymacja przedziałowa klasyczna:"
print(paste("Średnia:", średnia_klasyczna))
## [1] "Średnia: 1067.40444885254"
print(paste("Przedział:", przedział_klasyczny))
## [1] "Przedział: 845.335587397909" "Przedział: 1289.47331030717"
print("Estymacja przedziałowa nieklasyczna:")
## [1] "Estymacja przedziałowa nieklasyczna:"
print(paste("Średnia:", mean(boot_obj$t)))
## [1] "Średnia: 1066.48518903198"
print(paste("Przedział:", przedział_boot))
## [1] "Przedział: 0.95"             "Przedział: 975.98"          
## [3] "Przedział: 25.03"            "Przedział: 847.017357299013"
## [5] "Przedział: 1280.17890128207"
print("Porównanie błędów standardowych w % względem estymacji przedziałowej klasycznej:")
## [1] "Porównanie błędów standardowych w % względem estymacji przedziałowej klasycznej:"
print(paste("Błąd standardowy klasyczny:", błąd_standardowy_klasyczny))
## [1] "Błąd standardowy klasyczny: 113.300439517668"
print(paste("Błąd standardowy nieklasyczny:", błąd_standardowy_boot))
## [1] "Błąd standardowy nieklasyczny: 10403"
print(paste("Błąd standardowy % względem klasycznego:", błąd_standardowy_procent_klasyczny))
## [1] "Błąd standardowy % względem klasycznego: 9081.78256349813"

Interpretacja wyników:

  1. Wygenerowaliśmy próbkę losową o rozmiarze 50 z danych wczytanych z pliku “dane.sav”, traktując cały zbiór N-obserwacji jako populację.

  2. Dokonaliśmy estymacji przedziałowej średniej wybranej zmiennej w próbce.

Estymacja klasyczna:

Obliczyliśmy średnią próbki oraz błąd standardowy estymacji klasycznej, korzystając z aproksymacji rozkładem normalnym. Przedział klasyczny został wyznaczony, uwzględniając błąd standardowy i poziom ufności 95%. Estymacja nieklasyczna z wykorzystaniem funkcji boot.ci():

-Za pomocą funkcji boot() zastosowaliśmy metodę bootstrap, aby oszacować rozkład statystyki próbkowej (średniej) na podstawie próby bootstrapowej.

-Obliczyliśmy błąd standardowy estymacji nieklasycznej na podstawie uzyskanych wyników bootstrapowych.

-Przedział nieklasyczny został wyznaczony przy użyciu funkcji boot.ci(), korzystając z metody “basic”.

-Porównaliśmy także błędy standardowe estymacji przedziałowej klasycznej i nieklasycznej. Obliczony błąd standardowy w % względem estymacji przedziałowej klasycznej wskazuje, o ile różni się błąd standardowy nieklasyczny od klasycznego.

Wnioski:

Estymacja przedziałowa klasyczna i nieklasyczna dają różne wyniki. Przedziały estymacji nieklasycznej mogą być szersze lub węższe niż przedziały estymacji klasycznej. Różnica między błędami standardowymi sugeruje, że estymacja przedziałowa nieklasyczna może dawać większe lub mniejsze błędy standardowe w porównaniu do estymacji klasycznej. Ta różnica może wynikać z różnych założeń i metod estymacji. Decyzja o wyborze metody estymacji przedziałowej powinna być oparta na kontekście badania i dokładności, którą chcemy osiągnąć w naszych wynikach.