# 设置工作目录
setwd("F:\\血栓\\1.GEO数据下载和归一化\\GSE19151")

# 读取表达数据
input_file <- "geneMatrix.txt"
expression_data <- read.table(input_file, header = TRUE, sep = "\t", check.names = FALSE)

# 确保第一列是基因名
rownames(expression_data) <- expression_data[, 1]
expression_data <- expression_data[, -1]  # 去掉第一列（基因名列）

# 绘制原始数据箱线图
pdf("1.rawBox.pdf", width = 30, height = 24)  # 调整PDF尺寸
boxplot(expression_data, 
        col = "blue", 
        xaxt = "n", 
        outline = FALSE,
        cex.axis = 3,  # 调整纵轴数字大小
        cex.lab = 3,   # 调整坐标轴标签大小
        cex.main = 3)  # 调整标题大小
dev.off()

# 加载必要的包
library(limma)

# 数据预处理
expression_matrix <- as.matrix(expression_data)

# 检查是否需要取log2
quantiles <- quantile(expression_matrix, c(0, 0.25, 0.5, 0.75, 0.99, 1.0), na.rm = TRUE)
log_condition <- (quantiles[5] > 100) || ((quantiles[6] - quantiles[1]) > 50 && quantiles[2] > 0)

if (log_condition) {
  expression_matrix[expression_matrix < 0] <- 0
  expression_matrix <- log2(expression_matrix + 1)
}

# 数据标准化
normalized_data <- normalizeBetweenArrays(expression_matrix)

# 确保列名（样本名）被保留
colnames(normalized_data) <- colnames(expression_matrix)

# 绘制标准化后的箱线图
pdf("2.normalBox.pdf", width = 30, height = 24)  # 调整PDF尺寸
boxplot(normalized_data, 
        col = "red", 
        xaxt = "n", 
        outline = FALSE,
        cex.axis = 3,  # 调整纵轴数字大小
        cex.lab = 3,   # 调整坐标轴标签大小
        cex.main = 3)  # 调整标题大小
dev.off()

# 输出标准化后的基因表达矩阵，包括第一列的基因名字和样本名
# 创建一个新的数据框，包含基因名作为第一列
normalized_df <- data.frame(geneNames = rownames(normalized_data), normalized_data)
write.table(normalized_df, 
            file = "GSE19151.txt", 
            quote = FALSE, 
            sep = "\t", 
            col.names = TRUE,  # 输出列名（样本名）
            row.names = FALSE)  # 不输出行名，因为基因名已经作为第一列