从0开始学习R语言--Day39--Spearman 秩相关

在非参数统计中,不看数据的实际数值,单纯比较两组变量的值的排名是通用的基本方法,但在客观数据中,很多变量的关系都是非线性的,其他的方法不是对样本数据的大小和线性有要求,就是只能对比数据的差异性,而不能展示这种非线性的单调性,比如想知道练习时间与游戏段位的关系,虽然从结果上看是正相关,但在过程中的体现可能是进步速度非常快后趋于稳定,其他的函数方法会漏掉这种细节。

以下是一个例子:

R 复制代码
set.seed(123)
# 生成数据:学习时间增加,成绩总体上升但非线性
Hours <- sort(runif(50, 1, 10))  # 1到10小时,均匀分布
Score <- 50 + 10 * sqrt(Hours) + rnorm(50, 0, 5)  # 非线性关系+噪声

# 构建数据框
df <- data.frame(Hours, Score)
head(df)

# 方法1:直接使用cor.test()
result <- cor.test(df$Hours, df$Score, method = "spearman")
print(result)

# 方法2:手动计算(验证原理)
rank_Hours <- rank(df$Hours)
rank_Score <- rank(df$Score)
n <- nrow(df)
rho_manual <- 1 - (6 * sum((rank_Hours - rank_Score)^2)) / (n * (n^2 - 1))
cat("手动计算的Spearman rho:", rho_manual, "\n")

library(ggplot2)
ggplot(df, aes(x = Hours, y = Score)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +  # 线性趋势线(对比用)
  labs(title = "学习时间与成绩的Spearman相关 (rho=0.72)")

输出:

R 复制代码
	Spearman's rank correlation rho

data:  df$Hours and df$Score
S = 5248, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.7479952 

手动计算的Spearman rho: 0.7479952 

从结果可以看到,结果显示0.748,属于正相关。而图像显示,如果用一般的方法,直接用线性函数去拟合,会忽略实际数据中弯曲的分布,即不知道数据在实际中的增长方向,会对后续数据的加工使用造成错觉。

相关推荐
csbysj20201 分钟前
JSON.parse() 方法详解
开发语言
乐观主义现代人2 分钟前
redis 源码学习笔记
redis·笔记·学习
YJlio2 分钟前
Registry Usage (RU) 学习笔记(15.5):注册表内存占用体检与 Hive 体量分析
服务器·windows·笔记·python·学习·tcp/ip·django
奔波霸的伶俐虫4 分钟前
redisTemplate.opsForList()里面方法怎么用
java·开发语言·数据库·python·sql
yesyesido15 分钟前
智能文件格式转换器:文本/Excel与CSV无缝互转的在线工具
开发语言·python·excel
_200_17 分钟前
Lua 流程控制
开发语言·junit·lua
环黄金线HHJX.17 分钟前
拼音字母量子编程PQLAiQt架构”这一概念。结合上下文《QuantumTuan ⇆ QT:Qt》
开发语言·人工智能·qt·编辑器·量子计算
王夏奇18 分钟前
python在汽车电子行业中的应用1-基础知识概念
开发语言·python·汽车
He_Donglin19 分钟前
Python图书爬虫
开发语言·爬虫·python
星融元asterfusion28 分钟前
AsterNOS SONiC基于YANG模型的现代网络管理:从CLI到gNMI的演进
开发语言·sonic·yang