library(readr)
Exp3_OnBeads_Aldh1 <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.On.Beads/Exp3.OnBeads.Aldh1.csv", row.names = 1)
dim(Exp3_OnBeads_Aldh1)
## [1] 7766    4
Exp3_OnBeads_Meta <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.On.Beads/Exp3.OnBeads.Meta.csv", row.names = 1)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.On.Beads/Exp3.OnBeads.Meta.csv'
row.names(Exp3_OnBeads_Meta) == colnames(Exp3_OnBeads_Aldh1)
## [1] TRUE TRUE TRUE TRUE
# Step 1: Identify Turbo samples based on metadata
turbo_samples <- rownames(Exp3_OnBeads_Meta)[Exp3_OnBeads_Meta$Group == "Turbo"]

# Step 2: Filter rows that have at least one non-NA value in Turbo sample columns
keep_rows <- rowSums(!is.na(Exp3_OnBeads_Aldh1[, turbo_samples])) >= 1

# Step 3: Subset the data
Exp3_OnBeads_Aldh1_filtered <- Exp3_OnBeads_Aldh1[keep_rows, ]

# Step 4: Check dimensions
dim(Exp3_OnBeads_Aldh1_filtered)
## [1] 4920    4
# Step 5: Save filtered data to CSV
#write.csv(Exp3_OnBeads_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.On.Beads/Exp3_OnBeads_Aldh1_filtered.csv")

## Import imputation 
library(readr)
Exp3_OnBeads_Aldh1_filtered_Imputation <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.On.Beads/Exp3_OnBeads_Aldh1_filtered.Imputation.csv", row.names = 1)
dim(Exp3_OnBeads_Aldh1_filtered_Imputation)
## [1] 4920    4
row.names(Exp3_OnBeads_Meta) == colnames(Exp3_OnBeads_Aldh1_filtered_Imputation)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp3_OnBeads_Meta
counts <- Exp3_OnBeads_Aldh1_filtered_Imputation
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean     log2FC
## Tbc1d25.TBC25 Tbc1d25.TBC25   28.06339 26.07829 0.10583965
## Slc9a6.SL9A6   Slc9a6.SL9A6   20.54982 18.96743 0.11560134
## Cul4b.CUL4B     Cul4b.CUL4B   23.46995 21.57297 0.12158966
## Arfgef2.BIG2   Arfgef2.BIG2   22.50560 21.39310 0.07313862
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp_3_ON_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   293
## 2        UP  4627
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.EXP3_ON.beads <- results

