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.
|