У меня есть следующие данные (это голова, фактические данные> 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))
Который производит:
Итак, в итоге, у меня есть то, что мне нужно, но это не очень приятно. Мне кажется, что должен быть способ заменить приведенный выше код повторения какой-нибудь командой, которая берет один столбец «Кровать» и сопоставляет его со всеми остальными столбцами по очереди, производя тот же вывод, что и здесь.