saveRDS(results.EXP3_ON.beads, file = 'results.EXP3_ON.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp_3_ON_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
scatter_plot

library(readr)
Exp3_OFF_Beads_Aldh1 <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.OFF.Beads/Exp3.OFF.Beads.Aldh1.csv", row.names = 1)
dim(Exp3_OFF_Beads_Aldh1)
## [1] 7766    4
Exp3_OFF_Beads_Meta <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.OFF.Beads/Exp3.OFF.Beads.Meta.csv", row.names = 1 )
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.OFF.Beads/Exp3.OFF.Beads.Meta.csv'
row.names(Exp3_OFF_Beads_Meta) == colnames(Exp3_OFF_Beads_Aldh1)
## [1] TRUE TRUE TRUE TRUE
# Step 3: Identify Turbo columns based on metadata
turbo_samples <- rownames(Exp3_OFF_Beads_Meta)[Exp3_OFF_Beads_Meta$Group == "Turbo"]

# Step 4: Filter rows with at least one non-NA value in Turbo columns
keep_rows <- rowSums(!is.na(Exp3_OFF_Beads_Aldh1[, turbo_samples])) >= 1
Exp3_OFF_Beads_Aldh1_filtered <- Exp3_OFF_Beads_Aldh1[keep_rows, ]

# Step 5: Check result dimensions
dim(Exp3_OFF_Beads_Aldh1_filtered)
## [1] 5494    4
# Step 6: Save filtered dataset
write.csv(Exp3_OFF_Beads_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.OFF.Beads/Exp3_OFF_Beads_Aldh1_filtered.csv")

## Import Imputation 

library(readr)
Exp3_OFF_Beads_Aldh1_filtered_IMPUTTION <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp3.OFF.Beads/Exp3_OFF_Beads_Aldh1_filtered.IMPUTTION.csv", row.names = 1)

row.names(Exp3_OFF_Beads_Meta) == colnames(Exp3_OFF_Beads_Aldh1_filtered_IMPUTTION)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp3_OFF_Beads_Meta
counts <- Exp3_OFF_Beads_Aldh1_filtered_IMPUTTION
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean      log2FC
## Gbp6.GBP6         Gbp6.GBP6   16.52378 16.92732 -0.03481028
## Tbc1d25.TBC25 Tbc1d25.TBC25   26.47469 21.41487  0.30600086
## Slc9a6.SL9A6   Slc9a6.SL9A6   20.92732 20.36155  0.03953979
## Cul4b.CUL4B     Cul4b.CUL4B   23.42577 21.64353  0.11416119
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp_3_OFF_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   460
## 2        UP  5034
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp_3_OFF_Beads <- results

saveRDS(results.Exp_3_OFF_Beads, file = 'results.Exp_3_OFF_Beads.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp_3_OFF_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot

# Load required library
library(readr)

# Step 1: Load expression data
Exp4_ON_Beads_Aldh1 <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.On.Beads/Exp4.ON.Beads.Aldh1.csv", row.names = 1)
dim(Exp4_ON_Beads_Aldh1)
## [1] 7766    4
# Step 2: Load metadata
Exp4_On_Beads_Meta <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.On.Beads/Exp4.On.Beads.Meta.csv", row.names = 1)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.On.Beads/Exp4.On.Beads.Meta.csv'
# Step 3: Confirm that metadata rownames match data column names
all(rownames(Exp4_On_Beads_Meta) == colnames(Exp4_ON_Beads_Aldh1))  # Should return TRUE
## [1] TRUE
# Step 4: Identify Turbo samples
turbo_samples <- rownames(Exp4_On_Beads_Meta)[Exp4_On_Beads_Meta$Group == "Turbo"]

# Step 5: Filter rows with at least one non-NA value in Turbo samples
keep_rows <- rowSums(!is.na(Exp4_ON_Beads_Aldh1[, turbo_samples])) >= 1
Exp4_ON_Beads_Aldh1_filtered <- Exp4_ON_Beads_Aldh1[keep_rows, ]

# Step 6: View filtered dimension
dim(Exp4_ON_Beads_Aldh1_filtered)
## [1] 6236    4
# Step 7: Save filtered data to CSV
#write.csv(Exp4_ON_Beads_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.On.Beads/Exp4_ON_Beads_Aldh1_filtered.csv")


## Import Imputation 


Exp4_ON_Beads_Aldh1_filtered_Imputation <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.On.Beads/Exp4_ON_Beads_Aldh1_filtered.Imputation.csv", row.names = 1)

row.names(Exp4_On_Beads_Meta) == colnames(Exp4_ON_Beads_Aldh1_filtered_Imputation)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp4_On_Beads_Meta
counts <- Exp4_ON_Beads_Aldh1_filtered_Imputation
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean       log2FC
## Ankfn1.ANKF1   Ankfn1.ANKF1   17.29746 17.71314 -0.034260165
## Tbc1d25.TBC25 Tbc1d25.TBC25   27.07859 27.05494  0.001260739
## Slc9a6.SL9A6   Slc9a6.SL9A6   22.84027 22.40572  0.027712696
## Cul4b.CUL4B     Cul4b.CUL4B   24.85625 24.27187  0.034323235
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp4_On_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   554
## 2        UP  5682
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp4_On_Beads <- results

saveRDS(results.Exp4_On_Beads, file = 'results.Exp4_On_Beads.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp4_On_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot

# Load required library
library(readr)

# Step 1: Load expression data
Exp4_OFF_Beads_Aldh1 <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.OFF.Beads/Exp4.OFF.Beads.Aldh1.csv", row.names = 1)
dim(Exp4_OFF_Beads_Aldh1)
## [1] 7766    4
# Step 2: Load metadata
Exp_4_OFF_Beads_Meta <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.OFF.Beads/Exp.4.OFF.Beads.Meta.csv", row.names = 1)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.OFF.Beads/Exp.4.OFF.Beads.Meta.csv'
# Step 3: Confirm sample order consistency
all(rownames(Exp_4_OFF_Beads_Meta) == colnames(Exp4_OFF_Beads_Aldh1))  # Should return TRUE
## [1] TRUE
# Step 4: Identify Turbo sample columns
turbo_samples <- rownames(Exp_4_OFF_Beads_Meta)[Exp_4_OFF_Beads_Meta$Group == "Turbo"]

# Step 5: Filter rows that have at least one non-NA value in Turbo columns
keep_rows <- rowSums(!is.na(Exp4_OFF_Beads_Aldh1[, turbo_samples])) >= 1
Exp4_OFF_Beads_Aldh1_filtered <- Exp4_OFF_Beads_Aldh1[keep_rows, ]

# Step 6: Check new dimensions
dim(Exp4_OFF_Beads_Aldh1_filtered)
## [1] 6554    4
# Step 7: Save filtered data
write.csv(Exp4_OFF_Beads_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.OFF.Beads/Exp4_OFF_Beads_Aldh1_filtered.csv")

## Import Imputation 

library(readr)
Exp4_OFF_Beads_Aldh1_filtered_IMPUTATION <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp4.OFF.Beads/Exp4_OFF_Beads_Aldh1_filtered.IMPUTATION.csv", row.names = 1)

row.names(Exp_4_OFF_Beads_Meta) == colnames(Exp4_OFF_Beads_Aldh1_filtered_IMPUTATION)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp_4_OFF_Beads_Meta
counts <- Exp4_OFF_Beads_Aldh1_filtered_IMPUTATION
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean       log2FC
## Gbp6.GBP6         Gbp6.GBP6   18.25808 17.30442  0.077394089
## Nova2.NOVA2     Nova2.NOVA2   18.51816 17.12701  0.112668066
## Ankfn1.ANKF1   Ankfn1.ANKF1   17.35468 17.40768 -0.004398582
## Tbc1d25.TBC25 Tbc1d25.TBC25   26.71934 26.39620  0.017554179
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp4_OFF_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   308
## 2        UP  6246
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp4_OFF_Beads <- results

saveRDS(results.Exp4_OFF_Beads , file = 'results.Exp4_On_Beads.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp4_OFF_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot

# Load required library
library(readr)

# Step 1: Load expression data
Exp_5_ON_Beads_Aldh1 <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.ON.Beads/Exp.5.ON.Beads.Aldh1.csv", row.names = 1)
dim(Exp_5_ON_Beads_Aldh1)
## [1] 7766    4
# Step 2: Load metadata
Exp_5_ON_Beads_Meta <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.ON.Beads/Exp.5.ON.Beads.Meta.csv", row.names = 1)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.ON.Beads/Exp.5.ON.Beads.Meta.csv'
# Step 3: Confirm sample names match
all(rownames(Exp_5_ON_Beads_Meta) == colnames(Exp_5_ON_Beads_Aldh1))  # Should return TRUE
## [1] TRUE
# Step 4: Identify Turbo sample columns
turbo_samples <- rownames(Exp_5_ON_Beads_Meta)[Exp_5_ON_Beads_Meta$Group == "Turbo"]

# Step 5: Filter rows that have at least one non-NA value in Turbo sample columns
keep_rows <- rowSums(!is.na(Exp_5_ON_Beads_Aldh1[, turbo_samples])) >= 1
Exp_5_ON_Beads_Aldh1_filtered <- Exp_5_ON_Beads_Aldh1[keep_rows, ]

# Step 6: Check filtered dimensions
dim(Exp_5_ON_Beads_Aldh1_filtered)
## [1] 4687    4
# Step 7: Save filtered dataset
write.csv(Exp_5_ON_Beads_Aldh1_filtered, "Exp_5_ON_Beads_Aldh1_filtered.csv")

## IMPORT IMPUTATION

Exp_5_ON_Beads_Aldh1_filtered_IMPUTATION <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.ON.Beads/Exp_5_ON_Beads_Aldh1_filtered.IMPUTATION.csv", row.names = 1)

row.names(Exp_5_ON_Beads_Meta) == colnames(Exp_5_ON_Beads_Aldh1_filtered_IMPUTATION)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp_5_ON_Beads_Meta
counts <- Exp_5_ON_Beads_Aldh1_filtered_IMPUTATION
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean     log2FC
## Tbc1d25.TBC25 Tbc1d25.TBC25   27.33507 26.53115 0.04306574
## Slc9a6.SL9A6   Slc9a6.SL9A6   21.26642 19.94941 0.09223144
## Cul4b.CUL4B     Cul4b.CUL4B   23.43606 20.67737 0.18067772
## Arfgef2.BIG2   Arfgef2.BIG2   22.04723 17.91958 0.29906069
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp_5_ON_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   194
## 2        UP  4493
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp_5_ON_Beads <- results

saveRDS(results.Exp_5_ON_Beads , file = 'results.Exp_5_ON_Beads.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp_5_ON_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot

# Load required library
library(readr)

# Step 1: Load expression data
Exp5_OFF_Beads_Aldh1 <- read.csv( "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.OFF.Beads/Exp5.OFF.Beads.Aldh1.csv", row.names = 1 )
dim(Exp5_OFF_Beads_Aldh1)
## [1] 7766    4
# Step 2: Load metadata
Exp5_OFF_Beads_Meta <- read.csv( "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.OFF.Beads/Exp5.OFF.Beads.Meta.csv",  row.names = 1)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.OFF.Beads/Exp5.OFF.Beads.Meta.csv'
# Step 3: Confirm that row names match column names
all(rownames(Exp5_OFF_Beads_Meta) == colnames(Exp5_OFF_Beads_Aldh1))  # Should return TRUE
## [1] TRUE
# Step 4: Identify Turbo sample columns from metadata
turbo_samples <- rownames(Exp5_OFF_Beads_Meta)[Exp5_OFF_Beads_Meta$Group == "Turbo"]

# Step 5: Filter proteins (rows) that have at least one non-NA value in Turbo columns
keep_rows <- rowSums(!is.na(Exp5_OFF_Beads_Aldh1[, turbo_samples])) >= 1
Exp5_OFF_Beads_Aldh1_filtered <- Exp5_OFF_Beads_Aldh1[keep_rows, ]

# Step 6: Check dimensions of filtered data
dim(Exp5_OFF_Beads_Aldh1_filtered)
## [1] 5165    4
# Step 7: Save filtered data to CSV
write.csv(Exp5_OFF_Beads_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.OFF.Beads/Exp5_OFF_Beads_Aldh1_filtered.csv")

## IMPORT IMPUTATION 

Exp5_OFF_Beads_Aldh1_filtered_IMPUTATION <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp5.OFF.Beads/Exp5_OFF_Beads_Aldh1_filtered.IMPUTATION.csv", row.names = 1)

row.names(Exp5_OFF_Beads_Meta) == colnames(Exp5_OFF_Beads_Aldh1_filtered_IMPUTATION)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp5_OFF_Beads_Meta
counts <- Exp5_OFF_Beads_Aldh1_filtered_IMPUTATION
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean     log2FC
## Nova2.NOVA2     Nova2.NOVA2   17.36032 16.10055 0.10868418
## Tbc1d25.TBC25 Tbc1d25.TBC25   26.19443 26.00628 0.01039967
## Slc9a6.SL9A6   Slc9a6.SL9A6   21.45245 19.95912 0.10409416
## Cul4b.CUL4B     Cul4b.CUL4B   23.48179 20.00556 0.23114142
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp5_OFF_Beads_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN   119
## 2        UP  5046
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp5_OFF_Beads <- results

saveRDS(results.Exp5_OFF_Beads , file = 'results.Exp5_OFF_Beads.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp5_OFF_Beads Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot

# Load required library
library(readr)

# Step 1: Load expression data
Exp1_ISD_Aldh1 <- read.csv(
  "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp1.ISD/Exp1.ISD.Aldh1.csv",
  row.names = 1
)

# Step 2: Load metadata
Exp1_ISD_Metadata <- read.csv(
  "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp1.ISD/Exp1.ISD.Metadata.csv",
  row.names = 1
)
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp1.ISD/Exp1.ISD.Metadata.csv'
# Step 3: Ensure rownames of metadata match column names of data
all(rownames(Exp1_ISD_Metadata) == colnames(Exp1_ISD_Aldh1))  # Should return TRUE
## [1] TRUE
# Step 4: Identify Turbo sample columns from metadata
turbo_samples <- rownames(Exp1_ISD_Metadata)[Exp1_ISD_Metadata$Group == "Turbo"]

# Step 5: Filter rows that have at least one non-NA value in Turbo samples
keep_rows <- rowSums(!is.na(Exp1_ISD_Aldh1[, turbo_samples])) >= 1
Exp1_ISD_Aldh1_filtered <- Exp1_ISD_Aldh1[keep_rows, ]

# Step 6: Check dimensions of filtered dataset
dim(Exp1_ISD_Aldh1_filtered)
## [1] 6559    4
# Step 7: Save filtered dataset
write.csv(Exp1_ISD_Aldh1_filtered, "~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp1.ISD/Exp1_ISD_Aldh1_filtered.csv")


## IMPORT IMPUTATION

Exp1_ISD_Aldh1_filtered_IMPUTATION <- read.csv("~/Desktop/Eric_Aldha1l1_TurboID_Optimization.25july2025/Exp1.ISD/Exp1_ISD_Aldh1_filtered.IMPUTATION.csv", row.names = 1)

row.names(Exp1_ISD_Metadata) == colnames(Exp1_ISD_Aldh1_filtered_IMPUTATION)
## [1] TRUE TRUE TRUE TRUE
## Calculate fold change

#Compute per-group means
metadata <- Exp1_ISD_Metadata
counts <- Exp1_ISD_Aldh1_filtered_IMPUTATION
# Identify which columns are Turbo and Bv2
turbo_cols <- rownames(metadata)[metadata$Group == "Turbo"]
Negative_cols <- rownames(metadata)[metadata$Group == "Negative"]

# Calculate row means for each group
turbo_means <- rowMeans(counts[, turbo_cols], na.rm = TRUE)
Negative_means <- rowMeans(counts[, Negative_cols], na.rm = TRUE)

#Compute LOG2 Fold Change
log2FC <- log2(turbo_means / Negative_means)

#Create results table
results <- data.frame(
  Protein = rownames(counts),
  Turbo_Mean = turbo_means,
  Bv2_Mean = Negative_means,
  log2FC = log2FC
)

head(results, 4)
##                     Protein Turbo_Mean Bv2_Mean      log2FC
## Gbp6.GBP6         Gbp6.GBP6   16.99803 18.64782 -0.13363924
## Nova2.NOVA2     Nova2.NOVA2   19.44200 19.05539  0.02897750
## Ankfn1.ANKF1   Ankfn1.ANKF1   16.57996 16.95755 -0.03248675
## Tbc1d25.TBC25 Tbc1d25.TBC25   21.71767 22.43459 -0.04685554
results$Direction <- ifelse(results$log2FC > 0, "UP", "DOWN")

write.csv(results, "Exp1_ISD_Turbo_vs_Bv2.Aldh1.25JULY.csv")

##Scater plot Visualization

# Count UP and DOWN
counts_summary <- as.data.frame(table(results$Direction))
colnames(counts_summary) <- c("Direction", "Count")
print(counts_summary)
##   Direction Count
## 1      DOWN  1061
## 2        UP  5498
# Total numbers
total_up <- sum(results$Direction == "UP")
total_down <- sum(results$Direction == "DOWN")


results.Exp1_ISD <- results

saveRDS(results.Exp1_ISD , file = 'results.Exp1_ISD.Aldh1.rds')

# Dynamic title
plot_title <- paste0(
  "Exp1_ISD Turbo vs. Negative \n",
  "UP: ", total_up, "  |  DOWN: ", total_down
)

# Colors
custom_colors <- c("UP" = "red", "DOWN" = "blue")

# Plot

library(ggplot2)
scatter_plot <- ggplot(results, aes(x = Negative_means, y = Turbo_Mean, color = Direction)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = custom_colors) +
  labs(
    title = plot_title,
    x = "Negative_means",
    y = "Turbo Mean",
    color = "Direction"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold"),
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.grid = element_blank()       # Removes background grid
  )

scatter_plot