NMSA230 - Úvod do programování v R
Zimný semester 2019/2020 | Cvičenie 5 | St 04/12/19
Knitr & Shine
Program piateho cvičenia NMSA 230
-
Práca s datami a jednoduché simulácie
-
R knižnica
Knitr
-
Interaktívne aplikácie prostredníctvom
Shine
Program R (dostupný pod GNU GPL licenciou) je k dispozícii k stiahnutiu (free of charge) na adrese
https://www.r-project.org
K dispozícii sú distribúcie s priamou podporou pre OS Windows, Linux aj Macintosh.
Základnú inštaláciu programu R je možne jednoducho rozšíriť pomocou dodatočných knižníc (balíčkov), ktoré sú k dispozícii na rôznych online repozitároch (zoznam hlavných repozitárov je na adrese https://cran.r-project.org/mirrors.html). Jednotlivé R knižnice sú tvorené samotnými užívateľmi softwaru R a ich správne fungovanie nie je garantované - je preto namieste určitá opatrnosť a hlavne aktívne premýšľanie pri ich používaní.
Pre užívateľov programu R sú k dispozícii aj rôzne grafické rozhrania, ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch) jednoduchšiu a prehľadnejšiu prácu. Najznámejší a pravdepodobne aj jeden z najlepších R interfacov je RStudio.
Užitočné materiály pre prácu so štatistickým softwarom R
-
Bína, V., Komárek, A. a Komárková, L.: Jak na jazyk R. (PDF súbor)
-
Komárek, A.: Základy práce s R. (PDF súbor)
-
Kulich, M.: Velmi stručný úvod do R. (PDF súbor)
-
De Vries, A. a Meys, J.: R for Dummies. (ISBN-13: 978-1119055808)
1. R-ková knižnica ‘Knitr’
Knitr (GNU General Public License) je knižnica pre štatistický program R, ktorá umožňuje integráciu R-kového zdrojového kódu
do HTML jazyka. Výsledkom je súbor html, ktorý je možné prezerať pomocou internetového prehliadača (ako napríklad táto stránka, ktorá bola tiež vytvorená pomocou knižnice ‘Knitr’).
Inštalácia a inicializácia knižnice pomocou štandardných príkazov
install.packages("knitr")
library("knitr")
V niektorých grafických interfacoch (napr. RStudio) je tento balíček nainštalovaný štandardne a volanie príslušnej funkcie je redukované iba na stlačenie príslušného tlačítka v hlavnom menu. Základom je podkladový súbor typu Rmd, ktorý obsahuje jednak zdrojový kód pre html stránku, ale tiež vhodne označené príkazy pre program R. Pri kompilácii podkladového súboru sú R-kové príkazy najprv vyhodnotené a výsledky sú dopĺnené do zdrojového html kódu. Celkovým výstupom je súbor typu html, ktorý je možné prezerať v štandardnom webovom prehliadači.
Niekoľko príkladov aplikácie knižnice ‘Knitr’ v programe R (podkladové súbory je možné otvoriť v programe RStudio a následne skompilovať stlačením tlačítka “Knit” na hlavnej lište):
-
podkladový súbor z prvého cvičenia predmetu NMSA230: Rmd súbor (kódovanie UTF8);
-
podkladový súbor z druhého cvičenia predmetu NMSA230: Rmd súbor (kódovanie UTF8);
-
podkladový súbor z tretieho cvičenia predmetu NMSA230: Rmd súbor (kódovanie UTF8);
-
podkladový súbor zo štvrtého cvičenia predmetu NMSA230: Rmd súbor (kódovanie UTF8);
-
podkladový súbor z piateho cvičenia predmetu NMSA230: Rmd súbor (kódovanie UTF8);
Samostatne
-
Použijte podkladové Rmd súbory uvedené vyššie, otvorte ich v programe RStudio a príslušný Rmd súbor zkompilujte (pomocou tlačítka
Knit HTML v menu).
-
Podkladový Rmd súbor doplňte o vlastnú časť R-kového zdrojového kódu. Pridajte minimálne jeden obrázok a finálny Rmd súbor opäť skompilujte a vytvore výsledný HTML súbor.
2. Štatistická analýza a štatistické simulácie
Nasledujúci príkaz načíta reálne data, ktoré zaznamenávajú rôzne informácie o tehotných pacientkách a následných pôrodoch na gynekologickom oddelení v Liptovskom Mikuláši. Data sú v tvare, jako ich předali samotní lekári.
data <- read.csv("http://www.karlin.mff.cuni.cz/~maciak/NMSA230/gynData.csv", header = T, dec = ".", sep = "")
Data obsahujú množstvo rôznych premenných (väčšina z nich je pre naše účeli nepodstatná) - v prevažnej väčšine sa jedná o rôzne lekárske kritéria, testy a výskyty komplikácii (pozitívny výsledok vs. negatívný výsledok), hodnoty testov na tehotensku cukrovku (veličiny glik1 až glik4 ), popisné charakteristiky pacientky (vek, výška, hmotnosť, BMI), popisné charakteristiky narodeného dieťaťa (pohlavie, obvod hlavy a hrudníka, dĺžka, váha, systolický a diastolický krvný tlak a ďalšie).
names(data)
## [1] "nove" "povodne" "glik1" "glik2"
## [5] "glik3" "glik4" "Vek" "Parita"
## [9] "GestVek" "PrekoncHm" "PorHm" "Vyska"
## [13] "BMIinic" "BMIfinal" "weightGain" "pohlavie"
## [17] "obvodhrud" "obvodHlava" "dlzka" "sTK"
## [21] "dTK" "Apgar1" "Apgar5" "Apgar10"
## [25] "cisarskyREX" "cisarskyVEX" "DYSTOKIO" "sposobPorodu"
## [29] "PEE" "hospit" "velkyPlod" "malyPlod"
## [33] "hmotnost" "HYPERBILIRUb" "Bilirubin" "ATB"
## [37] "POLYCYTEMIA" "Hematokrit" "HYPOGLYKEMIA" "Glykemia"
## [41] "PORANENIE" "TRANSFUZIE"
Podstatné ale je prehliadnúť si data a uvedomiť si niektoré chyby:
table(data$cisarskyREX)
##
## neg pn poz
## 491 1 213
table(data$cisarskyVEX)
##
## neg poz
## 1 693 11
table(data$hospit)
##
## neg nn poz
## 569 1 135
Tieto chyby opravíme pomerne jednoducho:
data$cisarskyREX[which(data$cisarskyREX == "pn")] <- "poz"
data$cisarskyREX <- factor(data$cisarskyREX, levels = c("neg", "poz"))
data$cisarskyVEX[which(data$cisarskyVEX == "")] <- "neg"
data$cisarskyVEX <- factor(data$cisarskyVEX, levels = c("neg", "poz"))
data$hospit[which(data$hospit == "nn")] <- "neg"
data$hospit <- factor(data$hospit, levels = c("neg", "poz"))
Z určitých expertných dôvodov je pre lekárov doležite rozlíšiť staré a nové kritéria (prvé dva stĺpce v datach). Zavedieme preto novú premennú, ktorá bude súhrnne popisovať výsledky oboch kritérii:
data$kriteria <- rep("neg", dim(data)[1])
data$kriteria[data$nove == "poz" & data$povodne == "neg"] <- "posNove"
data$kriteria[data$nove == "neg" & data$povodne == "poz"] <- "posPovd"
data$kriteria[data$nove == "poz" & data$povodne == "poz"] <- "posBoth"
data$kriteria <- as.factor(data$kriteria)
Samostatne
-
Podívajte sa na data a skuste spočítať niektoré základné popisné charakteristiky. Tieto charakteristiky doplňte o vhodne zvolené obrázky, ktoré budú popisné charakteristiky vizuálne reprezentovať.
-
Pokúste sa pomocou popisných charakteristík povedať niečo o starých a nových kritériach na komplikácie (rozlišujete pacientky v závislosti na výsledkoch starých a nových kriterii, resp. na novo-zavedenej premenne
kriteria ).
-
Pomocou popisných charakteristík novorodenca sa pokúste ponúknuť odpoveď na otázku, či je rozdiel medzi novonarodeným chlapcom a novonarodenou holkou.
V nasleduúcej časti sa zameriame pouze na hmotnosť novonarodených deti (premenná hmotnost ). Histogram zo zaznamenaných pozorovaní vyzera takto:
hist(data$hmotnost, xlab= "Hmotnosť novorodenca", freq = F, ylab= "Relatívny výskyt", main = "", col = "lightblue", breaks = 20)
lines(density(data$hmotnost), col = "red", lwd = 2)
lines(dnorm(seq(1500, 5000, length = 10000), mean(data$hmotnost), sd(data$hmotnost)) ~ seq(1500, 5000, length = 10000), col = "blue", lty = 2)

