---
title: "Analysis of Patient Knowledge Data"
author: "Your Name"
output: html_notebook
---

```{r setup, include=FALSE}
# Load necessary libraries
if(!requireNamespace("readxl", quietly = TRUE)) install.packages("readxl")
if(!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if(!requireNamespace("magrittr", quietly = TRUE)) install.packages("magrittr")
if(!requireNamespace("broom", quietly = TRUE)) install.packages("broom")
if(!requireNamespace("kableExtra", quietly = TRUE)) install.packages("kableExtra")

library(readxl)
library(dplyr)
library(magrittr)
library(broom)
library(kableExtra)
  
# Load the data from the Excel file
data_file <- "PatientKnowledge_no missed2.xlsx"

# Read the data from the Excel sheets
data <- readxl::read_excel(data_file, sheet = "analysis")
variables_info <- readxl::read_excel(data_file, sheet = "variables final")

# Display the first few rows of the data
head(data)

# Define outcome variables and covariates
outcome_vars <- c("Total_UnderstandingDiseaseScore", 
                  "Total_TreatmentScore", 
                  "Total_RiskANDPrognosisScore", 
                  "TotalOverall")

covariates <- c("AgeGuardian", "gender_guardian", "Education_Guardian", 
                "education_guardian2", "OccupationGuardian", 
                "GuardianRelation_to_child", "Relation_Level", 
                "governorate", "AgeChildMonths", "TimeSinceDiagnosisMonths", 
                "gender_child", "education_child", "number_siblings", 
                "child_orderToSiblings", "child_order_LessCategories", 
                "residency_governorate", "ResidenceAreaInEgypt", 
                "residency_status", "OPStatus", "number_operations", 
                "family_history_Glaucoma", "GuardianChronicDiseases", 
                "have_heard_glaucoma_before", 
                "how_know_aboutGlaucoma_Relatives", 
                "how_know_aboutGlaucoma_Doctors", 
                "how_know_aboutGlaucoma_TV", 
                "how_know_aboutGlaucoma_Internet", 
                "how_know_aboutGlaucoma_Others", "ReferredBy", 
                "Percieved_knowledge_needs_1", 
                "have_you_tried_to_learn_about_Glaucoma")

# Subset and transform the data
analysis_data <- data %>%
  dplyr::select(all_of(outcome_vars), all_of(covariates)) %>%
  dplyr::mutate(across(where(is.character), as.factor))

# Display the structure of the data
str(analysis_data)

# Correlation between outcome variables and numeric covariates
numeric_vars <- c("AgeGuardian", "AgeChildMonths", "number_siblings", "number_operations")
cor_results <- cor(analysis_data %>% dplyr::select(all_of(outcome_vars), all_of(numeric_vars)), use = "complete.obs")

# Display the correlation matrix
cor_results %>% 
  knitr::kable(caption = "Correlation Matrix between Outcome Variables and Numeric Covariates") %>%
  kableExtra::kable_styling(full_width = FALSE)


# Perform regression analysis for each outcome variable
regression_results <- lapply(outcome_vars, function(outcome) {
  formula <- as.formula(paste(outcome, "~", paste(covariates, collapse = " + ")))
  model <- lm(formula, data = analysis_data)
  summary(model)
})

# Extract coefficients and p-values
coefficients_table <- bind_rows(lapply(regression_results, function(model_summary) {
  broom::tidy(model_summary) %>%
    dplyr::select(term, estimate, std.error, p.value)
}), .id = "outcome")

# Display the coefficients table
coefficients_table %>% 
  knitr::kable(caption = "Regression Coefficients and P-Values for Outcome Variables") %>%
  kableExtra::kable_styling(full_width = FALSE)


# Summarize the main findings
# Highlight significant covariates and their impact on outcome variables

summary_table <- coefficients_table %>%
  dplyr::filter(p.value < 0.05) %>%
  dplyr::arrange(outcome, p.value)

summary_table %>%
  knitr::kable(caption = "Summary of Significant Covariates") %>%
  kableExtra::kable_styling(full_width = FALSE)


# End of R Notebook

