library(shiny)
## Warning: package 'shiny' was built under R version 4.3.3
library(car)
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
library(readxl)
# Define UI for the application
ui <- fluidPage(
titlePanel("Statistical Analysis and Modeling - Project 2"),
sidebarLayout(
sidebarPanel(
fileInput("datafile", "Upload Data File", accept = c(".csv", ".xlsx")),
uiOutput("response_var"),
uiOutput("predictor_vars"),
actionButton("analyze", "Run Analysis")
),
mainPanel(
tabsetPanel(
tabPanel("Model Summary", verbatimTextOutput("modelSummary")),
tabPanel("VIF Check", verbatimTextOutput("vifOutput")),
tabPanel("Diagnostic Plots", plotOutput("diagPlot"))
)
)
)
)
# Define server logic
server <- function(input, output, session) {
# Reactive data reading
data <- reactive({
req(input$datafile)
ext <- tools::file_ext(input$datafile$name)
if (ext == "xlsx") {
read_excel(input$datafile$datapath)
} else {
read.csv(input$datafile$datapath)
}
})
# Dynamic UI for variable selection
output$response_var <- renderUI({
req(data()) # Ensure data is available
var_names <- names(data())
selectInput("response", "Select Response Variable:", choices = var_names)
})
output$predictor_vars <- renderUI({
req(data()) # Ensure data is available
var_names <- names(data())
selectInput("predictors", "Select Predictor Variables:", choices = var_names, multiple = TRUE)
})
# Analysis logic
observeEvent(input$analyze, {
req(input$response)
req(input$predictors)
df <- data()
predictors <- input$predictors
response <- input$response
# Validate the selected response and predictors
if (response %in% names(df) && all(predictors %in% names(df))) {
# Create the formula for the linear model
formula <- as.formula(paste(response, "~", paste(predictors, collapse = "+")))
# Fit the model
model <- lm(formula, data = df)
# Render the model summary
output$modelSummary <- renderPrint({ summary(model) })
# Render the VIF output
output$vifOutput <- renderPrint({ vif(model) })
# Render diagnostic plots
output$diagPlot <- renderPlot({
par(mfrow = c(2, 2))
plot(model)
})
} else {
# Error message if the response or predictors are invalid
output$modelSummary <- renderPrint({ "Invalid response or predictor variables selected." })
}
})
}
# Run the application
shinyApp(ui = ui, server = server)
Shiny applications not supported in static R Markdown documents