{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Statystyka i Analiza danych\n", "# Laboratorium 4 - Estymatory\n", "\n", "### Ćwiczenie 1: Badanie obciążenia estymatorów średniej i wariancji\n", "\n", "Na początku utworzymy populację, losując 1000 liczb z rozkładu jednostajnego:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "r_populacji <- 1000\n", "populacja <- runif(r_populacji, 5, 17)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Następnie wygenerujemy 200 prób o rozmiarze 15:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "r_proby <- 15\n", "l_prob <- 200\n", "losowe_indeksy <- sample(1:r_populacji, size=r_proby*l_prob, replace=TRUE)\n", "proby <- matrix(populacja[losowe_indeksy], r_proby, l_prob)\n", "colnames(proby) <- paste(\"próba\",1:ncol(proby))\n", "proby" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Oblicz statystyki opisowe dla populacji:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pop_var <- function(data)\n", "{\n", " #TODO wariancja dla populacji \n", "}\n", "\n", "opis_popul <- c(\"średnia\"=TODO, \"wariancja\"=TODO, \"odchylenie standardowe\"=TODO)\n", "opis_popul" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dla każdej próby wyznacz estymator średniej, estymator wariancji oraz obciążoną wersję estymatora wariancji. Możesz użyć funkcji `apply`. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "estymator_srednia <- #TODO\n", "estymator_wariancja <- #TODO\n", "obciazony_estymator_wariancja <- #TODO" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Następnie dla każdego z estymatorów wyznacz wartość oczekiwaną (uśredniając po próbach) oraz obciążenie:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "wiersze <- c(\"Wartość oczekiwana\", \"Obciążenie\")\n", "kolumny <- c(\"Estymator średnia\", \"Estymator wariancja\", \"Estymator obciążony wariancja\")\n", "\n", "wartosci_oczekiwane <- #TODO wartości oczekiwane estymatora średniej, wariancji i obciążonego estymatora wariancji \n", "obciazenia <- #TODO obciążenia estymatora średniej, wariancji i obciążonego estymatora wariancji\n", "\n", "matrix(c(rbind(wartosci_oczekiwane, obciazenia)), length(wiersze), length(kolumny), dimnames=list(wiersze, kolumny))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dla estymatora wartości średniej policz dodatkowo odchylenie standardowe i teoretyczne odchylenie standardowe:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "c(\"Odchylenie standardowe\"=TODO,\"Teoretyczne\"=TODO)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Utwórz histogram wartości estymatora średniej:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#TODO histogram" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie 2: Badanie estymacji przedziałowej. \n", "Na początek wygenerujemy 200 prób o rozmiarze 20 z rozkładu normalnego. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "r_proby <- 15\n", "l_prob <- 200\n", "m <- 0\n", "sigma <- 1\n", "\n", "proby <- matrix(rnorm(r_proby*l_prob, m, sigma), r_proby, l_prob)\n", "colnames(proby) <- paste(\"próba\", 1:ncol(proby))\n", "proby" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wyznacz kolejno dla każdej próby estymator średniej (możesz użyć funkcji `apply`), lewy i prawy koniec przedziału, szerokość przedziału oraz wypisz czy prawdziwa średnia znalazła się w przedziale." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "poziom_istotnosci <- 0.05\n", "kwantyl <- #TODO\n", "\n", "estymator_srednia <- #TODO\n", "l_koniec_przedzialu <- #TODO\n", "p_koniec_przedzialu <- #TODO\n", "szerokosc_przedzialu <- #TODO\n", "czy_srednia_w_przedziale <- #TODO\n", "\n", "round(matrix(c(rbind(estymator_srednia, l_koniec_przedzialu, p_koniec_przedzialu, szerokosc_przedzialu, czy_srednia_w_przedziale)), 5, l_prob, dimnames = list(c(\"Estymator średniej\", \"L koniec przedziału\", \"P koniec przedziału\", \"Szerokość przedziału\", \"Średnia w przedziale?\"),colnames(proby))),3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Następnie wyznacz prawdopodobieństwo uśredniając po 200 próbach. Czy zmiana m i sigma wpływa na to prawdopodobieństwo?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "c(\"Pr(średnia w przedziale)\"=TODO)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie 3: Badanie zgodności estymatorów średniej i wariancji\n", "Zacznij od wygenerowania n losowych liczb z rozkładu normalnego:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "n <- 1000\n", "m <- 0\n", "sigma <- 1\n", "\n", "losowe <- #TODO" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wyznacz wartości estymatora średniej oraz wariancji i porównaj ją z prawdziwymi wartościami dla rosnącej liczby zmiennych (możesz użyć funkcji `sample`). Błąd przyjmij w sensie kwadratu różnicy między wartością prawdziwą a estymowaną." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "estymatory <- matrix(rep(0, (n-1)*4), n-1, 4, dimnames=list(1:(n-1),c(\"Średnia\", \"Wariancja\", \"Błąd średnia\", \"Błąd wariancja\")))\n", "\n", "for (i in (2:n))\n", "{\n", " estymatory[i-1,\"Średnia\"] <- #TODO\n", " estymatory[i-1,\"Wariancja\"] <- #TODO\n", "}\n", "\n", "estymatory[,\"Błąd średnia\"] <- #TODO\n", "estymatory[,\"Błąd wariancja\"] <- #TODO\n", "\n", "estymatory" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot_estimate <- function(data, estimate_name, error_name, plot_name, true_value)\n", "{\n", " y_limits <- c(min(0,min(data[,estimate_name])),max(max(data[,estimate_name]),max(data[,error_name])))\n", " plot(data[,estimate_name], t='l',col='blue', ylab=\"wartość\", xlab=\"n\", main=plot_name, ylim=(y_limits))\n", " lines(data[,error_name], col='red')\n", " abline(h=true_value, col='green')\n", " e_name <- tolower(estimate_name)\n", " legend('topright', c(paste(\"Estymator\",e_name), error_name, paste(\"Prawdziwa wartość\",e_name)), lty=1, col=c('blue', 'red', 'green'))\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Utwórz wykresy estymatora średniej oraz wariancji i ich błędu dla rosnącej ilości zmiennych. Skorzystaj z funkcji `plot_estimate`. Wykres dla estymatora średniej:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#TODO wykres dla estymatora średniej" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wykres dla estymatora wariancji:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#TODO wykres dla estymatora wariancji" ] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 1 }