Экспорт результатов cor.test в таблицу

Вопросы по статистическому пакету R. Не обязательно гео.
ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 08:36

Помогите, пожалуйста, экспортировать результаты функции cor.test (поскольку нужны и уровни значимости корреляционных коэффициентов Кендалла) в таблицу. Конечная цель - получение таблицы, которую можно вывести в CSV и дооформить в табличном процессоре (см. рисунок-приложение).
Вложения
tab_korrel_forum.png
tab_korrel_forum.png (65.08 КБ) 7705 просмотров

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 15 июл 2013, 09:40

а что именно не получается?
пристегивайтесь, турбулентность прямо по курсу

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 10:46

Максим Дубинин писал(а):а что именно не получается?

Код: Выделить всё

> gneis.cor.test<- as.table(cor.test(gneis[, 41:98], method="ke", use="pairwise.complete.obs"))
Ошибка в cor.test.default(gneis[, 41:98], method = "ke", use = "pairwise.complete.obs") : 
  аргумент "y" пропущен, умолчаний нет
При этом базовая функция cor работает прекрасно. Я подозреваю, что ошибка связана с невозможностью вписать куда-либо второе значение (p-value) при создании таблицы.
PS такую же ошибку выдают и функции as.data.frame, as.data.frame.array

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 15 июл 2013, 11:16

Ну так нужен y

Код: Выделить всё

?cor.test      
...
x, y: numeric vectors of data values.  ‘x’ and ‘y’ must have the
          same length.
пристегивайтесь, турбулентность прямо по курсу

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 11:27

А как свести из одной таблицы ВСЕ показатели в вектор x и в вектор y одновременно? Мне нужно получить таблицу корреляций сразу для всех числовых полей data.frame.

Код: Выделить всё

