library(shiny)
# 1. Interface Utilisateur (UI)
ui <- fluidPage(
# Ajout de MathJax pour afficher le LaTeX proprement
withMathJax(),
titlePanel("Visualisation Interactive : Loi Gamma"),
sidebarLayout(
sidebarPanel(
helpText("Modifiez les paramètres pour voir l'impact sur la courbe."),
# Paramètre de Forme (Alpha)
sliderInput("alpha", "Forme (Shape) : \\(\\alpha\\)",
min = 0.1, max = 10, value = 2, step = 0.1),
# Paramètre d'Échelle (Theta)
sliderInput("theta", "Échelle (Scale) : \\(\\theta\\)",
min = 0.1, max = 5, value = 2, step = 0.1),
hr(),
# Rappel de la formule en bas du panneau
helpText("Formule de la densité :"),
uiOutput("latex_formula")
),
mainPanel(
# Zone d'affichage du graphique
plotOutput("gammaPlot"),
# Zone d'affichage des statistiques
wellPanel(
h4("Indicateurs Théoriques"),
textOutput("esperance_text"),
textOutput("variance_text")
)
)
)
)
# 2. Logique Serveur
server <- function(input, output) {
# Affichage de la formule dynamique
output$latex_formula <- renderUI({
withMathJax(
paste0("$$f(x) = \\frac{x^{", input$alpha, "-1} e^{-x/", input$theta, "}}{",
input$theta, "^{", input$alpha, "} \\Gamma(", input$alpha, ")}$$")
)
})
# Graphique utilisant la fonction curve()
output$gammaPlot <- renderPlot({
# On définit la fonction de densité avec les inputs de l'UI
# curve() prend 'expr' comme une fonction de 'x'
curve(dgamma(x, shape = input$alpha, scale = input$theta),
from = 0, to = 30,
n = 300, # Nombre de points pour la précision
col = "#2c3e50", lwd = 3,
main = paste("Densité de la Loi Gamma (", input$alpha, ",", input$theta, ")"),
ylab = "Densité f(x)", xlab = "x",
panel.first = grid())
# Ajout d'une ligne verticale pour l'espérance
esp <- input$alpha * input$theta
abline(v = esp, col = "#e74c3c", lty = 2, lwd = 2)
legend("topright", legend = c("Densité", "Espérance"),
col = c("#2c3e50", "#e74c3c"), lty = c(1, 2), lwd = 2)
})
# Calculs des textes de statistiques
output$esperance_text <- renderText({
paste("L'Espérance (moyenne théorique) est : ", input$alpha * input$theta)
})
output$variance_text <- renderText({
paste("La Variance est : ", input$alpha * (input$theta^2))
})
}
# Lancement de l'application
shinyApp(ui = ui, server = server)Shiny applications not supported in static R Markdown documents