--- title: "Протокол занятий" author: "Тушавин В. А." date: '1 октября 2016 г ' output: html_document --- ### Атомарные типы данных в R Рассмотрим простые операции в R ```{r} x<-5 x x+1 str(x) summary(x) y<-"Какой-то текст" str(y) summary(y) ``` Ничего сложного, но и интересного мы тоже не видим. Предположим, что у нас есть рост студентов.Опишем два вектора, в одном пусть у нас будет рост, в другом,соответственно, пол. ```{r} x<-c(187,150,150,171,172,185,161,180,178) y<-c("м","ж","ж","ж","ж","м","ж","м","м") summary(x) summary(y) sort(x) ``` Последняя команда сортирует вектор x. Справку о любой команде всегда можно получить набрав перед ней вопрос. ```{r eval=FALSE} ?sort ``` ### Работа с таблицами данных Соберем два вектора в таблицу ```{r} MyTable<-data.frame(x,y) MyTable summary(MyTable) ``` К любому элементу таблицы можно обратиться по индексу ```{r} MyTable[1,1] MyTable[1,2] MyTable[1,] MyTable[,1] MyTable[,2] ``` Можно обратиться по имени колонки ```{r} MyTable$x MyTable$y[2] ``` Мы можем определить размеры любой таблицы ```{r} dim(MyTable) nrow(MyTable) ncol(MyTable) ``` И сделать из неё выборку с помощью команды sample. Как это делается? Созадим вектор, содержащий индексы элементов и присвоим случайную выборку вектору i. Обратите внимание, поскольку каждый раз у нас получается случайное число, то результаты могли бы быть различными, если вы запустили бы это файл у себя на компьютере. Чтобы это избежать командой set.seed я настроил генератор случайных чисел. ```{r} set.seed(2016) k<-1:9 i<-sample(k,5) ``` Сделаем случайную выборку и выберем оставшиеся элементы ```{r} MyTable[i,] MyTable[-i,] test<-MyTable[i,] test2<-MyTable[-i,] test test2 ``` А что делать, если нам нужно выбрать конкретные значения из таблицы? ```{r} subset(MyTable,x>180) subset(MyTable,y=="ж") subset(MyTable,y!="ж") subset(MyTable,y!="ж" & x>180) ``` А можно то же самое записать иначе: ```{r} MyTable[MyTable$x>180,] MyTable[MyTable$y=="ж",] MyTable[MyTable$y!="ж",] MyTable[x>180 & MyTable$y!="ж",] ``` ### Генерация случайных чисел Случайные числа нормально распределенные и равномерно распределеные генерируются весьма просто: ```{r} rnorm(10) runif(10) ``` ### Построение графиков ```{r} plot(x,xlab="Измерение",ylab="Рост, см") plot(x,xlab="Измерение",ylab="Рост, см",main="Рост студентов") plot(x,xlab="Измерение",ylab="Рост, см",main="Рост студентов",pch=19) plot(x,xlab="Измерение",ylab="Рост, см",main="Рост студентов",pch=19,col="red") hist(x) hist(x,xlab="Измерение",ylab="Рост, см",main="Рост студентов",pch=2,col="red",breaks=9) boxplot(x~y,data=MyTable) ``` По идее, наш данные должны быть распределены нормально. Проверим это с помощью теста Шапиро-Уилка. ```{r} shapiro.test(x) # Альтернативный вариант для таблицы shapiro.test(MyTable$x) ``` Проверим его на нормальном и логнормальном распределении, что бы понять, как меняется p-value. ```{r} shapiro.test(rnorm(10)) shapiro.test(rnorm(100)) shapiro.test(rlnorm(100)) ``` Для графического теста используется график квантилей ```{r} qqnorm(x,pch=19) qqline(x) ``` Сравним с графиками для нормального и логнормального распределения. ```{r} qqnorm(a<-rnorm(100),pch=19);qqline(a,col="red",lwd=3) qqnorm(a<-rlnorm(100),pch=19);qqline(a,col="red",lwd=3) ``` Во втором случае, есл мы логарифмируем число, то должны получить нормальное распределение. ```{r} qqnorm(log(a)) ``` И напоминаю, чтобы загрузить данные из Excel через clipboard нужно выполнить команду. ```{r eval=F} mt<-read.table("clipboard",header=T) ```