Formálne by sme mohli otestovať, čí namerané hodnoty výšiek novorodencov pochádzajú z normálneho rozdelenia (nulová hypotéza), alebo pochádzajú z nejakého iného rozdelenia (alternatívna hypotéza). Na testovanie takto definovanej nulovej hypotézy máme v pravdepodobnostnej a štatistickej teórii niekoľko rôznych testov, ktoré ale nie sú ekvivalentné.
-
Kolmogorov-Smirnovov test - v programe R implementovány v príkaze
ks.test() ;
ks.test(data$hmotnost,"pnorm",mean=mean(data$hmotnost),sd=sd(data$hmotnost),exact=FALSE)
##
## One-sample Kolmogorov-Smirnov test
##
## data: data$hmotnost
## D = 0.048552, p-value = 0.07203
## alternative hypothesis: two-sided
Shapiro-Wilkův test - v programe R implementovány v príkaze shapiro.test() ;
shapiro.test(data$hmotnost)
##
## Shapiro-Wilk normality test
##
## data: data$hmotnost
## W = 0.99016, p-value = 0.0001164
Jarque-Bera test - v programe R implementovány v knižnici tseries v príkaze jarque.bera.test() ;
library(tseries)
jarque.bera.test(data$hmotnost)
##
## Jarque Bera Test
##
## data: data$hmotnost
## X-squared = 21.75, df = 2, p-value = 1.893e-05
Rozhodnutie o nulovej a alternatívnej hypotéze je rôzne na základe rôznych testov. Ako si vybrať ten správny test? K odpovedi nám pomôže mala simulačná štúdia, ktorá sa bude zameriavať na sílu jednotlivých testov.
N <- c(10, 50, 100, 200, 500, 1000, 2000, 5000)
power <- NULL
set.seed(1234)
for (n in N){
p1 <- p2 <- p3 <- NULL
for (i in 1:100){
x <- rchisq(n, df = 50)
p1 <- c(p1, as.numeric(ks.test(x,"pnorm",mean=mean(x),sd=sd(x),exact=FALSE)$p.value < 0.05))
p2 <- c(p2, as.numeric(shapiro.test(x)$p.value < 0.05))
p3 <- c(p3, as.numeric(jarque.bera.test(x)$p.value < 0.05))
}
power <- rbind(power, c(n, mean(p1), mean(p2), mean(p3)))
}
plot(power[,4] ~ log10(power[,1]), col = "red", type = "l", pch = 21, bg = "red", xlab = "Logarimus rozsahu náhodného výberu", ylab = "Empirická síla testu", ylim = c(0,1))
points(power[,4] ~ log10(power[,1]), pch = 21, bg = "red")
points(power[,3] ~ log10(power[,1]), pch = 21, bg = "blue")
points(power[,2] ~ log10(power[,1]), pch = 21, bg = "green")
lines(power[,3] ~ log10(power[,1]), col = "blue")
lines(power[,2] ~ log10(power[,1]), col = "green")
abline(1,0, col = "black", lty = 3)
legend(1, 1, legend = c("Shapiro-Wilk test", "Jarque-Beta test", "Kolmogorov-Smirnov test"), col = c("blue", "red", "green"), lty= rep(1,3))

