Skip to content

Commit

Permalink
add regression
Browse files Browse the repository at this point in the history
  • Loading branch information
petr-pavlik committed Dec 10, 2024
1 parent eddc690 commit 1e0198d
Show file tree
Hide file tree
Showing 108 changed files with 1,149,853 additions and 6,174 deletions.
346 changes: 114 additions & 232 deletions 09_casove_rady.qmd

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions 09_casove_rady_files/execute-results/html 2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"hash": "a6431ef8e8962c40804228e19e57cfe1",
"result": {
"markdown": "# Časové řady {#sec-casoverady}\n\n::: callout-warning\n## Cíle cvičení\n\n - Umět definovat časovou řadu s pomocí `ts()`.\n - Detekovat přítomnost trendu, bodu zlomu.\n - Umět aplikovat klouzavý průměr jako zhlazovací funkci.\n:::\n\nČasové řady jsou chronologicky uspořádané posloupnosti hodnot jednoho nebo více\nstatistických ukazatelů.\n\n$$\nY(t) = f(t)\n$$\n\nČasové řady rozeznáváme deterministické, stochastické s konstantním nebo proměnlivým \nčasovým krokem. Časovou řadu nazýváme **homogenní**, pokud hodnoty jednolivých členů\npozorované řady odrážejí pouze přirozenou proměnlivost studované veličiny.\n\n\n\nFunkce pro základní statistické zpracování časových řad opět nalezneme v balíčku `stats`. \n\n::: {.cell}\n\n```{.r .cell-code}\nargs(stats::ts)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nfunction (data = NA, start = 1, end = numeric(), frequency = 1, \n deltat = 1, ts.eps = getOption(\"ts.eps\"), class = if (nseries > \n 1) c(\"mts\", \"ts\", \"matrix\", \"array\") else \"ts\", names = if (!is.null(dimnames(data))) colnames(data) else paste(\"Series\", \n seq(nseries))) \nNULL\n```\n:::\n:::\n\n\n\n::: callout-note\n## Další zdroje\nZpracování časových řad je jedním ze základních tématických okruhů v R. Stejně \njako je tomu u ostatních okruhů, můžeme může být užitečné se zorientovat studiem \npříslušného [CRAN Task View](https://cran.r-projecet.org/web/views/TimeSeries.html).\n:::\n\nBudeme pracovat se dvěma datovými sadami:\n \n 1. Časovou řadou historických měření z pražského Klementina od roku 1776.\n 2. Vnitřní datová sada R `co2`, kterou nahrajete pomocí funkce `data()`\n\n\n\n\n\n## `ts()` objekt\n\n::: callout-tip\n## Úloha\n 1. Nejprve vhodnou funkcí nahrajte datovou sadu `klementinum.rds`.\n 2. Vytvořte formát datumu (`Date`) sjednocením sloupců `yr`, `mon`, `day`. \n U sloupců s denními a měsíčními hodnotami je nutné nejprve doplnit na \n dvoumístný formát (napří. `02` místo `2`). Použijte nápovědu k funkci\n `sprinft()`.\\ \n Výsledek by měl vypadat takto:\n\n::: {.cell}\n::: {.cell-output .cell-output-stdout}\n```\n yr mon day tavg tmax tmin sra date\n1 1775 1 1 -7.0 -4.8 -10.1 NA 1775-01-01\n2 1775 1 2 -2.2 -1.4 -5.8 NA 1775-01-02\n3 1775 1 3 -1.0 0.6 -2.2 NA 1775-01-03\n4 1775 1 4 0.1 2.5 -3.6 NA 1775-01-04\n5 1775 1 5 2.2 3.0 1.6 NA 1775-01-05\n6 1775 1 6 3.2 4.0 1.6 NA 1775-01-06\n7 1775 1 7 3.5 4.0 3.1 NA 1775-01-07\n```\n:::\n:::\n\n 3. Datovou sadu máme nahranou ověřte, zda se jedná o časovou řadu `is.ts()`\n a udělejte si základní obrázek o průběhu veličin s pomocí grafů. Inspirujte\n se v @sec-grafy.\n:::\n\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\nplot(main = \"Klementinum 1776 - 2023, průměrná denní teplota \", \n x = klementinum$date, \n y = klementinum$tavg, \n type = \"p\", \n cex = 0.1, \n col = \"#00000050\", \n ylab = expression(T[avg]), \n xlab = \"\")\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-4-1.svg){fig-align='center'}\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nmd1 <- lm(tmin ~ yr + mon + day, data = klementinum)\n```\n:::\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\nplot(main = \"Klementinum 1776 - 2023, průměrná denní teplota \", \n x = klementinum$date, \n y = klementinum$tavg, \n type = \"p\", \n cex = 0.1, \n col = \"#00000050\", \n ylab = expression(T[avg]), \n xlab = \"\")\ncoefficients(md1)[1]\n```\n:::\n\n\n\nČasová řada v R je určena \n\n::: {.cell}\n\n```{.r .cell-code}\nklementinum_ts <- ts(\n data = klementinum$tavg, \n start = c(klementinum$yr[1], klementinum$mon[1], klementinum$day[1]), \n deltat = 1/365.25)\n```\n:::\n\n\n## Autokorelace\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\nokno <- seq(from = as.POSIXct(\"1990-01-01\"), \n to = as.POSIXct(\"2020-12-31\"), \n by = 3600*24)\nklementinum90_20 <- klementinum[klementinum$date %in% okno, ]\npar(mfrow = c(1, 3))\nsapply(X = c(1, 2, 3), \n FUN = function(x) \n plot(cex = 0.5, \n col = \"#00000080\", \n klementinum90_20$tavg[-c(4883:(4883 - x + 1))], \n klementinum90_20$tavg[-c(1:x)])\n )\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-8-1.svg){fig-align='center'}\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n[[1]]\nNULL\n\n[[2]]\nNULL\n\n[[3]]\nNULL\n```\n:::\n:::\n\n\n\n## Parciální autokorelace\n\n\n::: {.cell}\n\n```{.r .cell-code}\nacf(klementinum$tavg)\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-9-1.svg)\n:::\n\n```{.r .cell-code}\npacf(klementinum$tavg)\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-9-2.svg)\n:::\n:::\n\n\n\n## Aditivní a multiplikativní řady\n\n## Box-Jenkins analýza\n\n### Klouzavé průměry\n\n### Sezónní složka\n\n$$\ny = \\alpha + \\beta\\sin(2\\pi t) + \\gamma\\cos(2\\pi t)+ \\epsilon\n$$\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmd2 <- lm(tavg ~ sin(klementinum90_20$date*2*pi) + cos(klementinum90_20$date*2*pi), data = klementinum90_20)\nplot(fitted.values(md2))\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nmd3 <- arima(x = klementinum_ts, order = c(0,1,1))\ntsdiag(md3)\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-11-1.svg)\n:::\n:::\n\n\n\n<!-- Využijeme znalostí z -->\n\n<!-- ```{r, fig.align='center'} -->\n<!-- hydroplot <- function(srazka, vypar, odtok, ...) { -->\n<!-- plot(odtok, -->\n<!-- ylim = c(-max(odtok), -->\n<!-- 2*max(odtok)), -->\n<!-- yaxt = \"n\", -->\n<!-- xlab = \"\", -->\n<!-- ylab = \"\", -->\n<!-- ...) -->\n<!-- axis(2, -->\n<!-- at = round(signif(seq(0, max(odtok), length = 5), 2))) -->\n<!-- abline(h = 0, lty = 3) -->\n<!-- par(new = TRUE) -->\n<!-- plot(x = time(srazka), -->\n<!-- y = as.numeric(srazka), -->\n<!-- col = \"dodgerblue4\", -->\n<!-- type = \"h\", -->\n<!-- ylim = rev(c(0, 3*max(srazka))), -->\n<!-- xlab = \"\", -->\n<!-- ylab = \"\", -->\n<!-- axes = FALSE, ...) -->\n<!-- axis(4, -->\n<!-- at = round(signif(seq(0, max(odtok), length = 5), 2))) -->\n<!-- par(new = TRUE) -->\n<!-- deltaet <- max(vypar) - min(vypar) -->\n<!-- plot(x = time(vypar), -->\n<!-- y = as.numeric(vypar), col = \"salmon1\", type = \"l\", -->\n<!-- ylim = c(min(vypar), max(vypar) + 2.5*deltaet), -->\n<!-- xlab = \"\", -->\n<!-- ylab = \"\", -->\n<!-- axes = FALSE, ...) -->\n<!-- axis(4, -->\n<!-- at = round(signif(seq(min(vypar), max(vypar), length = 5), 2), 1)) -->\n<!-- } -->\n\n<!-- dframe <- ts(data = data.frame(P = 1:365, EP = 21:385,Q = 31:395), -->\n<!-- start = c(2024, 1, 1), -->\n<!-- frequency = 525960) -->\n<!-- time(dframe) -->\n\n<!-- hydroplot(srazka = dframe[, \"P\"], -->\n<!-- vypar = dframe[, \"EP\"], -->\n<!-- odtok = dframe[, \"Q\"], -->\n<!-- xlim = as.Date(c(\"2001-09-01\",\"2001-09-21\"))) -->\n<!-- title(\"rainfall, runoff and potential evaporation (mm/d)\", -->\n<!-- cex.main = 1.25, -->\n<!-- font.main = 1) -->\n<!-- ``` -->\n\n<!-- ## Autokorelační funkce -->\n\n<!-- Slouží k posouzení, zda časová řada obsahuje cyklickou či periodickou složku a také, zda je či není řadou náhodných čísel. Graficky je vyjádřena pomocí *korelogramu*. -->\n\n<!-- ```{r, fig.cap=\"Vlevo řada se silnou autokorelací složek bez znatelené periodicity, vpravo dtto s periodickou složkou\"} -->\n<!-- par(mfrow = c(1, 2)) -->\n<!-- acf(dataset$R) -->\n<!-- acf(co2) -->\n<!-- ``` -->\n\n\n<!-- ## Dekompozice časové řady -->\n\n<!-- Dekompozicí časové řady rozumíme rozklad na složky: -->\n\n<!-- 1. Trendovou $T_t$ -->\n<!-- 2. Sezónní $S_t$ -->\n<!-- 3. Cyklickou $C_t$ -->\n<!-- 4. Náhodnou $\\epsilon_t$ -->\n\n<!-- ### Aditivní dekompozice -->\n\n<!-- Předpokládáme, že řadu lze rozložit na součet složek -->\n\n<!-- $$ -->\n<!-- Y_t =T_t +S_t +C_t +\\epsilon_t, -->\n<!-- $$ -->\n\n<!-- ```{r} -->\n<!-- dec_co2 <- decompose(co2) -->\n<!-- plot(dec_co2) -->\n<!-- plot(dec_co2$trend) -->\n<!-- ``` -->\n\n<!-- ### Residua -->\n\n<!-- Ověřte, zda po dekompozici `co2` residua $\\epsilon_t$ splňují definici *bílého šumu* -->\n<!-- tzn. mají nulovou střední hodnotu a konečný rozptyl a jsou nekorelované. -->\n\n<!-- ```{r} -->\n<!-- shapiro.test(dec_co2$random) -->\n<!-- mean(dec_co2$random, na.rm = TRUE) -->\n<!-- var(dec_co2$random, na.rm = TRUE) -->\n<!-- # ... -->\n<!-- ``` -->\n\n<!-- ## Zhlazovací funkce -->\n\n<!-- ```{r} -->\n<!-- par(mfrow = c(1, 2)) -->\n<!-- plot(dataset$Tmin, type = \"l\", -->\n<!-- col = \"slategray\", -->\n<!-- lwd = 0.5) -->\n<!-- md1 <- loess(Tmin ~ na.omit(1:length(dataset$Tmin)), -->\n<!-- data = dataset, -->\n<!-- degree = 1) -->\n<!-- lines(md1$fitted, col = \"orangered\") -->\n\n<!-- plot(filter(x = dataset$R, -->\n<!-- method = \"convolution\", -->\n<!-- filter = c(rep(1/365.25, 365.25)), -->\n<!-- sides = 1), -->\n<!-- col = \"dodgerblue3\", -->\n<!-- type = \"l\") -->\n<!-- ``` -->\n\n<!-- ```{r} -->\n<!-- md2 <- lm(Tmin ~ DTM, data = dataset) -->\n<!-- plot(dataset$Tmin, type = \"l\", -->\n<!-- col = \"slategray\", -->\n<!-- lwd = 0.5) -->\n<!-- lines(md1$fitted, col = \"darkred\") -->\n<!-- abline(coef(md2), col = \"orangered\") -->\n\n<!-- ``` -->\n\n\n\n\n\n\n",
"supporting": [
"09_casove_rady_files/figure-html"
],
"filters": [
"rmarkdown/pagebreak.lua"
],
"includes": {},
"engineDependencies": {},
"preserve": {},
"postProcess": true
}
}
16 changes: 16 additions & 0 deletions 09_casove_rady_files/execute-results/html.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"hash": "088ebede24f1b742ead36cf287955cfc",
"result": {
"markdown": "# Časové řady {#sec-casoverady}\n\n::: callout-warning\n## Cíle cvičení\n\n - Umět definovat časovou řadu s pomocí `ts()`.\n - Detekovat přítomnost trendu, bodu zlomu.\n - Umět aplikovat klouzavý průměr jako zhlazovací funkci.\n:::\n\nČasové řady jsou chronologicky uspořádané posloupnosti hodnot jedné nebo více\nsledovaných veličin.\\\nČasové řady rozeznáváme deterministické, stochastické s konstantním nebo proměnlivým \nčasovým krokem. Budeme procvičovat řady stochastické. Dále časovou řadu nazýváme \n**homogenní**, pokud hodnoty jednolivých členů pozorované řady odrážejí pouze \npřirozenou proměnlivost studované veličiny.\\\nCíli analýzy časové řady je jednak pochopení a určení modelu, generujícího sledovaná\ndata, jednak predikce vývoje na základě tohoto modelu.\n\n\nFunkce pro základní statistické zpracování časových řad opět nalezneme v balíčku `stats`. \n\n::: {.cell}\n\n```{.r .cell-code}\nargs(stats::ts)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nfunction (data = NA, start = 1, end = numeric(), frequency = 1, \n deltat = 1, ts.eps = getOption(\"ts.eps\"), class = if (nseries > \n 1) c(\"mts\", \"ts\", \"matrix\", \"array\") else \"ts\", names = if (!is.null(dimnames(data))) colnames(data) else paste(\"Series\", \n seq(nseries))) \nNULL\n```\n:::\n:::\n\n\n\n::: callout-note\n## Další zdroje\nZpracování časových řad je jedním ze základních tématických okruhů v R. Stejně \njako je tomu u ostatních okruhů, můžeme může být užitečné se zorientovat studiem \npříslušného [CRAN Task View](https://cran.r-projecet.org/web/views/TimeSeries.html).\n:::\n\nBudeme pracovat se dvěma datovými sadami:\n \n 1. Časovou řadou historických měření z pražského Klementina od roku 1776.\n 2. Vnitřní datová sada R `co2`, kterou nahrajete pomocí funkce `data()`\n\n\n\n\n\n## `ts()` objekt\n\n::: callout-tip\n## Úloha\n 1. Nejprve vhodnou funkcí nahrajte datovou sadu `klementinum.rds`.\n 2. Vytvořte formát datumu (`Date`) sjednocením sloupců `yr`, `mon`, `day`. \n U sloupců s denními a měsíčními hodnotami je nutné nejprve doplnit na \n dvoumístný formát (napří. `02` místo `2`). Použijte nápovědu k funkci\n `sprinft()`.\\ \n Výsledek by měl vypadat takto:\n\n::: {.cell}\n::: {.cell-output .cell-output-stdout}\n```\n yr mon day tavg tmax tmin sra date\n1 1775 1 1 -7.0 -4.8 -10.1 NA 1775-01-01\n2 1775 1 2 -2.2 -1.4 -5.8 NA 1775-01-02\n3 1775 1 3 -1.0 0.6 -2.2 NA 1775-01-03\n4 1775 1 4 0.1 2.5 -3.6 NA 1775-01-04\n5 1775 1 5 2.2 3.0 1.6 NA 1775-01-05\n6 1775 1 6 3.2 4.0 1.6 NA 1775-01-06\n7 1775 1 7 3.5 4.0 3.1 NA 1775-01-07\n```\n:::\n:::\n\n 3. Datovou sadu máme nahranou ověřte, zda se jedná o časovou řadu `is.ts()`\n a udělejte si základní obrázek o průběhu veličin s pomocí grafů. Inspirujte\n se v @sec-grafy.\n:::\n\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\nplot(main = \"Klementinum 1776 - 2023, průměrná denní teplota \", \n x = klementinum$date, \n y = klementinum$tavg, \n type = \"p\", \n cex = 0.1, \n col = \"#00000050\", \n ylab = expression(T[avg]), \n xlab = \"\")\n```\n:::\n\n::: {.cell layout-align=\"center\"}\n\n:::\n\n\n![](images/chapter_9_fig_1.png)\n\n## Dekompozice časové řady\n\nProces identifikace a rozkladu časové řady na trendovou, sezónní, cyklickou a \nnáhodnou složku buďto v **aditivním** nebo **multiplikativním** typu. \nVelmi silné tam, kde je silný trend nebo stabilní sezónní složka.\n\n$$\n\\begin{array}{c}\nY(t)=T_t + S_t + C_t + R_t\\\\ \nY(t)=T_t \\times S_t\\times C_t\\times R_t\n\\end{array}\n$$\n\n### Trendová složka\n\nTrend je obecná tendence vývoje zkoumaného jevu za delší období; může být lineární\nči nelineární. Může být rostoucí či klesající. Časové řady bez trendu se označují \nza **stacionární**.\n\nModel trendu můžeme odhadnout pomocí lineárního modelu `lm()`. Můžeme vytvořit rovnou \ntři varianty trendu: lineární, kvadratický a kubický. Vyhodnotíme pomocí **Akaikeho\ninformačního kritéria**.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmd1 <- lm(tavg ~ I(date), \n data = klementinum)\nmd2 <- lm(tavg ~ date + I(as.numeric(date)^2), \n data = klementinum)\nmd3 <- lm(tavg ~ date + I(as.numeric(date)^2) + I(as.numeric(date)^3), \n data = klementinum)\nres <- as.numeric(lapply(X = list(md1, md2, md3), FUN = AIC))\nnames(res) <- c(\"md1\", \"md2\", \"md3\")\nres\n```\n:::\n\n\n\n\n![](images/chapter_9_fig_2.png)\n\nČasovou řadu zbavenou trendu.\n\n\n::: {.cell}\n\n:::\n\n![](images/chapter_9_fig_3.png)\n\nČasová řada v R je určena \n\n::: {.cell}\n\n```{.r .cell-code}\nklementinum_ts <- ts(\n data = klementinum$tavg, \n start = c(klementinum$yr[1], klementinum$mon[1], klementinum$day[1]), \n deltat = 1/365.25)\n```\n:::\n\n\n### Sezónní složka\n\nSezónní složka představuje periodickou změnu, která se odehrává v průběhu roku \nopakovaně.\n\n### Cyklická složka\n\nCyklická složka je oscialce kolem trendu, která může mít proměnlivou periodu i \namplitudu se složitě identifikovatelnou příčinností.\n\n### Náhodná složka\n\nZahrnuje nejistoty v měření, zpracování apod. U dobře určeného modelu má tato složka\ncharakter bílého šumu\n\n$$\n\\mathbb{E}X_t = 0 \\mathrm{\\:pro\\:všechna\\:} t\\:\\text{a var}(X) < \\infty\n$$\n*Posloupnost náhodných veličin nazveme bílý šum, pokud jde o posloupnost centrovaných\nnekorelovaných veličin s kladným konečným rozptylem.*\\\n\n## Box-Jenkins analýza (ARIMA proces)\n\nTento pohled je založen na přístupu k řadě jako stochastickému procesu, který \nje možné zachytit kombinací autoregresní složky, integrační složky a klouzavého\nprůměru. Využívá se pro simulace časových řad. \n\nARIMA(p, d, q)\n\n### Autokorelace\n\nJe korelace sama se sebou. \n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Define the time window and subset the data\nokno <- seq(from = as.POSIXct(\"1990-01-01\"), \n to = as.POSIXct(\"2020-12-31\"), \n by = 3600*24)\nklementinum90_20 <- klementinum[klementinum$date %in% okno, ]\n\n# Set up a multi-panel plotting window\npar(mfrow = c(1, 3))\n\n# Apply the plotting and trend line logic\nsapply(X = c(1, 30, 90), \n FUN = function(x) {\n # Create lagged variables\n lagged_x <- klementinum90_20$tavg[-c(1:x)]\n lagged_y <- klementinum90_20$tavg[-c((length(klementinum90_20$tavg) - x + 1):length(klementinum90_20$tavg))]\n \n # Scatter plot\n plot(lagged_x, lagged_y, \n cex = 0.5, col = \"#00000080\", \n xlab = paste(\"Lag\", x), ylab = \"Tavg\",\n main = paste(\"Lag =\", x))\n \n # Fit linear model and add trend line\n lm_fit <- lm(lagged_y ~ lagged_x)\n abline(lm_fit, col = \"#660033\", lwd = 2)\n }\n)\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-10-1.svg){fig-align='center'}\n:::\n:::\n\n\n\n### Parciální autokorelace\n\nVyjadřuje vztah mezi hodnotou v čase $t$ a hodnotou lag $t$, po ošetření korelace\n\nStupeň určujeme pomocí funkce `pacf()`, \n\n\n::: {.cell layout-align=\"center\"}\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-11-1.svg){fig-align='center'}\n:::\n:::\n\n\n### Klouzavé průměry\n\nKlouzavý průměr je zhlazovací funkcí, jejíž využití má prostor například v odhadu\ncyklické složky časové řady\n\n::: callout-tip\n## Úloha\n\n 5. Odfiltrujte posledních 5 let z data frame `klementinum` a uložte do\n proměnné `klementinum_last_5`.\n:::\n\n\n\n::: {.cell}\n\n:::\n\n\nNapíšeme shlazovací funkci pro 30denní okno a vykreslíme do grafu:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nma <- function(x, window = 30) {\n filtr <- rep(1/window, window)\n stats::filter(x, filtr)\n}\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nplot(klementinum_last_5$tavg, \n col = \"#00000075\", \n cex = 0.5, \n main = \"30denní klouzavý průměr Klementinum 2019 - 2023\")\nlines(ma(klementinum_last_5$tavg), col = \"#006666\", lwd = 3)\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-14-1.svg)\n:::\n:::\n\n\n### Sezónní složka\n\nSezónní složku je možné simulovat následující rovnicí\n\n$$\ny = \\alpha + \\beta\\sin(2\\pi t) + \\gamma\\cos(2\\pi t)+ \\epsilon\n$$\n\nkde $\\alpha$ je itne\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\nmd2 <- lm(\n tavg ~ sin(as.numeric(klementinum90_20$date)*2*pi) + \n cos(as.numeric(klementinum90_20$date)*2*pi), \n data = klementinum90_20)\nplot(sin(as.numeric(klementinum90_20$date)*2*pi) + \n cos(as.numeric(klementinum90_20$date)*2*pi), type = \"l\")\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-15-1.svg){fig-align='center'}\n:::\n\n```{.r .cell-code}\nplot(klementinum90_20$tavg - fitted.values(md2), \n type = \"p\", \n cex = 0.1, \n col = \"#00000050\")\n```\n\n::: {.cell-output-display}\n![](09_casove_rady_files/figure-html/unnamed-chunk-15-2.svg){fig-align='center'}\n:::\n:::\n",
"supporting": [
"09_casove_rady_files/figure-html"
],
"filters": [
"rmarkdown/pagebreak.lua"
],
"includes": {},
"engineDependencies": {},
"preserve": {},
"postProcess": true
}
}
Loading

0 comments on commit 1e0198d

Please sign in to comment.