Skip to content

Commit 280e157

Browse files
shiny app 04C_logistique
1 parent 736c07f commit 280e157

File tree

2 files changed

+167
-0
lines changed

2 files changed

+167
-0
lines changed

inst/shiny/04c_logistique/server.R

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#
2+
# This is the server logic of a Shiny web application. You can run the
3+
# application by clicking 'Run App' above.
4+
#
5+
# Find out more about building applications with Shiny here:
6+
#
7+
# http://shiny.rstudio.com/
8+
#
9+
10+
library(shiny)
11+
SciViews::R()
12+
13+
# Define server logic required to draw a histogram
14+
shinyServer(function(input, output) {
15+
16+
output$logis_plot <- renderPlot({
17+
18+
set.seed(42)
19+
20+
logis_exo <- tibble(
21+
time = seq(0, 8, by = 0.1),
22+
popu = SSlogis(time, Asym = 5, xmid = 4, scal = 0.5) + rnorm(
23+
n = length(time), sd = 0.1),
24+
popu_predit = SSlogis(time, Asym = input$asym_ui,
25+
xmid = input$xmid_ui, scal = input$k_ui)
26+
)
27+
28+
chart::chart(logis_exo, popu ~ time) +
29+
ggplot2::geom_point() +
30+
geom_line(f_aes(popu_predit ~ time), color = "red") +
31+
xlab("Temps") +
32+
ylab("Population")
33+
})
34+
35+
output$logis_model <- renderUI({
36+
withMathJax(
37+
sprintf(
38+
"Ton modèle :
39+
$$population = \\frac{%.02f}{1 + e^{\\frac{%.02f - temps}{%.02f}}}$$",
40+
Asym = input$asym_ui,
41+
xmid = input$xmid_ui, scal = input$k_ui))
42+
})
43+
44+
45+
output$logis_resid <- renderUI({
46+
47+
set.seed(42)
48+
49+
logis_exo <- tibble(
50+
time = seq(0, 8, by = 0.1),
51+
popu = SSlogis(time, Asym = 5, xmid = 4, scal = 0.5) + rnorm(
52+
n = length(time), sd = 0.1),
53+
popu_predit = SSlogis(time, Asym = input$asym_ui,
54+
xmid = input$xmid_ui, scal = input$k_ui),
55+
distance2 = (popu_predit - popu)^2
56+
)
57+
58+
value <- sum(logis_exo$distance2)
59+
60+
withMathJax(
61+
sprintf("La valeur de la somme des résidus au carré de ton modèle : $$%.05f$$",
62+
value))
63+
})
64+
65+
66+
output$logis_theo <- renderPlot({
67+
68+
logis_data <- tibble(
69+
t = seq(0, 10, by = 0.1),
70+
y = SSlogis(t, Asym = 0.95, xmid = 5, scal = 0.95)
71+
)
72+
73+
chart(data = logis_data, y ~ t) +
74+
geom_line() +
75+
geom_vline(xintercept = 0, col = "darkgray") +
76+
geom_hline(yintercept = c(0, 0.95/2, 0.95), col = "gray", linetype = "dashed") +
77+
geom_vline(xintercept = 5, col = "gray", linetype = "dashed") +
78+
annotate("text", label = "Asym", x = -0.4, y = 0.95) +
79+
annotate("text", label = "Asym/2", x = -0.5, y = 0.95/2) +
80+
annotate("text", label = "xmid", x = 5.4, y = 0.03) +
81+
annotate("text", label = "point d'inflexion", x = 6, y = 0.45) +
82+
labs(x = "input")
83+
})
84+
85+
})

inst/shiny/04c_logistique/ui.R

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
library(shiny)
2+
3+
titlePanel_h4 <- function(title, windowTitle = title) {
4+
tagList(tags$head(tags$title(windowTitle)), h4(title))
5+
}
6+
7+
# Define UI for application that draws a histogram
8+
shinyUI(
9+
navbarPage(
10+
title = titlePanel_h4("Courbe logistique"),
11+
tabPanel(
12+
"Un peu de théorie",
13+
sidebarLayout(
14+
sidebarPanel(
15+
withMathJax(),
16+
h4("Le Contexte"),
17+
p("Le modèle exponentiel qui décrit une croissance infinie sans
18+
aucunes contraintes n’est pas une hypothèse réaliste. En pratique,
19+
la croissance est limitée par les ressources disponibles.
20+
Verhulst (1838) propose un modèle qui tient compte d'une limite
21+
théorique des ressources disponibles."),
22+
h4("L'équation mathématique :"),
23+
p("$$\\frac{Asym}{1 + e^{\\frac{xmid - input}{scal}}}$$"),
24+
h4("Eléments importants :"),
25+
p("- une croissance exponentielle"),
26+
p("- deux asymptotes horizontales en 0 et en Asym"),
27+
hr(),
28+
h4("La fonction dans R : "),
29+
p("$$SSlogis(input, Asym, xmid, scal)$$"),
30+
h5("Arguments de la fonction : "),
31+
p("input: est un vecteur de nombre représentant le temps."),
32+
p("Asym : est la valeur maximale de y représenté par un asymptote
33+
horizontale."),
34+
p("xmid : est la valeur de input pour y = Asym/2"),
35+
p("scal: exprime la vitesse de croissance. une valeur faible de scal
36+
indique une vitesse lente et un faible valeur de scal indique une
37+
vitesse élevé"),
38+
width = 5
39+
),
40+
mainPanel(
41+
p("Le graphique ci-dessous représente une courbe logistique avec
42+
Asym = 0.95, xmid = 5, scal = 0.95"),
43+
plotOutput("logis_theo"),
44+
width = 7
45+
)
46+
)
47+
),
48+
tabPanel(
49+
title = "A toi de jouer !",
50+
sidebarLayout(
51+
sidebarPanel(
52+
withMathJax(),
53+
p("La courbe logistique permet de modéliser des croissances
54+
exponentielles avec la présence de deux asymptotes horizontales"),
55+
p("L'équation mathématique de la fonction est la
56+
suivante: $$y = \\frac{Asym}{1 + e^{\\frac{xmid - input}{scal}}}$$"),
57+
numericInput(inputId = "asym_ui", label = "Valeur de Asym (asymptote horizontale)",
58+
value = 1.00, min = 0.50, max = 10.00, step = 0.5),
59+
p("Valeur par défaut : 1"),
60+
numericInput(inputId = "xmid_ui", label = "Valeur de xmid",
61+
value = 1.00, min = 0.25, max = 10.00, step = 0.25),
62+
p("Valeur par défaut : 1"),
63+
numericInput(inputId = "k_ui", label = "Valeur de scal",
64+
value = 1.00, min = 0.25, max = 10.00, step = 0.25),
65+
p("Valeur par défaut : 1")
66+
),
67+
mainPanel(
68+
h4("Ajustez le meilleur modèle logistique"),
69+
p("Vous devez ajuster votre modèle en faisant varier les
70+
paramètres du modèle."),
71+
plotOutput("logis_plot"),
72+
hr(),
73+
withMathJax(),
74+
uiOutput("logis_model"),
75+
hr(),
76+
uiOutput("logis_resid"),
77+
hr()
78+
)
79+
)
80+
)
81+
)
82+
)

0 commit comments

Comments
 (0)