Z tohto pohľadu je najsilnejším testom práve Shapiro-Wilkov test. Je potrebné ale pamätať na to, že testy boli spočítane pri konkrétnej alternatíve - skutočné rozdelenie bolo \(\chi^2\) rozdelenie s 50 stupňami voľnosti. Jak sa ale porovnanie v zmysle síly testu zmení, ak zmeníme alternatívu a generovať budeme data z \(t\) rozdelenia s ťažkými chvostmi (t.j. nízke stupne voľnosti)?
N <- c(10, 50, 100, 200, 500, 1000, 2000, 5000)
tdf <- c(2, 5, 10, 50)
set.seed(1234)
PWR <- list()
for (d in 1:length(tdf)){
power <- NULL
for (n in N){
p1 <- p2 <- p3 <- NULL
for (i in 1:100){
x <- rt(n, df = tdf[d])
p1 <- c(p1, as.numeric(ks.test(x,"pnorm",mean=mean(x),sd=sd(x),exact=FALSE)$p.value < 0.05))
p2 <- c(p2, as.numeric(shapiro.test(x)$p.value < 0.05))
p3 <- c(p3, as.numeric(jarque.bera.test(x)$p.value < 0.05))
}
power <- rbind(power, c(n, mean(p1), mean(p2), mean(p3)))
}
PWR[[d]] <- power
}
par(mfrow = c(2,2))
for (d in 1:length(tdf)){
power <- PWR[[d]]
plot(power[,4] ~ log10(power[,1]), col = "red", type = "l", pch = 21, bg = "red", xlab = "Logarimus rozsahu náhodného výberu", ylab = "Empirická síla testu", main = paste("t rozdelenie (df = ", tdf[d],")", sep = ""), ylim = c(0,1))
points(power[,4] ~ log10(power[,1]), pch = 21, bg = "red")
points(power[,3] ~ log10(power[,1]), pch = 21, bg = "blue")
points(power[,2] ~ log10(power[,1]), pch = 21, bg = "green")
lines(power[,3] ~ log10(power[,1]), col = "blue")
lines(power[,2] ~ log10(power[,1]), col = "green")
abline(1,0, col = "black", lty = 3)
legend(1, 1, legend = c("Shapiro-Wilk test", "Jarque-Beta test", "Kolmogorov-Smirnov test"), col = c("blue", "red", "green"), lty= rep(1,3), cex = 0.5)
}

