2015-08-13 2 views
1

я работаю в сфере здравоохранения, и мне нужна помощь в том, чтобы использовать R. Объясняю: У меня есть набор данных, как, что:R - Как выбрать конкретные значения

S1  S2  S3  S4  S5 
0.498 1.48 1.43 0.536 0.548 
2.03 1.7  3.74 2.13 2.02 
0.272 0.242 0.989 0.534 0.787 
0.986 2.03 2.53 1.65 2.31 
0.307 0.934 0.633 0.36 0.281 
0.78 0.76 0.706 0.81 1.11 
0.829 2.03 0.667 1.48 1.42 
0.497 1.27 0.952 1.23 1.73 
0.553 0.286 0.513 0.422 0.573 

Вот мои цели :

Do correlation between every column 
Calculate p-values 
Calculate R-squared 
Only show when R2>0.5 and p-values <0.05 

Вот мой код до сих пор (это не самый эффективный, но он работает):

> e<-read.table(‘Workbook8nm.csv’, header=TRUE, sep=“,”, dec=“.”, na.strings=“NA”) 
> f<-data.frame(e) 
> M<-cor(f, use=“complete”) #Do the correlation like I want 
> library(‘psych’) 
> N<-corr.test (f) #Give me p-values 

так, до сих пор У меня есть моя корреляция в M и моих p-значениях в N. Мне нужна помощь в том, как показать R2?

И вторая часть, как сделать R, показывать только когда R2> 0,5 и p-значения < 0,05 например? Я использовал эту строку:

P<-M[which(m>0.9))] 

Чтобы показать мне только тогда, когда пирсон Коэффициент больше, чем 0,9, как обучение. Но это просто делает мне список всех значений, которые превосходят 0,9 ... Поэтому я не знаю, между чем и в какой колонке этот коэффициент исходит. Лучше всего, чтобы он показывал мне значимые значения в таблице с именем столбца, поэтому я могу легко их идентифицировать. Причина, по которой я хочу это сделать, заключается в том, что по таблице 570 на 570, поэтому я не могу смотреть на все значения p, чтобы сохранить только значительную.

Надеюсь, я был чист! Это мой первый пост здесь, скажи мне, если я сделал какую-либо ошибку!

Спасибо за помощь!

ответ

0

Я уверен, что есть функция где-то в пространстве R, чтобы сделать это быстрее, но я написал быструю функцию для расширения матрицы в data.frame с колонками «строка» и «столбец», а значение как третья колонка.

matrixToFrame <- function(m, name) { 
    e <- expand.grid(row=rownames(m), col=colnames(m)) 
    e[name] <- as.vector(m) 
    e 
} 

Мы можем преобразовать матрицу корреляции в кадр данных, например, так:

> matrixToFrame(cor(f), "cor") 
    row col  cor 
1 S1 S1 1.0000000 
2 S2 S1 0.5322052 
3 S3 S1 0.8573687 
4 S4 S1 0.8542438 
5 S5 S1 0.6820144 
6 S1 S2 0.5322052 
.... 

И мы можем объединить результат corr.test и cor, потому что столбцы совпадают

> b <- merge(matrixToFrame(corr.test(a)$p, "p"), matrixToFrame(cor(a), "cor")) 
> head(b) 
    row col   p  cor 
1 S1 S1 0.0000000000 1.0000000 
2 S1 S2 0.2743683745 0.5322052 
3 S1 S3 0.0281656707 0.8573687 
4 S1 S4 0.0281656707 0.8542438 
5 S1 S5 0.2134783039 0.6820144 
6 S2 S1 0.1402243214 0.5322052 

Тогда мы можем просто фильтровать для элементов, которые мы хотим

> b[b$cor > .5 & b$p > .2,] 
    row col   p  cor 
2 S1 S2 0.2743684 0.5322052 
5 S1 S5 0.2134783 0.6820144 
8 S2 S3 0.2743684 0.5356585 
10 S2 S5 0.2134783 0.6724486 
15 S3 S5 0.2134783 0.6827349 

EDIT: Я нашел R matrix to rownames colnames values, что дает пару попыток на matrixToFrame; ничего особенного, кроме того, что у меня здесь есть.

EDIT2: Обязательно внимательно прочитайте документы для corr.test. Похоже, что другая информация кодируется в верхней и нижней диагонали (?), Поэтому результаты здесь могут быть обманчивыми. Вы можете сделать некоторую фильтрацию с lower.tri или upper.tri до окончательного этапа фильтрации.

+0

Это потрясающе! Это именно то, что я искал! Уже две недели я знаю, что я борюсь за это. Его очень изящный и простой представлен так. Большое спасибо за это! Знаете ли вы какую-либо функцию в R, которая может позволить мне также рассчитать Rsquared? –

+0

Как я понимаю, 'cor (f)^2 будет давать значения r-квадрата. Вы можете сделать 'b $ r2 <- b $ cor^2', чтобы явно добавить столбец в фрейм данных. – user295691

+0

Я совершенно глуп, я забыл, что R2 - это просто квадрат коллайдера pearson ... Спасибо большое! Он работает очень хорошо! Я проверен для corr.test, чтобы убедиться, что он дает правильные значения. Огромное спасибо за вашу помощь! –