---
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)

```


















