Что-то давно никто не писал тут, походу все в отпусках. Раз так, то позволю себе написать пост про применение R для построения графиков. Данные будут взяты из предыдущего поста. Для этого можно пройти на страницу Wiki, скопировать и сохранить табличку в csv file: link.
Считываются данные одной строкой:
data <- read.table(«./AnscombeQuartet.csv», header = TRUE, sep =»,»)
После этого все столбцы доступны по соответствующему header name:
data$x1
Далее можно проверить статистики, соответствуют ли они заявленным значениям.
Сделать это можно двумя способами:
- Применить к каждому столбцу функцию: mean(data$x1), var(data$x1), ….
- Либо воспользоваться функцией sapply(). Это некий аналог функции map в функциональных языках программирования.
(sapply(data, mean); sapply(data, var)):
Все статистики совпадают с заявленными. Теперь построим графики:
Если нужно построить всего один график, то делается это очень просто;
plot(data$x1, data$y1, xlab = «x», ylab = «y») #xlab, ylab add label names
Но нам нужно пробежаться по всем столбцами и уместить все 4 графика в одну фигуру. Это можно сделать в цикле:
par(mfrow=c(2,2), mar=c(2.0, 1.5, 1.5, 1.5), oma = c(2,2,2,2), pch = 16)
for(i in 1:4){
x = eval(parse(text = paste( «data$x», i, sep=»» )))
y = eval(parse(text = paste( «data$y», i, sep=»» )))
plot( x, y )
abline( lm(y ~ x) )
grid( 10,10 )
}
Получаем график (на всякий случай в высоком разрешении: URL):
Пояснения:
- abline( lm(y ~ x) ) строит линейную модель. Сама функция lm() возвращает объект определенного класса, и для того чтобы построить выходные данные не нужно их специальным образом извлекать, потому как функция abline( ) сама распознает контекст.
- Функция grid() добавляет вертикальные и горизонтальные линии координатной сетки
- Функцией par( ) задаются расстояния от границ каждого графика до границ всей фигуры, также расстояния между своими фигурами, pch — вид маркера. Но можно было бы использовать dafault значения.
- mfrow() задает геометрию расположения графиков
Весь R код использованный при написании поста можно найти ТУТ.