的差異是由於使用Spearman的RHO,而趨勢線是基於線性模型,即皮爾森- [R。
考慮從?cor
相關的文字:
對於cor()
,如果方法是「肯德爾」或「長槍兵」,Kendall的頭或 斯皮爾曼RHO統計數字是使用基於秩來估算衡量 協會。如果 數據不一定來自二元正態分佈,則這些更加健壯並且被推薦。 ...請注意,「spearman」基本上計算cor(R(x), R(y))
...其中R(u) := rank(u, na.last = "keep")
。
我改名的變量簡單:
dput(temp)
structure(list(x = c(41.132985, 15.589949, 15.504802, 5.339616,
40.697005, 2.893428, 20.891697, 3.195469, 2.689137, 13.997269
), y = c(36.5, 34.8, 30.5, 35.8, 33.9, 33.4, 37.6, 40.5, 34.2,
30), z = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("ABX2",
"ABX3"), class = "factor")), class = "data.frame", row.names = c(NA,
-10L), .Names = c("x", "y", "z"))
首先,我們要證明斯皮爾曼的RHO的定義是正確的,並且是由皮爾遜不同r。
library(dplyr)
temp %>%
group_by(z) %>%
mutate(RX = rank(x), RY = rank(y)) %>%
summarise(rho1 = cor(x, y, method = "spearman"),
rho2 = cor(RX, RY, method = "pearson"),
r = cor(x, y, method = "pearson"))
z rho1 rho2 r
<fctr> <dbl> <dbl> <dbl>
1 ABX2 0.3 0.3 0.20366115
2 ABX3 0.1 0.1 -0.08183435
注意,對於RHO這兩個值是相同的,但它們在符號和幅度不同於[R。
原因包括是,相關性較差,而且還消除排名相距大約每個觀測多遠的任何信息。即使兩個觀測值無限地接近,他們仍然會排在第一位。同樣,兩個觀察結果可能會有很大的不同,但如果兩個觀察結果之間沒有任何一個,他們將只有1個分開。
看一看:
temp %>%
group_by(z) %>%
mutate(RX = rank(x), RY = rank(y)) %>%
ggplot(aes(x, y)) +
geom_point() +
geom_text(aes(label = paste0("RX=", RX, "\nRY=", RY))) +
facet_grid(~z)
![enter image description here](https://i.stack.imgur.com/GfROS.png)
注意兩個最左邊的點在右側面板中。儘管它們非常接近,但它們的排名在每個方向上僅相隔1個單位。就rho而言,他們在y方向上分享盡可能多的信息,與頂部的兩個點相距甚遠。
爲了說明這個數值可以改變多少,讓我們將等級重新縮放到原始值的比例。 rank
的原始計算給你1到5,讓我們讓那些在X方向上的第一組均勻分佈,例如5.3到41.1。
library(scales)
temp %>%
group_by(z) %>%
mutate(RX = rank(x), RY = rank(y),
scaledRX = scales::rescale(RX, to = range(x)),
scaledRY = scales::rescale(RY, to = range(y)))
x y z RX RY scaledRX scaledRY
<dbl> <dbl> <fctr> <dbl> <dbl> <dbl> <dbl>
1 41.132985 36.5 ABX2 5 5 41.132985 36.500
2 15.589949 34.8 ABX2 3 3 23.236300 33.500
3 15.504802 30.5 ABX2 2 1 14.287958 30.500
4 5.339616 35.8 ABX2 1 4 5.339616 35.000
5 40.697005 33.9 ABX2 4 2 32.184643 32.000
6 2.893428 33.4 ABX3 2 2 7.239777 32.625
7 20.891697 37.6 ABX3 5 4 20.891697 37.875
8 3.195469 40.5 ABX3 3 5 11.790417 40.500
9 2.689137 34.2 ABX3 1 3 2.689137 35.250
10 13.997269 30.0 ABX3 4 1 16.341057 30.000
從外觀上看,這看起來像:
temp %>%
group_by(z) %>%
mutate(RX = rank(x), RY = rank(y),
scaledRX = scales::rescale(RX, to = range(x)),
scaledRY = scales::rescale(RY, to = range(y))) %>%
ggplot(aes(x, y)) +
geom_point(aes(shape = "original")) +
geom_point(aes(scaledRX, scaledRY, shape = "ranked")) +
geom_segment(aes(xend = scaledRX, yend = scaledRY)) +
geom_smooth(method = "lm", se = F, aes(color = "original")) +
geom_smooth(method = "lm", se = F, aes(scaledRX, scaledRY, color = "ranked")) +
facet_grid(~z) +
scale_shape_manual(values = c(1,16))
![enter image description here](https://i.stack.imgur.com/Kgjft.png)
你可以看到,有些勉強點移動,而一些移動很多。這些差異足以改變相關係數的大小,有時也會標誌。
我明白了,謝謝你的詳細解釋。我想知道什麼是估計趨勢線的好方法,同時確保它符合spearman rho。 –
@richardrodrigues,趨勢線始終同意的唯一方法是使其符合排名數據,而不是原始比例數據。爲什麼你反正用rho?如果數據不是來自二元正態分佈,皮爾遜仍然可以經常使用。 – Brian