2014-09-09 4 views
-3

Я использую базовый пакет R в системе windows.Как получить матрицу корреляций с функцией cor()?

У меня есть две матрицы с одним столбцом числовых значений. Обе матрицы имеют одинаковый размер.

Я использую следующий код

c<-cor(x,y) 

, где x, y матрицы с размером 10 * 1, но c имеет размер 1 * 1

Выход только одно значение. Когда я использую функцию cor, она должна давать результат, по крайней мере равный размеру матрицы справа?

, если я использую summary(c) мой вывод должен быть чем-то вроде этого:

Min. 1st Qu. Median Mean 3rd Qu. Max. 
-0.2110 -0.0500 0.0946 0.1250 0.2680 0.7630 

, но я получаю:

Min. :0.06088 
1st Qu.:0.06088 
Median :0.06088 
Mean :0.06088 
3rd Qu.:0.06088 
Max. :0.06088 
+5

«cor» вычисляет коэффициент корреляции, который является одним числом. Вы ожидали, что он сделает что-то еще? –

+0

Может быть, он хочет корреляционную матрицу? 2х2? – Seth

+0

Мне нужен вывод, который возвращает вектор корреляций для значений, присутствующих в матрицах X и Y. Я думал, что cor даст этот вывод. Но если он дает один номер, можете ли вы предложить мне, который будет генерировать вектор корреляций? –

ответ

1

Вам нужно положить X и Y в data.frame или матрицы для это работать. Вот краткий пример

set.seed(4) #so that we have the same random numbers 
X<-rnorm(100) 
Y<-rnorm(100) 
W<-cor(data.frame(X,Y)) 
W 

      X   Y 
X 1.0000000 -0.1338078 
Y -0.1338078 1.0000000 

as.vector(W) 
[1] 1.0000000 -0.1338078 -0.1338078 1.0000000 

Вы можете обернуть cor в as.vector, чтобы сохранить его в качестве вектора, если вам нравится.

+0

Привет Спасибо за ваше решение. –

+0

Но это не помогает мне получить ответ. У меня есть 2 Matices с одинаковыми размерами. Когда я выполняю корреляцию. Мне нужен вывод, который имеет сводную информацию в виде сводки (cr) ## Мин. 1-й кв. Средний средний 3-й Ку. Максимум. ## -0.2110 -0.0500 0.0946 0.1250 0.2680 0.7630 , а также длина (cr) должна быть равна количеству строк в матрице. Например, если матрица X имеет 923 строки и один столбец. После корреляции функция length() должна указывать длину как 923. Возможно ли это?/Если да, дайте мне знать подход –

+0

Функция 'cor' не собирается этого делать, если только я что-то не пропускаю. Обычно корреляция между двумя векторами представляет собой одно число, даже если векторы имеют сотни или миллионы значений. Вы уверены, что корреляция - это то, что вы хотите? Или X и Y списки векторов? –

0

Ну,
Во-первых, согласно заданию, вы должны вернуть вектор корреляций. Его длина равна числу мониторов, удовлетворяющих пороговому требованию (количество полных случаев больше порогового значения). Да df - это data.frame, который содержит данные всех мониторов, имеющих количество полных случаев, превышающих порог (надеюсь, что вы можете получить это df самостоятельно и read.csv, rbind функции). Итак:
Позволяет группе этого кадр данных мониторов ID:

df_gb<-group_by(df,ID) 

Теперь мы можем вычислить корреляцию между сульфатной и нитратной полеми и обобщать его ID и создать новое поле (переменный) Cor одновременно:

dfsum<-summarize(df_gb,Cor=cor(sulfate,nitrate,use = "pairwise.complete.obs")) 

Тогда мы оставим только Кор поле в dfsum кадр данных по:

dfsum<-select(dfsum,Cor) 

Давайте исключаем результаты NA (потому что мы не видим резюме NA в примере вывода функции, нужно создать, не так ли?)

dfsum<-filter(dfsum,is.na(Cor)==FALSE) 

Наконец, мы должны возвращать числовой вектор (по заданию):

return(dfsum$Cor) 

Вот и все, и, пожалуйста, НЕ ЗАБУДЬТЕ

library(dplyr) 

перед использованием group_by , выберите, фильтр функции.

Смежные вопросы