1 Вопрос: Рассчитать и построить зависимость и доверительные интервалы одной переменной от нескольких переменных

вопрос создан в Wed, May 8, 2019 12:00 AM

У меня есть следующие данные (это заголовок, фактические данные > 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:

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

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

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

 График корреляций с доверительными интервалами

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

0
  1. Что вы уже пробовали и почему это не удалось? Пожалуйста, добавьте пример кода.
    2019-05-08 16: 27: 00Z
  2. Я не знаю, что попробовать ... Я думал, что объяснил это. Я могу получить корреляции с помощью cor.test, но не могу найти способ захватить и табулировать или работать с выводом. Извините, я не знаю с чего начать.
    2019-05-08 17: 14: 42Z
  3. Я также не могу найти ничего, что указывало бы, как вычислять корреляции между таблицами, сопоставляя одну переменную с несколькими другими переменными.
    2019-05-08 17: 16: 54Z
  4. Самореклама : вы можете попробовать get_var_corr из пакета, который я написал, известного как manymodelr . Это может быть полезно в этом случае. В настоящее время он возвращает только корреляции.
    2019-05-08 17: 18: 31Z
  5. С доверительными интервалами или без них? Мне действительно нужно получить оба.
    2019-05-08 17: 24: 00Z
1 ответ                              1                         

Я понял. Ответ в 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 плохие данные, я не стал их исправлять) Коэффициенты корреляции с доверительными интервалами

    
0
2019-05-13 16: 39: 46Z
источник размещен Вот