Pri danej alternatíve - studentovo \(t\) rozdelenie s 5 stupňami voľnosti sa zdá, že najsilnejším testom je Jarque-Bera test.
Samostatne
-
Dokážete vysvetliť sledovane správanie sa síly jednotlivých testov?
-
Navrhnite podobnú simulačnú štúdiu pre iné alternatívy a pre iné testy.
-
Ako by to vyzera v prípade simulačnej štúdie, ktorej cieľom by bolo porovnávať dosiahnutú hladinu?
N <- c(10, 50, 100, 200, 500, 1000, 2000, 5000)
set.seed(1234)
power <- NULL
for (n in N){
p1 <- p2 <- p3 <- NULL
for (i in 1:100){
x <- rnorm(n)
p1 <- c(p1, as.numeric(ks.test(x,"pnorm",mean=0,sd=1,exact=FALSE)$p.value < 0.05))
p2 <- c(p2, as.numeric(shapiro.test(x)$p.value < 0.05))
p3 <- c(p3, as.numeric(jarque.bera.test(x)$p.value < 0.05))
}
power <- rbind(power, c(n, mean(p1), mean(p2), mean(p3)))
}
par(mfrow = c(1,1))
plot(power[,4] ~ log10(power[,1]), col = "red", type = "l", pch = 21, bg = "red", xlab = "Logarimus rozsahu náhodného výberu", ylab = "Dosiahnutá hladina testu", main = "", ylim = c(0,0.4))
points(power[,4] ~ log10(power[,1]), pch = 21, bg = "red")
points(power[,3] ~ log10(power[,1]), pch = 21, bg = "blue")
points(power[,2] ~ log10(power[,1]), pch = 21, bg = "green")
lines(power[,3] ~ log10(power[,1]), col = "blue")
lines(power[,2] ~ log10(power[,1]), col = "green")
abline(0.05,0, col = "black", lty = 2, lwd =2)
legend(1, 0.4, legend = c("Shapiro-Wilk test", "Jarque-Beta test", "Kolmogorov-Smirnov test"), col = c("blue", "red", "green"), lty= rep(1,3))

