R_homework02

Codes

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")

Results


# A tibble: 6 × 3
  Race  Age           BMI          
  <chr> <chr>         <chr>        
1 1     56.98 ~ 73.05 23.49 ~ 33.27
2 2     53.54 ~ 76.14 22.25 ~ 33.7 
3 3     56.86 ~ 78.52 22.55 ~ 33.87
4 4     55.77 ~ 75.01 23.35 ~ 36.57
5 5     53.13 ~ 70.58 21.92 ~ 32.94
6 All   56.31 ~ 76.72 22.79 ~ 34.22

#########################################################

正态分布法(单侧), BMI的95%参考值范围, 只有下限为: 19.1 
正态分布法(单侧), BMI的95%参考值范围, 只有上限为: 37.91 
正态分布法(双侧), BMI的95%参考值范围为: 17.3 ~ 39.71 

正态分布法(单侧), Age的95%参考值范围, 只有下限为: 49.73 
正态分布法(单侧), Age的95%参考值范围, 只有上限为: 83.31 
正态分布法(双侧), Age的95%参考值范围为: 46.52 ~ 86.52 

#########################################################

百分位数法(单侧), BMI的95%参考值范围, 只有下限为: 20.34 
百分位数法(单侧), BMI的95%参考值范围, 只有上限为: 39.43 
百分位数法(双侧), BMI的95%参考值范围为: 19.3 ~ 42.41 

百分位数法(单侧), Age的95%参考值范围, 只有下限为: 51 
百分位数法(单侧), Age的95%参考值范围, 只有上限为: 85 
百分位数法(双侧), Age的95%参考值范围为: 50 ~ 85 

#########################################################

BMI在24-28kg/m²的概率为: 0.2495 

Contents