Показать сообщение отдельно
Старый 20.03.2013, 19:36   #30
Hogfather
Platinum Member
 
Аватар для Hogfather
 
Регистрация: 22.07.2010
Адрес: Санкт-Петербург
Сообщений: 3,281
По умолчанию R, Markdown, pandoc и другие

В процессе обучения курсам мастерства работы с R, понял лишний раз как важно правильно вести протоколы исследований. Для того, чтобы потом не было мучительно больно вспоминать, что же мы делали для данной статьи, зачем и каким образом, следует оставлять некие следы. Для этого очень удачно подходит язык разметки markdown, позволяющий без особого труда делать достаточно красивые документы.

Итак, что нужно для счастья.
1. RStudio -- крайне желательна.
2. Установленный пакет knitr в R

В меню RStudio вызываем File->New->R Markdown

В принципе, образец виден сразу. Но мы сделаем свой пример:
Пример (см. MarkdownDemo.Rmd)
Код:
Обзор возможностей Markdown в RStudio
========================================================

Введение
--------

Одной из интересных воможностей исследования с использованием R является создание самодокументирующихся скриптов с использованием пакета **Knitr** и языка разметки [markdown](http://daringfireball.net/projects/markdown/syntax).

Рассмотрим простую задачу построения регрессионной модели для данных из пакета  **MASS** по весам кошачьих сердец

```{r}
library(MASS)
head(cats)
```

Как мы видим, имеются три колонки, с числом строк `r nrow(cats)` и числом столбцов - `r ncol(cats)` (обратите внимание, что цифры взяты прямо из данных). 

Разведочный анализ данных
-------------------------

Проведем экспресс-анализ данных, построив графики
```{r warning=FALSE}
boxplot(Hwt~Sex,data=cats,main="Распределение веса кошачьих сердец\nв зависимости от пола")

```
Можно еще построить диаграмму рассеивания. Обратите внимание, чтобы русский язык отображался корректно следует использовать кодировку UTF-8. Также зададим побольше размер для картинки.

```{r pic1,fig.width=10,fig.height=10, warning=FALSE}
plot(Hwt~Bwt,data=cats,col=Sex,pch=19,main="Вес кошачьих сердец в зависимости от массы тушки")

```
Русские заголовки имеют привычку создавать разные *warnings*, которые мы подавили добавив выше сответсвующую опцию.

Построение модели
-----------------

Дальше можно попробовать построить регрессионуую модель

```{r}
summary(mdl1<-lm(Hwt~Bwt+Sex,data=cats))
```
С помощью дополнительного пакета **xtabs** можно вывести красиво таблицу.

```{r results='asis'}
library(xtable)
print(xtable(mdl1),type = "html")
```

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

```{r}
summary(mdl2<-lm(Hwt~Bwt,data=cats))
```
Ну, теперь самое время построить диагностические графики

```{r fig.width=10,fig.height=10}
par(mfrow=c(2,2))
plot(mdl2)
par(mfrow=c(1,1))
```

Вот так с шутками и прибаутками была простоена регрессия.

$$ y=`r mdl2$coeff[2] ` x + `r mdl2$coeff[1]`+\epsilon $$

(это, типа, формула)

Заключение
------------
По-моему, очень удобный инструмент.


Дальше, жмем кнопку "Knit HTML" и получаем файл html, картинки, а также markup файл, в котором все команды R уже выполнены.

Вот тут нам следует обратить внимание на другую чудесную программу с названием pandoc. Установив оную и запустив из командной строки в нужном каталоге можно получить на выходе Word документ.
Запуск выглядит так
Код:
pandoc -o MarkdownDemo.docx MarkdownDemo.md
Как видно в приведенном во вложении примере, пакет xtable в данном случае бесполезен, поскольку генерит Html. Понятно, что правильнее и интереснее все делать через LaTeX, но, не разводя лишнего холивара, смею заметить, что не все еще им прониклись. Поэтому путь будет Markdown.
Вложения
Тип файла: zip Архив.zip (509.0 Кб, 6 просмотров)
---------
DNF is not an option
Hogfather вне форума   Ответить с цитированием
Реклама