Моя проблема заключается в том, что, когда я вычисляю текущую корреляцию по какой-то странной причине, я не получаю одно и то же значение p для тех же значений оценок / корреляций.
Моя цель - рассчитать текущую корреляцию Спирмена по двум векторам в одном и том же data.frame (subject1 и subject2 в примере ниже). Кроме того, мое окно (длина вектора) и stide (переходы / шаги между каждым окном) являются постоянными. Таким образом, при взгляде на формулу ниже (из wiki ) я должен получить тот же критический t, а значит, и то же значение p для той же корреляции Спирмена. Это потому, что n
сообщает то же самое (это тот же размер окна), а r
- то же самое. Тем не менее, мое конечное значение р отличается.
![enter image description here](https://i.stack.imgur.com/xwKGK.png)
#Needed pkgs
require(tidyverse)
require(pspearman)
require(gtools)
#Sample data
set.seed(528)
subject1 <- rnorm(40, mean = 85, sd = 5)
set.seed(528)
subject2 <- c(
lag(subject1[1:21]) - 10,
rnorm(n = 6, mean = 85, sd = 5),
lag(subject1[length(subject1):28]) - 10)
df <- data.frame(subject1 = subject1,
subject2 = subject2) %>%
rowid_to_column(var = "Time")
df[is.na(df)] <- subject1[1] - 10
rm(subject1, subject2)
#Function for Spearman
psSpearman <- function(x, y)
{
out <- pspearman::spearman.test(x, y,
alternative = "two.sided",
approximation = "t-distribution") %>%
broom::tidy()
return(data.frame(estimate = out$estimate,
statistic = out$statistic,
p.value = out$p.value )
}
#Running correlation along the subjects
dfRunningCor <- running(df$subject1, df$subject2,
fun = psSpearman,
width = 20,
allow.fewer = FALSE,
by = 1,
pad = FALSE,
align = "right") %>%
t() %>%
as.data.frame()
#Arranging the Results into easy to handle data.frame
Results <- do.call(rbind.data.frame, dfRunningCor) %>%
t() %>%
as.data.frame() %>%
rownames_to_column(var = "Win") %>%
gather(CorValue, Value, -Win) %>%
separate(Win, c("fromIndex", "toIndex")) %>%
mutate(fromIndex = as.numeric(substring(fromIndex, 2)),
toIndex = as.numeric(toIndex, 2)) %>%
spread(CorValue, Value) %>%
arrange(fromIndex) %>%
select(fromIndex, toIndex, estimate, statistic, p.value)
Моя проблема заключается в том, что когда я строю Results
с оценками (Spearman rho; estimate
), номером окна (fromIndex
) и я раскрашиваю значение p, я должен выглядеть как " Туннель "/" путь "одного цвета через ту же область - я не.
Например, на рисунке ниже точки одинаковой высоты в красном круге должны быть одного цвета, но это не так.
![enter image description here](https://i.stack.imgur.com/vmgdA.png)
Код для графика:
Results %>%
ggplot(aes(fromIndex, estimate, color = p.value)) +
geom_line()
Что я нашел до сих пор , так это то, что это может быть связано с:
1. Такие функции, как Hmisc::rcorr()
, как правило, не дают одно и то же значение p.value для небольшой выборки или множества связей. Вот почему я использую pspearman::spearman.test
, что, как я прочитал здесь, предполагает решение этой проблемы.
2. Небольшой размер выборки - я пытался использовать больший размер выборки. У меня все та же проблема.
3. Я попытался округлить свои значения p - у меня все та же проблема.
Спасибо за вашу помощь!
Редактировать.
Может ли это быть"псевдо" окраска ggplot? Может быть, ggplot
просто интерполирует "последний" цвет до следующей точки? Вот почему я получаю «светло-синий» из пункта 5–6, а «темно-синий» - из пункта 7–8?
![enter image description here](https://i.stack.imgur.com/Pwi24.png)