Init simple web-app
This commit is contained in:
77
app.qmd
Normal file
77
app.qmd
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
title: "Data Science Methods for Forecasting in Energy and Economics"
|
||||||
|
date: 2025-07-10
|
||||||
|
format:
|
||||||
|
revealjs:
|
||||||
|
embed-resources: true
|
||||||
|
footer: ""
|
||||||
|
execute:
|
||||||
|
daemon: false
|
||||||
|
highlight-style: github
|
||||||
|
---
|
||||||
|
|
||||||
|
#### B-spline Basis Functions
|
||||||
|
|
||||||
|
```{ojs}
|
||||||
|
bsplineData = FileAttachment("basis_functions.csv").csv({ typed: true })
|
||||||
|
```
|
||||||
|
|
||||||
|
```{ojs}
|
||||||
|
knotValues = Array.from(new Set(bsplineData.map(d => d.knots))).sort((a, b) => a - b)
|
||||||
|
minKnots = Math.min(...knotValues)
|
||||||
|
maxKnots = Math.max(...knotValues)
|
||||||
|
|
||||||
|
muValues = Array.from(new Set(bsplineData.map(d => d.mu))).sort((a, b) => a - b)
|
||||||
|
minMu = Math.min(...muValues)
|
||||||
|
maxMu = Math.max(...muValues)
|
||||||
|
```
|
||||||
|
|
||||||
|
```{ojs}
|
||||||
|
// Create a more compact layout for controls
|
||||||
|
viewof controls = Inputs.form({
|
||||||
|
knots: Inputs.range([minKnots, maxKnots], {value: minKnots, step: 1, label: "Knots:", width: 200}),
|
||||||
|
mu: Inputs.range([minMu, maxMu], {value: 0.5, step: 0.1, label: "μ:", width: 200})
|
||||||
|
}, {
|
||||||
|
submit: false,
|
||||||
|
layout: 'horizontal',
|
||||||
|
style: 'display: flex; gap: 20px; align-items: center; margin-bottom: 10px; font-size: 0.9em;'
|
||||||
|
})
|
||||||
|
|
||||||
|
selectedKnots = controls.knots
|
||||||
|
selectedMu = controls.mu
|
||||||
|
```
|
||||||
|
|
||||||
|
```{ojs}
|
||||||
|
filteredBspline = bsplineData.filter(function(row) {
|
||||||
|
return selectedKnots == row.knots && Math.abs(selectedMu - row.mu) < 0.001;
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
```{ojs}
|
||||||
|
Plot.plot({
|
||||||
|
grid: true,
|
||||||
|
y: {domain: [0, 0.7]},
|
||||||
|
x: {label: "x", domain: [0, 1]},
|
||||||
|
marks: [
|
||||||
|
Plot.line(filteredBspline, {
|
||||||
|
x: "x",
|
||||||
|
y: "y",
|
||||||
|
stroke: "b",
|
||||||
|
strokeWidth: 5,
|
||||||
|
}),
|
||||||
|
Plot.ruleY([0])
|
||||||
|
],
|
||||||
|
color: {
|
||||||
|
legend: false,
|
||||||
|
label: "Basis Function"
|
||||||
|
},
|
||||||
|
marginRight: 80,
|
||||||
|
width: 800,
|
||||||
|
height: 400,
|
||||||
|
// title: `B-spline Basis Functions (${selectedKnots} knots, μ = ${selectedMu})`
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
::: {.callout-note}
|
||||||
|
TODO
|
||||||
|
:::
|
||||||
52
test.R
Normal file
52
test.R
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# %%
|
||||||
|
library(profoc)
|
||||||
|
library(ggplot2)
|
||||||
|
library(tidyr)
|
||||||
|
library(dplyr)
|
||||||
|
library(readr)
|
||||||
|
|
||||||
|
# Creating faceted plots for different knot values and mu values
|
||||||
|
# Create a function to generate the data for a given number of knots and mu value
|
||||||
|
generate_basis_data <- function(num_knots, mu_value) {
|
||||||
|
B <- profoc:::make_basis_matrix(1:99 / 100,
|
||||||
|
profoc::make_knots(
|
||||||
|
n = num_knots,
|
||||||
|
mu = mu_value,
|
||||||
|
sig = 1,
|
||||||
|
nonc = 0,
|
||||||
|
deg = 1
|
||||||
|
),
|
||||||
|
deg = 3
|
||||||
|
)
|
||||||
|
df <- as.data.frame(as.matrix(B))
|
||||||
|
df$x <- 1:99 / 100
|
||||||
|
df_long <- pivot_longer(df,
|
||||||
|
cols = -x,
|
||||||
|
names_to = "b",
|
||||||
|
values_to = "y"
|
||||||
|
)
|
||||||
|
df_long$knots <- num_knots # Store knot count as numeric
|
||||||
|
df_long$mu <- mu_value # Add mu parameter information
|
||||||
|
return(df_long)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate data for each combination of knot value and mu value
|
||||||
|
knot_values <- 5:10
|
||||||
|
mu_values <- seq(0.1, 0.9, by = 0.1)
|
||||||
|
|
||||||
|
# Create an empty list to store all combinations
|
||||||
|
all_data <- list()
|
||||||
|
counter <- 1
|
||||||
|
|
||||||
|
# Generate data for all combinations
|
||||||
|
for (k in knot_values) {
|
||||||
|
for (m in mu_values) {
|
||||||
|
all_data[[counter]] <- generate_basis_data(k, m)
|
||||||
|
counter <- counter + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Combine all data frames
|
||||||
|
all_data <- bind_rows(all_data)
|
||||||
|
|
||||||
|
write_csv(all_data, "basis_functions.csv")
|
||||||
Reference in New Issue
Block a user