3. R-ková knižnica ‘shiny’
Shiny je (open source) knižnica pre štatistický program R (inštalácia pomocou štandardného príkazu install.packages("shiny") ), ktorá umožňuje vytvárať hyperaktívne webové aplikácie, pomocou ktorých dokáže koncový úžívateľ jednoducho meniť nastavenia a kontrolovať pribeh výpočtu/analýzy nejakého konkrétneho procesu (napr. štatistickej analýzy datového súboru).
Knižnica shiny umožňuje jednoducho premeňiť R-kový zdrojový kód na interaktívnu webovú aplikáciu (vyžaduje k tomu ale tzv. shiny server, ktorý beží na hosťovskom počítači spolu s programom R a umožňuje tak webovej aplikácii na klientskom počítači plnohodnotne fungovať - vyhodnocovať R-kové príkazy v závislosti na klientských modifikáciach, ktoré uskutočnuje priamo vo svojom internetovom prehliadači).
Inšpirácia a niekoľko príkladov vytvorených pomocou knižnice shine : http://shiny.rstudio.com/gallery/
Pre účely tohto cvičenia nebude potrebne inštalovať shine server na hosťovskom počítači. Niekoľko príkladov si ukážeme pouze lokálne a ako hosťovský server nám bude slúžiť priamo počítač, ktorý ma každý k dispozícii a na ktorom pracuje.
K vytvoreniu funkčnej shine aplikácie je potrebných niekoľko krokov:
Najjednoduchší príklad funkčnej shiny aplikácie (ktorá ale v zásade nič nerobí), je vytvorená pomocou nasledujúcej časti R-kového kódu:
library("shiny")
ui <- fluidPage("Hello Word"
### su za zadavaju vstupne informacie (inputs) a zobrazuju sa vystupy (outputs)
)
server <- function(input, output){
### R-kovy zdrojovy kod, ktory vyuziva list input (vstupne informacie) a vytvara z toho list vystupov (output)
}
### spustenie samotnej aplikacie (otvori webovy prehliadac s pozadovanou strankov vytvorenou vo fluidPage())
shinyApp(ui = ui, server = server)
Doležité
Pri spustení R-kového kódu uvedeného vyššie, dôjde k otvoreniu webového prehliadača, v ktorom sa otvorí prázdna stránka s uvítaním “Hello World”. Príkazový riadok v R-ku (konzola v RStudio) zostáva aktívna a nie je možné zadavať prostredníctvom konzoly dalšie príkazy. R-ko očakáva, že príkazy bude dostavať prostredníctvom otvoreného a aktivného webového prehliadača. Keďže nateraz nemáme v prehliadači nič vytvorené (príkaz fluidPage() je prázdny), musíme R-ko ukončiť manuálne, buď kliknutím na tlačítko STOP, alebo stlačením kombinácie kláves CTRL + C.
Všetky hodnoty, ktoré potrebujeme R-ku predať ako vstupné hodnoty, sú automaticky uložené v liste (R object) s názvom input a na jednotlivé zložky listu sa odkazujeme pomocou ID nálepky pri vstupe. Analogicky, všetky výstupy, ktoré server pripraví, aby boli dostupné prostredníctvom klientskej webovej stránky, sa ukladajú do listu (R object) s názvom output a na jednotlivé zložky sa opať odkazujeme pomocou príslušných ID nálepiek.
Nasledujúci príklad umožnuje vykresliť histogram pre náhodný výber z normálneho rozdelenia \(N(\mu, \sigma^2)\) o rozsahu \(n \in \mathbb{N}\), kde všetky tri parametre (\(\mu\), \(\sigma^2 > 0\) aj \(n \in \mathbb{N}\)) môže nastaviť užívateľ prostredníctvom webového prehliadača. Histogram a odhad hustoty sa interaktvívne vykreslí priamo v prehliadači, hneď po zadaní vstupných hodnot.
library("shiny")
ui <- fluidPage(
title = "Simple Example",
sidebarPanel(
sliderInput(inputId = "mean", label = "Choose Mean Value", min = -100, max = 100, value = 0),
sliderInput(inputId = "var", label = "Choose Variance Value", min = 0, max = 10, value = 1),
numericInput("number", label = "Number of Observations", value = 10),
numericInput("breaks", label = "Number of Breaks", value = 10)
),
mainPanel(
plotOutput(outputId = "density")
)
)
server <- function(input, output){
output$density <- renderPlot({sample <- rnorm(input$number, input$mean, sqrt(input$var))
hist(sample, breaks = input$breaks, col = "blue", freq = F)
lines(density(sample), col = "red", lwd = 2)
})
}
shinyApp(ui = ui, server = server)
Ak ste príkazy zadali správne, vo webovom prehliadači by ste mali vidieť niečo podobné:
Pomocou nástrojov na zadávanie vstupných hodnôt na ľavej strane je možné modifikovať nastavenie generátoru náhodných čísel, na základe čoho sa vygeneruje nový/iný náhodný výber a príslušne sa prekresli histogram a odhad hustoty.
Príkazový riadok v RStudio zostáva naďalej aktívny a nie je možné zadavať nové príkazy - program R totiž očakáva vstupné hodnoty, ktoré budu zadané prostredníctvom nástrojov na webovej stránke. V prípade, že chceme R sekciu ukončiť, je nutné stlačiť tlačítko STOP alebo kombináciu kláves CTRL + C.
Doležité
Všimnite si, akým sposobom funguje zadávanie vstupných hodnot a akým spôsobom sú tieto hodnotý predané programu R na sever.
-
v knižnici
shiny je niekoľko rôzných nástrojov na zadávanie vstupných hodnôt - viď napr. http://shiny.rstudio.com/tutorial/lesson3/
-
každý príkaz, ktorý umožnuje zadávať vstupné hodnoty, musí mať priradené jednoznačné ID - pozri prvý argument v príkazoch vyššie. S týmto ID je potom vstupná hodnota predaná v liste
input do R-ka: napr. vstupná hodnota pre voľbu strednej hodnoty je uložena v input$mean ;
-
fiktívny server - v našom prípade užívateľský počítač - využíva hodnoty uložené v liste
input a v sérii R-kových príkazov pripraví príslušný výstup/výstupy, ktoré analogicky uloži do listu output .
-
v druhej časti príkazu
fluidPage() umiestňujeme na webovú stránku pripravené výstupy, ktoré predal server po spracovaní R-kom.
-
analogicky ako v prípade zadávania vstupných hodnôt, aj pre vykresľovanie výstupov je v knižnici
shiny k dispozícii niekoľko užitočných nástrojov - viď napr. http://shiny.rstudio.com/tutorial/lesson4/;
Samostatne
Všimnite si, akým sposobom funguje zadávanie vstupných hodnot a akým spôsobom sú tieto hodnotý predané programu R na sever.
-
Využijte ďalšie možnosti, ktoré ponúka knižnica
shine a pokuste sa vytvorit interaktívnu aplikáciu, pomocou ktorej budete analyzovať nejaky datový súbor, ktorý je k dispozícii v programe R, avšak analýza bude závisieť na uživateľských nastaveniach (napr. výber premenných, voľba podsúboru dat, voľba hladiny spoľahlivosti a pod.).
-
Pokuste sa využiť rôzne možnosti zadávania vstupných informácii a tiež rôzne možnosti prezentovania výstupu.
-
Využijte rôzne varianty k peknému a účelnému usporiadaniu nástrojov na zadávanie vstupných informacii a panelov na vykresľovanie spočítaných výstupov.
-
Komplexnejšia ukážka s využitim viacerých panelov pre rôzne varianty výstupov je napr. nižšie:
library("shiny")
ui <- fluidPage(
title = "Simple Example",
sidebarPanel(
sliderInput(inputId = "mean", label = "Choose Mean Value", min = -100, max = 100, value = 0),
sliderInput(inputId = "var", label = "Choose Variance Value", min = 0, max = 10, value = 1),
numericInput("number", label = "Number of Observations", value = 10),
numericInput("breaks", label = "Number of Breaks", value = 10)
),
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput(outputId = "density")),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Regression", plotOutput(outputId = "regression")),
tabPanel("Regression Summary", verbatimTextOutput("regsum"))
)
)
)
server <- function(input, output){
output$density <- renderPlot({set.seed(1234)
data <- data.frame(1:input$number, rnorm(input$number, input$mean, sqrt(input$var)))
hist(data[,2], breaks = input$breaks, col = "blue", freq = F)
lines(density(data[,2]), col = "red", lwd = 2)
})
output$summary <- renderPrint({set.seed(1234)
data <- data.frame(1:input$number, rnorm(input$number, input$mean, sqrt(input$var)))
summary(data[,2])})
output$regression <- renderPlot({set.seed(1234)
data <- data.frame(1:input$number, rnorm(input$number, input$mean, sqrt(input$var)))
plot(data[,2] ~ data[,1])
model <- lm(data[,2] ~ data[,1], data = data, xlab = "Observation Number", ylab = "Observation Value")
abline(model$coeff[1], model$coeff[2], col = "red", lwd = 2)})
output$regsum <- renderPrint({set.seed(1234)
data <- data.frame(1:input$number, rnorm(input$number, input$mean, sqrt(input$var)))
plot(data[,2] ~ data[,1])
model <- lm(data[,2] ~ data[,1], data = data, xlab = "Observation Number", ylab = "Observation Value")
summary(model)})
}
shinyApp(ui = ui, server = server)
-
Vyskúšajte, čo výššie uvedený skript robí a pokuste sa ho podľa vlastných nápadov vhodne modifikovať. Vygenerovaná webová stránka by mala vyzerať podobne:
Domáca úloha
(Deadline: 6. cvičenie | St: 18.12.2019)
-
Vytvorte jednoduchú simulačnú štúdiu - napr. pre zistenie skutočného pokrytia intervalu spolahlivosti, skutočnej dodržanej hladiny testu, síly testu, konzistencie nejakého konkrétneho odhadu a podobne.
-
Vytvorte tabulku s hlavnými výsledkami simulácie a simulácie doplňte o vhodný obrázok, ktorý bude výsledky ilustrovať.
-
Tabulku spolu s vytvoreným obrázkom doplňte do Váško zápočtového PDF súboru.
|