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
