library(readr)
library(dplyr)
# 读取数据文件
data = read_csv("dat1.csv", show_col_types = FALSE)
# 分组: BMI&Age的均值&标准差
mean_bmi = mean(data$BMI, na.rm = TRUE)
std_bmi = sd(data$BMI, na.rm = TRUE)
mean_age = mean(data$Age, na.rm = TRUE)
std_age = sd(data$Age, na.rm = TRUE)
# 总人群: BMI&Age的均值&标准差
All_age_range = paste(round(mean_age - std_age, 2), "~", round(mean_age + std_age, 2))
All_BMI_range = paste(round(mean_bmi - std_bmi, 2), "~", round(mean_bmi + std_bmi, 2))
# 分组: 数据汇总
grouped_stats = data %>%
group_by(Race) %>%
summarise(
Age = paste(round(mean(Age, na.rm = TRUE) - sd(Age, na.rm = TRUE), 2),
"~",
round(mean(Age, na.rm = TRUE) + sd(Age, na.rm = TRUE), 2)),
BMI = paste(round(mean(BMI, na.rm = TRUE) - sd(BMI, na.rm = TRUE), 2),
"~",
round(mean(BMI, na.rm = TRUE) + sd(BMI, na.rm = TRUE), 2)),
.groups = 'drop'
)
# 总人群: 数据汇总
all_stats = data.frame(
Race = "All",
Age = All_age_range,
BMI = All_BMI_range
)
# 数据连接
combined_stats = rbind(grouped_stats, all_stats)
# 打印结果
print(combined_stats, row.names = FALSE)
cat("\n#########################################################\n")
cat("\n")
###################################################################################
# 正态分布法: BMI和Age 95%参考值范围
# BMI单侧
lower_bmi = round(qnorm(0.05, mean_bmi, std_bmi), 2)
upper_bmi = round(qnorm(0.95, mean_bmi, std_bmi), 2)
# BMI双侧
left_bmi = round(qnorm(0.025, mean_bmi, std_bmi), 2)
right_bmi = round(qnorm(0.975, mean_bmi, std_bmi), 2)
##################
# Age单侧
lower_age = round(qnorm(0.05, mean_age, std_age), 2)
upper_age = round(qnorm(0.95, mean_age, std_age), 2)
# Age双侧
left_age = round(qnorm(0.025, mean_age, std_age), 2)
right_age = round(qnorm(0.975, mean_age, std_age), 2)
cat("正态分布法(单侧), BMI的95%参考值范围, 只有下限为:", lower_bmi, "\n")
cat("正态分布法(单侧), BMI的95%参考值范围, 只有上限为:", upper_bmi, "\n")
cat("正态分布法(双侧), BMI的95%参考值范围为:", left_bmi, "~", right_bmi, "\n")
cat("\n")
cat("正态分布法(单侧), Age的95%参考值范围, 只有下限为:", lower_age, "\n")
cat("正态分布法(单侧), Age的95%参考值范围, 只有上限为:", upper_age, "\n")
cat("正态分布法(双侧), Age的95%参考值范围为:", left_age, "~", right_age, "\n")
cat("\n#########################################################\n")
cat("\n")
###################################################################################
# 百分位数法: BMI和Age 95%参考值范围
# BMI单侧
lower_percent_bmi = round(quantile(data$BMI, probs = 0.05, na.rm = TRUE), 2)
upper_percent_bmi = round(quantile(data$BMI, probs = 0.95, na.rm = TRUE), 2)
# BMI双侧
left_percent_bmi = round(quantile(data$BMI, 0.025, na.rm = TRUE), 2)
right_percent_bmi = round(quantile(data$BMI, 0.975, na.rm = TRUE), 2)
#################
# Age单侧
lower_percent_age = round(quantile(data$Age, probs = 0.05, na.rm = TRUE), 2)
upper_percent_age = round(quantile(data$Age, probs = 0.95, na.rm = TRUE), 2)
# Age双侧
left_percent_age = round(quantile(data$Age, 0.025, na.rm = TRUE), 2)
right_percent_age = round(quantile(data$Age, 0.975, na.rm = TRUE), 2)
cat("百分位数法(单侧), BMI的95%参考值范围, 只有下限为:", lower_percent_bmi, "\n")
cat("百分位数法(单侧), BMI的95%参考值范围, 只有上限为:", upper_percent_bmi, "\n")
cat("百分位数法(双侧), BMI的95%参考值范围为:", left_percent_bmi, "~", right_percent_bmi, "\n")
cat("\n")
cat("百分位数法(单侧), Age的95%参考值范围, 只有下限为:", lower_percent_age, "\n")
cat("百分位数法(单侧), Age的95%参考值范围, 只有上限为:", upper_percent_age, "\n")
cat("百分位数法(双侧), Age的95%参考值范围为:", left_percent_age, "~", right_percent_age, "\n")
cat("\n#########################################################\n")
cat("\n")
###################################################################################
# BMI在24-28kg/m²的概率
bmi_24_28 = round(pnorm(28, mean_bmi, std_bmi) - pnorm(24, mean_bmi, std_bmi), 4)
# 保留4位小数提高精度
# 打印结果
cat("BMI在24-28kg/m²的概率为:", bmi_24_28, "\n")