![]() |
Трансформация данных в R и графы
1. Трансформация данных
Возник вопрос: как преобразовать данные в R на манер сводных таблиц Excel. Вопрос был решен, но в процессе открыты для себя два полезных пакета, о которых хотелось бы рассказать. Пакет reshape2 - позволяет агрегировать данные на манер Excel. На сайте http://www.r-statistics.com/tag/aggregate/ есть неплохой разбор его возможностей. Основная идея должна быть понятна вот из этой схемы (кликабельна). http://www.r-statistics.com/wp-conte...st-300x214.png Второй пакет -- sqldf. Позволяет писать прямо в коде SQL запросы к данным в синтаксисе SQLite. Привожу простой код, который решает одну и ту же задачу с использованием двух этих пакетов. Имеются данные по весу кошачьих сердец, кошачьих тушек и пола (Пакет MASS данные cats), Попробуем найти для каждого пола число измерений и средний вес тушки. Напишем тестовый пример, который бы в цикле 1000 раз пытался решить эту задачу и посчитаем затраченное время. Возможное решение. Код:
> library(MASS) Во втором примере также показано объединение двух таблиц по ключевому полю с использованием команды merge, поскольку команда cast не позволяет агрегировать сразу по двум функциям (может и позволяет, но я не умею). Такие дела (с). 2. Графы в GNU R Рассматривая интересные библиотеки в R можно упомянуть о возможности строить графы с помощью библиотеки igraph. Простой пример кода. Пытаемся построить граф связей на портале аспирантов (фрагмент). Код:
library(graph) http://www.aspirantura.spb.ru/forum/...pictureid=1100 Нужно или нет, решать вам, но если надо рисовать серьезные графы, то рекомендую сперва глянуть в сторону graphviz. Очень кошерная и мощная штука. |
Вышла книга. Шитиков В.К., Розенберг Г.С. Рандомизация и бутстреп: статистический анализ в биологии и экологии с использованием R. - Тольятти: «Кассандра», 2013. - 289 с.
Ссылка ведет на Интернет-версию на сайте авторов. |
Цитата:
Цитата:
Код:
FileList<-dir("Data_R",pattern = "*.txt", full.names = TRUE, ignore.case = TRUE, include.dirs =TRUE) Цитата:
Добавлено через 36 минут С другой стороны, данных много, поэтому возможно удобнее будет загнать в базу данных SQLite (см. выше о работе в R) и использовать срезы оттуда. Модифицируем чуть-чуть вышеприведенный код Цитата:
http://aspirantura.spb.ru/forum/pict...pictureid=1162 Добавлено через 49 минут Цитата:
Код:
set.seed(666) |
Hogfather,
а в R можно оценивать GARCH модели с разными распределениями ошибок? а оценивать Stochastic volatility models с разными распределениями? Или самим код надо писать? ЗЫ. А что-то типа фильтра Калмана там есть? |
Цитата:
Пример из книжки, упомянутой ниже Код:
library(fGarch) Рекомендую почитать книжку Statistics and Data Analysis for Financial Engineering. Я купил и мои волосы теперь чистые и шелковистые. Цитата:
Цитата:
http://cran.r-project.org/web/packages/FKF/index.html Статья по теме http://www.jstatsoft.org/v39/i02/paper |
Hogfather,
просто огромное спасибо!!!!!!! :jump: :jump: :jump: пошла изучать |
Приобрел неплохую книжку по Data Mining в GNU R, рекомендую.
http://ecx.images-amazon.com/images/...SH20_OU01_.jpg Пакет rattle предназначен для поиска закономерностях в данных (Data Mining) с помощью регрессионных деревьев, кластерного анализа и метода опорных векторов. В книжке разбирается порядок действий от загрузки данных до интерпретации результатов. Код:
library(rattle) К сожалению, работает не все. UPD: Появилось сообщение на форуме поддержки. На настоящий момент решение это проблемы выглядит вот так [1] . Вложение со старой функцией удалено, чтобы не смущало. Цитата:
Т.е. есть еще некоторые проблемки с продуктом,а так, в целом, здорово! |
UPD: Под МакОс rattle категорически отказался работать. Проблемы с GTK+
|
Давненько не брал я в руки шашек. Вот тут задачку придумали, на самом деле весьма интересную с практической точки зрения.
Цитата:
|
Цитата:
Цитата:
Пусть T - дискретная случайная величина, равная количеству набранных баллов (0...90). Функция вероятности случайной величины T: f(t) = P(T=t) Функция распределения случайной величины T: F(t) = P(T<=t) Решение в математической среде Waterloo Maple 15.0. http://4put.ru/pictures/max/772/2372608.jpg |
Цитата:
Итак, вернемся к нашим баранам. Собственно, решение задачи основано на знании формулы Бернулли и понимания биноминального распределения. Функция вероятности для биноминального распределения в R имеет вид dbinom(x, size, prob, log = FALSE), остальные связанные функции: pbinom(q, size, prob, lower.tail = TRUE, log.p = FALSE) - функция распределения qbinom(p, size, prob, lower.tail = TRUE, log.p = FALSE) - квантили распределения rbinom(n, size, prob) - генерация случайного числа, распределенного по данному закону где, соответственно: size - число попыток, prob - вероятность удачного исхода Поэтому задачу: Цитата:
Код:
> sum(dbinom(31:45, 45, 0.25)) =1-БИНОМ.РАСП(30;45;0,25;ИСТИНА) и имеем результат 7,52723E-10 Вооружившись этими немудреными знаниями приступаем к задаче. Здесь у нас существуют возможные варианты исходов от 0 до 90, но поскольку веса у каждого блока в тесте разные, проще прогнать все варианты в цикле и учесть число возможных перестановок, а также вероятность совместного события. Поскольку в данном случае события независимые, то вероятности перемножаем. По сути, мы решаем ту же задачу, только слегка усложненную. Код:
> # Инициируем переменные Обращаю внимание, что функции дискретны, поэтому рисовать их сплошной линией -- фигня и моветон. |
о так вот вы куда ушли с решением !
пик и есть нужный нам процент? |
Цитата:
Итак, пик на верхнем графике соответствует 22 баллам со значением вероятности 6.315466e-02 или 6%. Т.е. случайно в 6% случаев можно ответить на 22 балла. Вообще, верхний график показывает вероятности набрать случайным образом баллы от 0 до 90. Поэтому, если нам надо посчитать вероятность не менее 61, мы складываем вероятности набрать 61,62, ... , 90 баллов (точки выделены красным) и получаем нужный нам ответ 1.73944e-08. Нижний график показывает куммулятивную сумму вероятностей, т.е. в точке 60 (красная точка) он равен сумме вероятностей набрать баллы от 0 до 60, иными словами, значение в каждой точке показывает вероятность набрать не более заданного количества баллов. Для того, чтобы найти вероятность набрать более чем заданное количество баллов (в нашем случае 60, потому как 61>60 и по условиям задачи оно входит в вопрос), учитывая, что сумма всех вероятностей равна 1, имеем 1-F(60)=1.73944e-08 |
таким образом вероятнее всего будет набрать в случае случайного тыка баллов около 20, что не является проходным
а вопрос задачи был о 31 балле. распределение говорит что это три процента правильно? |
Цитата:
Цитата:
|
Текущее время: 07:48. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»