I am trying to publish my small little shiny application via shinapps.io. But I get the following error message:
Error in func(fname, ...) : app.R did not return a shiny.appobj object.
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne ->
Execution halted
Can someone help by looking at my code? Thanks in advance!
Best regards
library(shiny)
library(ggplot2)
library(patchwork)
library(scales)
# UI für die Shiny App
ui <- fluidPage(
titlePanel("Lineare Regression"),
sidebarLayout(
sidebarPanel(
sliderInput("inter", "Achsenabschnitt:", value = 10000, min = 8500, max = 11000),
sliderInput("sl", "Steigung:", value = -10, min = -300, max = 200)
),
mainPanel(
h4("Funktionweise und Ziel"),
h6("Mit dieser App können Sie prüfen, welche Geradengleichung eine optimale Anpassung (im Sinne des KQ-Kriteriums) an gegebene Daten ermöglicht.
Dazu finden Sie hier Daten zu Preisen und bei diesen Preisen realisierte Mengen. Ihr Ziel ist die Entwicklung einer möglichst guten
Preis-Absatz-Funktion. Wählen Sie dazu eine Steigung und einen Achsenabschnitt für ihre Funktion auf der linken Seite aus. Sie sehen dann
in der linken Visualisierung, wie nah ihre Gerade an den Ausgangsdaten ist (die vertikalen Linien zeigen Ihnen die Abweichung zwischen beobachteten Werten und der Prognose).
Auf der rechten Seite sehen Sie das Ergebnis einer linearen
Regression. Im unteren Panel können Sie die (Sum of Squares Residuals) für beide Konfigurationen vergleichen"),
plotOutput("comb_plot", width="100%"),
plotOutput("sse_plot", width="100%", height="200px")
)
)
)
# Server-Funktion für die Shiny App
server <- function(input, output) {
output$comb_plot <- renderPlot({
inter <- input$inter
sl <- input$sl
Preis <- seq(1,10.5,0.5)
data <- data.frame(Preis, "Menge"= c(9763,9439,9101,8850,8908,9031,9076,9096,
9123, 9305, 8680, 8438, 9090, 8629, 8825, 8381,
8572, 8397, 8281, 8726))
pred <- sl *data$Preis + inter
model <- lm(Menge ~ Preis, data=data)
pred_lm <- -100.83*data$Preis + 9465.33
resi_sse <- data.frame("Prognose"= c("Manuell", "lin. Regression") ,"SSE" = c(sum((data$Menge - pred)^2), sum((data$Menge - pred_lm)^2)))
p1 <- ggplot(data, aes(Preis,Menge)) + geom_point() + geom_abline(slope = sl, intercept = inter) + geom_point(aes(y=pred), shape = 1)+
geom_segment(aes(xend=Preis, yend = pred), colour="blue", linewidth = 1.0) + ggtitle("Manuelle Wahl der Parameter")
p2 <- ggplot(data, aes(Preis,Menge)) + geom_point() + geom_abline(slope = model$coefficients[2], intercept = model$coefficients[1]) + geom_point(aes(y=pred_lm), shape = 1)+
geom_segment(aes(xend=Preis, yend = pred_lm), colour="red", linewidth = 1.0) +ggtitle("Regression mittles KQ-Schätzung")
p1+p2 + plot_layout(ncol=2)
})
output$sse_plot <- renderPlot({
inter <- input$inter
sl <- input$sl
Preis <- seq(1,10.5,0.5)
data <- data.frame(Preis, "Menge"= c(9763,9439,9101,8850,8908,9031,9076,9096,
9123, 9305, 8680, 8438, 9090, 8629, 8825, 8381,
8572, 8397, 8281, 8726))
pred <- sl *data$Preis + inter
model <- lm(Menge ~ Preis, data=data)
pred_lm <- -100.83*data$Preis + 9465.33
resi_sse <- data.frame("Art"= c("Manuell", "lin. Regression") ,"SSE" = c(sum((data$Menge - pred)^2), sum((data$Menge - pred_lm)^2)))
ggplot(resi_sse, aes(y = Art, x = SSE, fill = Art)) + geom_bar(stat = "identity", fill=c("blue","red")) +
scale_x_continuous(labels= comma_format(big.mark = ".", decimal.mark=",")) + ggtitle("Prognosegüte (Sum of Squared Residuals) im Vergleich")+
theme(legend.position="bottom")
})
}
# Shiny App starten
shinyApp(ui = ui, server = server)