Рассчитать и построить зависимость и доверительные интервалы одной переменной от нескольких переменных - PullRequest
0 голосов
/ 08 мая 2019

У меня есть следующие данные (это голова, фактические данные> 100 строк), состоящие из всех порядковых переменных. В реальных данных «Кровати» варьируются от 1 до 8, а все переменные «Тест» варьируются от 1 до 4. Я хочу рассчитать и построить график зависимости каждой переменной «Testx» от «Кровати», но я не Я не хочу полной матрицы, так как я не хочу коррелировать переменные «Testx» друг с другом.

Вот CSV данных ... Я сохраняю его как "test.csv"

Beds,Test1,Test2,Test3,Test4,Test5,Test6,Test7,Test8
4,4,1,4,4,4,4,3,4
1,3,1,1,1,1,4,2,1
2,4,1,1,2,4,1,1,1
1,4,1,1,4,1,1,1,1
1,2,1,1,1,4,2,2,2
1,4,1,1,1,2,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1
1,4,1,1,4,3,2,2,1

EDIT:

У меня есть клуге, который работает, но не элегантно:

test <- read.csv("test.csv")

#Initialize results table as blank dataframe
cTable <- data.frame(matrix(ncol=5, nrow=0))
colnames(cTable) <- c("Test", "Cor", "cL", "cH", "p")

#Begin correlation calculation for Test 1
df <- cor.test(test$Beds, test$Test1)

#Pull the 95% confidence interval and break it into upper and lower limits
interv <- as.character(df$conf.int)
cL <- as.numeric(strsplit(interv, " ")[[1]]) #lower 95% confidence limit
cH <- as.numeric(strsplit(interv, " ")[[2]]) #upper 95% confidence limit

t <- data.frame(Test="Test1", Cor=df$estimate, cL=cL, cH=cH, p=df$p.value)
rownames(t)<-NULL

cTable <- rbind(cTable, t)

rm(df,t) #Repeat code doesn't work unless temporary dataframes are cleared out

#Repeat for Test5
df <- cor.test(test$Beds, test$Test5)

interv <- as.character(df$conf.int)
cL <- as.numeric(strsplit(interv, " ")[[1]])
cH <- as.numeric(strsplit(interv, " ")[[2]])

t <- data.frame(Test="Test5", Cor=df$estimate, cL=cL, cH=cH, p=df$p.value)
rownames(t)<-NULL

cTable <- rbind(cTable, t)

rm(df,t)

Это работает, хотя, вероятно, это не лучший способ сделать то, что я хочу, так как теперь я должен повторить это для Test2 через Test8. Но это работает. Я запустил его для Test1 и Test5, потому что, как это бывает, доверительные интервалы для Test2 не определены. Это не проблема в реальных данных. Вот вывод:

   Test       Cor          cL        cH          p
1 Test1 0.3947710 -0.31253956 0.8204642 0.25890218
2 Test5 0.5921565 -0.05974491 0.8899691 0.07128552

В конечном выводе должна быть строка для каждого Testx.

Другим желаемым результатом является график с каждым Textx в качестве ординала на оси X и коэффициентом корреляции на оси Y с показанным коэффициентом плюс доверительные интервалы. Эта часть оказалась легкой:

ggplot(cTable, aes(x=cTable$Test, y=cTable$Cor))+
  geom_point(size=4)+
  geom_errorbar(aes(ymax=cTable$cH, ymin=cTable$cL))

Который производит:

Plot of correlations with confidence intervals

Итак, в итоге, у меня есть то, что мне нужно, но это не очень приятно. Мне кажется, что должен быть способ заменить приведенный выше код повторения какой-нибудь командой, которая берет один столбец «Кровать» и сопоставляет его со всеми остальными столбцами по очереди, производя тот же вывод, что и здесь.

1 Ответ

0 голосов
/ 10 мая 2019

Я понял. Ответ в corr.test, часть «психического» пакета. Для этого требуется только поднабор выходных данных, чтобы выбрать только те корреляции, которые я хочу, и отбрасывание остальных.

library("ggplot2")
library("data.table") #used for the %like% string operator
library ("psych")  #used for the corr.test function

test <- read.csv("test.csv")

cTab <- print(corr.test(test, use = "pairwise", method = "pearson", adjust = "none"), short=FALSE)
cTab <- cTab[rownames(cTab) %like% "Beds",] #Subsets the variable whose correlations I actually want
cTab$names <- rownames(cTab) #so I can use the rownames as the X variable

ggplot(cTab, aes(x=cTab$names, y=cTab$raw.r))+
  geom_point(size=4)+
  geom_errorbar(aes(ymax=cTab$raw.upper, ymin=cTab$raw.lower), width=0.3, size=0.75)+
  labs(x="Test", y="Correlation Coefficient")+
  theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust=0.5, face = "italic"),
        axis.text.x = element_text(angle = 90, hjust = 1.0))

Вот как выглядит вывод (помните, что у Test2 плохие данные, я не стал их исправлять) Correlation coefficients with confidence intervals

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...