> gneis.cor.test<- as.data.frame(cor.test(gneis[,41:98], gneis[, 41:98], method="ke", use="pairwise.complete.obs"))
Ошибка в cor.test.default(gneis[, 41:98], gneis[, 41:98],  : 
  'x' must be a numeric vector

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 15 июл 2013, 12:06

Код: Выделить всё

d<-data.frame(x1=c(1,4,6),x2=c(3,1,2),x3=c(2,1,3))
d[lower.tri(cor(d))] <- NA
пристегивайтесь, турбулентность прямо по курсу

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 12:25

Максим Дубинин писал(а):

Код: Выделить всё

d<-data.frame(x1=c(1,4,6),x2=c(3,1,2),x3=c(2,1,3))
d[lower.tri(cor(d))] <- NA
Не совсем понятно - как здесь применима функция cor, поскольку и без неё получается матрица с NA под главной диагональю:

Код: Выделить всё

> d2<- data.frame(x1=c(1,4,6), x2=c(3,1,2), x3=c(2,1,3))
> d2[lower.tri(cor(d2))]<- NA
> d2
  x1 x2 x3
1  1  3  2
2 NA  1  1
3 NA NA  3
> d2<- data.frame(x1=c(1,4,6), x2=c(3,1,2), x3=c(2,1,3))
> d2[lower.tri(d2)]<- NA
> d2
  x1 x2 x3
1  1  3  2
2 NA  1  1
3 NA NA  3

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 15 июл 2013, 12:59

ну ошибся малость

Код: Выделить всё

d<-data.frame(x1=c(1,4,6),x2=c(3,1,2),x3=c(2,1,3))
cord = cor(d)
cord[lower.tri(cord)] <- NA

Код: Выделить всё

> cord
   x1         x2        x3
x1  1 -0.5960396 0.3973597
x2 NA  1.0000000 0.5000000
x3 NA         NA 1.0000000
пристегивайтесь, турбулентность прямо по курсу

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 13:08

Мне нужна не функция cor, а cor.test, поскольку именно cor.test рассчитывает уровни значимости коэффициентов корреляций. Мне нужно извлечь в таблицу и коэффициенты, и их уровни значимости! Но за быстрый метод очистки ненужных данных (ниже главной диагонали) всё равно спасибо!

gamm
Гуру
Сообщения: 2979
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 694
Ваше звание: программист
Откуда: Казань

Re: Экспорт результатов cor.test в таблицу

Сообщение gamm » 15 июл 2013, 17:30

ymr3R9Jge писал(а):Мне нужна не функция cor, а cor.test
которая не работает с матрицами, о чем черным по английски написано в документации. Ей нужно две выборки. Можно конечно все записать в два столбца с ключом (индексом), а потом запустить какой-нибудь aggregate, но проще написать цикл

Код: Выделить всё

nx<-ncol(p)
p.val<-matrix(NA,ncol=nx,nrow=nx)
p.cor<-matrix(NA,ncol=nx,nrow=nx)
for(i in 1:(nx-1)) {
  for(j in (i+1):nx) {
    tmp<-cor.test(p[,i],p[,j], method="kendall", use="pairwise.complete.obs")
    p.val[i,j]=p.val[j,i]=tmp$p.value
    p.cor[i,j]=p.cor[j,i]=tmp$estimate
  }
}
diag(p.val)=0
diag(p.cor)=1

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 21:00

gamm писал(а):...но проще написать цикл...
СУПЕР!!!
"Простите, а это стало быть и в магазине можно так же стенку приподнять?"[Иван Васильевич меняет профессию]
Ещё один огромный кусок дурной работы переложил на компьютер!
И вопрос напоследок: а как мне теперь согнать поочерёдно через строку в одну таблицу данные из двух получившихся матриц?

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 15 июл 2013, 21:14

Изучение R посредством сбора из разных источников полезных кусков кода - плохой способ его освоить, начинайте уже изучать язык.
пристегивайтесь, турбулентность прямо по курсу

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

Re: Экспорт результатов cor.test в таблицу

Сообщение ymr3R9Jge » 15 июл 2013, 22:39

Максим Дубинин писал(а):Изучение R посредством сбора из разных источников полезных кусков кода - плохой способ его освоить, начинайте уже изучать язык.
А внедрение безотходной технологии производства посредством опытного поиска путей использования отходов - тоже плохой способ борьбы за экологию? Лучше бороться с самим производством? Тогда и высокие технологии никому не нужны!

gamm
Гуру
Сообщения: 2979
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 694
Ваше звание: программист
Откуда: Казань

Re: Экспорт результатов cor.test в таблицу

Сообщение gamm » 16 июл 2013, 05:48

ymr3R9Jge писал(а):И вопрос напоследок: а как мне теперь согнать поочерёдно через строку в одну таблицу данные из двух получившихся матриц?

Код: Выделить всё

p.all<-matrix(NA,ncol=ncol(p.val),nrow=2*nrow(p.val))
ind =1:nrow(p.val)
ind1=2*ind-1
ind2=2*ind-0
p.all[ind1,]<-p.cor
p.all[ind2,]<-p.val
write.table(p.all,"foo.txt",col.names=FALSE,row.names=FALSE)
Максим Дубинин писал(а):Изучение R посредством сбора из разных источников полезных кусков кода - плохой способ его освоить, начинайте уже изучать язык.
категорически не согласен. Единственный способ научиться программировать - это изучать алгоритмы, самому программировать, и читать чужие программы. Это создает набор рабочих инструментов, закрывающих нужную предметную область. А запомнить 2000 страниц описания ядра R никто не в состоянии, да и незачем - нужны именно рабочие навыки :mrgreen:

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Экспорт результатов cor.test в таблицу

Сообщение Максим Дубинин » 16 июл 2013, 16:50

странно gamm, что вы меня не поняли, уж кто-кто, а вы то должны были увидеть, что мой комментарий был вызван тем, что человек даже циклы не освоил и берет из чужих примеров. Хотя и функция есть у него и расчет значимости для корреляции элементарен и cor всё считает прямо во фрейме, добавить звездочки зная размер выборки не сложно.

Я ничего не говорил про изучение ядра, я говорил про изучения языка, вместо просьб готовых решений.

"Сбор решений" vs "Изучение решений/языка"
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость