0. основы r

37
Основы R Базовые команды и операции Финансовая эконометрика

Upload: msuteam

Post on 15-Jun-2015

240 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 0. основы r

Основы R Базовыекомандыиоперации

Финансовая эконометрика

Page 2: 0. основы r

Содержание

• операции с числами и векторами• массивы и матрицы• циклы и условия• функции и графики• статистический анализ• загрузка пакетов и данных

Page 3: 0. основы r

Операциисчисламиивекторами

Page 4: 0. основы r

Присвоениезначений

# создание скалярной переменнойx <- 5x[1] 5

# создание векторной переменнойx <- c(1,2,3)[1] 1 2 3x <- 1:5[1] 1 2 3 4 5

# повторение числа (вектора) несколько разy <- rep(0,times=2)[1] 0 0y <- rep(x,times=2)[1] 1 2 3 4 5 1 2 3 4 5

Page 5: 0. основы r

Векторнаяарифметика

# операции с векторами выполняются покомпонентно# вектора меньшей длины повторяются несколько раз# размеры векторов должны быть кратнымиx + 1[1] 2 3 4 5 6x + c(1:3,4,4)[1] 2 4 6 8 9

# допустимые операции: +, -, *, /, ^

# арифметические функции:# log(), exp(), sqrt(), sin(), cos(), tan(), min(), max(), abs(), …

# константа «пи»pi[1] 3.141593

Page 6: 0. основы r

Статистическиефункции

# диапазон значений: range(x) == c(min(x),max(x))range(x)[1] 1 5

# длина вектораlength(x)[1] 5

# сумма и произведение элементовsum(x)[1] 15prod(x)[1] 120

# среднее и дисперсияmean(x)[1] 3var(x)[1] 2.5

Page 7: 0. основы r

Сортировказначенийипоследовательности

# сортировкаy <- c(10,-3,6,0)sort(y,decreasing=FALSE)[1] -3 0 6 10sort(y,decreasing=TRUE)[1] 10 6 0 -3

# последовательность с заданным шагомseq(0,1,by=0.2)[1] 0 0.2 0.4 0.6 0.8 1

# последовательность заданной длиныseq(0,9,length=4)[1] 0 3 6 9

Page 8: 0. основы r

Логическиевекторы

# операции сравнения: <, >, <=, >=, ==, !=y <- x > 3[1] FALSE FALSE FALSE TRUE TRUE

# логические операторы: &, |, !y <- ( (x>=3) & (x<=4) )[1] FALSE FALSE TRUE TRUE FALSEy <- ( (x<3) | (x>4) )[1] TRUE TRUE FALSE FALSE TRUE!y[1] FALSE FALSE TRUE TRUE FALSE

# в арифметических операциях TRUE == 1, FALSE == 0sum(x>3)[1] 2

Page 9: 0. основы r

Обращениекэлементамвектора

# с помощью логического вектораx[y][1] 1 2 5

# с помощью набора положительных чиселx[1:3][1] 1 2 3

# с помощью набора отрицательных чисел,# убирая указанные элементыx[-(1:3)][1] 4 5

# с помощью названий элементовnames(x) <- c("mon","tue","wed","thu","fri")x[c("mon","thu")]mon thu 1 4

Page 10: 0. основы r

Массивыиматрицы

Page 11: 0. основы r

Созданиемассива

# изменение размерности вектораz <- 1:1500dim(z) <- c(3,5,100)

# в результате z — матрица 3 на 5 на 100# произведение размерностей равно длине вектора# порядок значений: z[1,1,1], z[2,1,1], …, z[2,5,100], z[3,5,100]

# с помощью функций matrix() и array()z <- matrix(1:20,nrow=5,ncol=4)z <- array(1:20,dim=c(5,4)) [,1] [,2] [,3] [,4][1,] 1 6 11 16[2,] 2 7 12 17[3,] 3 8 13 18[4,] 4 9 14 19[5,] 5 10 15 20

Page 12: 0. основы r

Обращениекэлементамматрицыz <- array(1:20,dim=c(5,4)) [,1] [,2] [,3] [,4][1,] 1 6 11 16[2,] 2 7 12 17[3,] 3 8 13 18[4,] 4 9 14 19[5,] 5 10 15 20

z[,1][1] 1 2 3 4 5z[1,][1] 1 6 11 16z[1:2,1:2] [,1] [,2][1,] 1 6[2,] 2 7

Page 13: 0. основы r

Действиясматрицами

# транспонированиеtz <- t(z)

# обращениеinv.z <- solve(z)

# умножениеz.tz <- z %*% tz

# создание диагональной матрицыy <- diag(1:5)

# собственные значения и вектораe <- eigen(y)e$vectors; e$values

# квадратный корень из матрицыy.sqrt <- e$vectors %*% diag(sqrt(e$values)) %*% t(e$vectors)

Page 14: 0. основы r

Циклыиусловия

Page 15: 0. основы r

Циклыиусловия

# цикл с предусловиемy <- numeric(); i <- 1while (i <= 5) { y[i] <- i^2 i <- i + 1}[1] 1 4 9 16 25

# цикл «от–до»y <- numeric()for (i in 1:5) { y[i] <- i^2}[1] 1 4 9 16 25

# оператор условияif (y[1] == 1) { y <- y + 5}[1] 5 9 14 21 30

Page 16: 0. основы r

Пользовательскиефункциии рисованиеграфиков

Page 17: 0. основы r

Пользовательскиефункции

# объявляем функцию f <- function(x1,x2,c,alpha) { c - x1^alpha - x2^alpha}f(0.5,0.5,1,2)[1] 0.5

# заданные при объявлении функции значения параметров# воспринимаются как значения «по умолчанию»f <- function(x1,x2,c=1,alpha=2) c - x1^alpha - x2^alphaf(0.5,0.5)[1] 0.5

# обратиться к функции также можно, явно задав параметрыf(alpha=2,x2=0.5,x1=0.5,c=1)[1] 0.5

Page 18: 0. основы r

Двумерныеграфикиg <- function(x,c=1) c*abs(x)^0.5x <- seq(-5,5,length=101)

# команда «plot» рисует новый графикplot(x,g(x),type="l",lty="solid",xlim=c(-5,5),ylim=c(0,2.5),main="График",xlab="Аргумент",ylab="Функция")

• type — вид графика: "l" — линии, "p" — точки, ...• lty — вид линии: "solid" — сплошная, "dashed" —

пунктирная, "dotted" — точками, ...• xlim, ylim — границы графика по осям x и y• main, xlab, ylab — подписи графика и осей

# «lines» добавляет линии на существующий графикlines(x,g(x,c=0.5),lty="dashed")

Page 19: 0. основы r

Трёхмерныеграфикиилинииуровняx <- y <- seq(-5,5,length=51)z <- outer(x,y,f)

# команда «persp» рисует трёхмерный графикpersp(x,y,z,theta=30,phi=10,col="white",ticktype="detailed")

• theta, phi — углы обзора по горизонтали и вертикали• col — цвет графика (см. функцию colors()) • ticktype — маркировка осей: "detailed" — точные значения,

"simple" — только стрелки • xlim, ylim, main, xlab, ylab — аналогично команде «plot»

# «contour» рисует линии уровня функции fcontour(x,y,z,nlevels=5)

• nlevels — количество линий уровня

Page 20: 0. основы r

Статистическийанализ

Page 21: 0. основы r

Затабулированныераспределения

# пример со стандартным нормальным распределениемN <- 100; x <- seq(-5,5,by=0.1); alpha <- 0.95

rnorm(n=N,mean=0,sd=1) # генератор случайных чиселqnorm(alpha,mean=0,sd=1) # квантильpnorm(x,mean=0,sd=1) # функция распределенияdnorm(x,mean=0,sd=1) # функция плотности

Название Обозначение в R Параметры

Нормальное norm mean, sd

t-распределение t df

Равномерное unif min, max

Хи-квадрат chisq df

F-распределение f df1, df2

Гамма gamma shape, scale

… … …

Page 22: 0. основы r

Гистограммаиэмпирическаяплотностьy <- faithful$eruptions # исходные данные

# гистограмма с диапазоном данных от 1.6 до 5.2# длина интервалов — 0.2hist(y,breaks=seq(1.6,5.2,by=0.2),prob=TRUE)

# добавление эмпирической плотностиy.pdf <- density(y,bw="ucv")lines(y.pdf)

# добавление исходных данныхrug(y)

Histogram of y

y

De

nsi

ty

1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

Page 23: 0. основы r

Эмпирическаяфункцияраспределенияy.cdf <- ecdf(y)

# y.cdf — функция, подставляя в неё квантили, мы получаем # значения функции распределения# y.cdf(3)[1] 0.3566176

# графикplot(y.cdf,do.points=FALSE,verticals=TRUE)

2 3 4 5

0.0

0.2

0.4

0.6

0.8

1.0

ecdf(y)

x

Fn

(x)

Page 24: 0. основы r

Сравнениесзатабулированнымраспределениемy.long <- y[y>3]plot(ecdf(y.long),do.points=FALSE,verticals=TRUE)x <- seq(3,5.4,by=0.1)

# график нормального распределенияlines(x,pnorm(x,mean=mean(y.long),sd=var(y.long)^0.5),lty=3)

# график квантиль–квантиль qqplot(rnorm(n=10^5,mean=mean(y.long),sd=var(y.long)^0.5),y.long); abline(0,1)

3.0 3.5 4.0 4.5 5.0

0.0

0.2

0.4

0.6

0.8

1.0

ecdf(y.long)

x

Fn

(x)

2 3 4 5 6

3.0

3.5

4.0

4.5

5.0

rnorm(n = 10^5, mean = mean(y.long), sd = var(y.long)^0.5)

y.lo

ng

Page 25: 0. основы r

Тестынанормальность

# Шапиро–Уилка# гипотеза: # статистика: # shapiro.test(y.long)

# Колмогорова–Смирнова# гипотеза: # статистика: ks.test(y.long,"pnorm",mean=mean(y.long),sd=var(y.long)^0.5)

Page 26: 0. основы r

Сравнениедвух нормальныхвыборок# непарный t-тест на равенство средних# гипотеза: # статистика: n1 <- rnorm(n=100,mean=0,sd=1)n2 <- rnorm(n=100,mean=0.1,sd=1.1)t.test(n1,n2,var.equal=FALSE,conf.level=0.95)

# F-тест на равенство дисперсий# гипотеза: # статистика: var.test(n1,n2,conf.level=0.95)

Page 27: 0. основы r

Сравнениедвух произвольныхвыборок# ранговый тест Уилкоксона на равенство средних# гипотеза: # статистика: t <- rt(n=100,df=5); n <- rnorm(n=100,mean=0,sd=1)wilcox.test(t,n,conf.level=0.95)

# тест Колмогорова–Смирнова# гипотеза: # статистика: ks.test(t,n)

Page 28: 0. основы r

Домашнеезадание

• скачать данные о доходности акций или биржевых индексов с сайта finam.ru

• провести тесты на нормальность их распределения• рассмотреть график «квантиль–квантиль» для

эмпирического распределения доходностей и нормального распределения, сделать комментарии по внешнему виду графика и толщине хвостов

Page 29: 0. основы r

, Установкапакетов загрузкаи сохранениеданных

Page 30: 0. основы r

Установкапакетовизлокальногодиска

Шаг 1. Выбор команды из меню

Page 31: 0. основы r

Установкапакетовизлокальногодиска

Шаг 2. Выбор пакетного zip-файла

Page 32: 0. основы r

Установкапакетовизлокальногодиска

Шаг 3. Объявление библиотеки

Page 33: 0. основы r

Установкапакетовс сайта RШаг 1. Выбор команды из меню

Page 34: 0. основы r

Установкапакетовссайта RШаг 2. Выбор зеркала

Page 35: 0. основы r

Установкапакетовссайта RШаг 3. Выбор пакета

Page 36: 0. основы r

Установкапакетовссайта RШаг 4. Объявление библиотеки

Page 37: 0. основы r

Загрузкаисохранениеданных# загрузка данных из Excel# (*.xls-файл должен существовать)library(xlsReadWrite)

xls.getshlib() # только для первого разаdat <- read.xls("C:/R/input.xls",colNames=FALSE)dat V1 V2 V31 1 0 02 0 1 13 1 1 0

# экспорт данных в Excel# (*.xls-файл может не существовать)write.xls(dat,"C:/R/output.xls",colNames=FALSE)