Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Динамические модели в эконометрике
Статистический анализ доходности
финансовых активов
Содержание
•
•
•
•
•
•
операции с числами и векторами
массивы и матрицы
циклы и условия
функции и графики
статистический анализ
загрузка пакетов и данных
Операции с числами и векторами
Присвоение значений
# создание скалярной переменной
x <- 5
x
[1] 5
# создание векторной переменной
x <- c(1,2,3)
[1] 1 2 3
x <- 1:5
[1] 1 2 3 4 5
# повторение числа (вектора) несколько раз
y <- rep(0,times=2)
[1] 0 0
y <- rep(x,times=2)
[1] 1 2 3 4 5 1 2 3 4 5
Векторная арифметика
# операции с векторами выполняются покомпонентно
# вектора меньшей длины повторяются несколько раз
# размеры векторов должны быть кратными
x +
[1]
x +
[1]
1
2 3 4 5 6
c(1:3,4,4)
2 4 6 8 9
# допустимые операции: +, ‐, *, /, ^
# арифметические функции:
# log(), exp(), sqrt(), sin(), cos(), tan(), min(), max(), abs(), …
# константа «пи»
pi
[1] 3.141593
Статистические функции
# диапазон значений: range(x) == c(min(x),max(x))
range(x)
[1] 1 5
# длина вектора
length(x)
[1] 5
# сумма и произведение элементов
sum(x)
[1] 15
prod(x)
[1] 120
# среднее и дисперсия
mean(x)
[1] 3
var(x)
[1] 2.5
Сортировка значений и последовательности
# сортировка
y <- c(10,-3,6,0)
sort(y,decreasing=FALSE)
[1] -3 0 6 10
sort(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
Логические векторы
# операции сравнения: <, >, <=, >=, ==, !=
y <- x > 3
[1] FALSE FALSE FALSE TRUE TRUE
# логические операторы: &, |, !
y <- ( (x>=3) & (x<=4) )
[1] FALSE FALSE TRUE TRUE FALSE
y <- ( (x<3) | (x>4) )
[1] TRUE TRUE FALSE FALSE TRUE
!y
[1] FALSE FALSE TRUE TRUE FALSE
# в арифметических операциях TRUE == 1, FALSE == 0
sum(x>3)
[1] 2
Обращение к элементам вектора
# с помощью логического вектора
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
Массивы и матрицы
Создание массива
# изменение размерности вектора
z <- 1:1500
dim(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
Обращение к элементам матрицы
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 5
z[1,]
[1] 1 6 11 16
z[1:2,1:2]
[,1] [,2]
[1,]
1
6
[2,]
2
7
Действия с матрицами
# транспонирование
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)
Циклы и условия
Циклы и условия
# цикл с предусловием
# оператор условия
y <- numeric(); i <- 1
while (i <= 5) {
y[i] <- i^2
i <- i + 1
}
[1] 1 4 9 16 25
if (y[1] == 1) {
y <- y + 5
}
[1] 5 9 14 21 30
# цикл «от–до»
y <- numeric()
for (i in 1:5) {
y[i] <- i^2
}
[1] 1 4 9 16 25
Пользовательские функции и
рисование графиков
Пользовательские функции
# объявляем функцию
,
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^alpha
f(0.5,0.5)
[1] 0.5
# обратиться к функции также можно, явно задав параметры
f(alpha=2,x2=0.5,x1=0.5,c=1)
[1] 0.5
Двумерные графики
g <- function(x,c=1) c*abs(x)^0.5
x <- 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")
Трёхмерные графики и линии уровня
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» рисует линии уровня функции f
contour(x,y,z,nlevels=5)
• nlevels — количество линий уровня
Статистический анализ
Затабулированные распределения
Название
Обозначение в R
Параметры
Нормальное
norm
mean, sd
t‐распределение
t
df
Равномерное
unif
min, max
Хи‐квадрат
chisq
df
F‐распределение
f
df1, df2
Гамма
gamma
shape, scale
…
…
…
# пример со стандартным нормальным распределением
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)
# генератор случайных чисел
# квантиль
# функция распределения
# функция плотности
Гистограмма и эмпирическая плотность
y <- faithful$eruptions
# исходные данные
# гистограмма с диапазоном данных от 1.6 до 5.2
# длина интервалов — 0.2
hist(y,breaks=seq(1.6,5.2,by=0.2),prob=TRUE)
# добавление эмпирической плотности
Histogram of y
0.6
0.7
y.pdf <- density(y,bw="ucv")
lines(y.pdf)
0.3
0.2
0.1
0.0
Density
rug(y)
0.4
0.5
# добавление исходных данных
1.5
2.0
2.5
3.0
3.5
y
4.0
4.5
5.0
Эмпирическая функция распределения
y.cdf <- ecdf(y)
# y.cdf — функция, подставляя в неё квантили, мы получаем
# значения функции распределения
# .
∑
y.cdf(3)
[1] 0.3566176
# график
plot(y.cdf,do.points=FALSE,verticals=TRUE)
0.0
0.2
0.4
Fn(x)
0.6
0.8
1.0
ecdf(y)
2
3
4
x
5
Сравнение с затабулированным
распределением
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)
4.0
3.0
0.0
0.2
3.5
0.4
Fn(x)
y.long
0.6
4.5
0.8
5.0
1.0
ecdf(y.long)
3.0
3.5
4.0
4.5
x
5.0
2
3
4
5
rnorm(n = 10^5, mean = mean(y.long), sd = var(y.long)^0.5)
6
Тесты на нормальность
# Шапиро–Уилка
# гипотеза: : ~
∑
# статистика:
#
,
∑
~
̅
,
,…,
.
,
0,1 ,
shapiro.test(y.long)
# Колмогорова–Смирнова
# гипотеза: : ~
# статистика:
sup .
ks.test(y.long,"pnorm",mean=mean(y.long),sd=var(y.long)^0.5)
Сравнение двух нормальных выборок
# непарный t‐тест на равенство средних
# гипотеза: : ̅
̅
̅
# статистика:
̅
.
~
2
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‐тест на равенство дисперсий
# гипотеза:
# статистика:
:
1
~
,
var.test(n1,n2,conf.level=0.95)
Сравнение двух произвольных выборок
# ранговый тест Уилкоксона на равенство средних
# гипотеза: : ̅
̅
# статистика:
min
,
,
∑
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)
sup
,
Задание
В файле «hw1.csv» по столбцам содержатся значения
случайных величин. Количество этих величин равно 1000, и
файл имеет 1000 столбцов
Вашей задачей является определение нормальности этих
случайных величин
Ответ — в виде csv‐файла с вектором‐столбцом из нулей и
единиц, где единица соответствует нормально
распределённой случайной величине. Столбец этого файла
должен иметь произвольный заголовок
Установка пакетов, загрузка и
сохранение данных
Установка пакетов из локального диска
Шаг 1. Выбор команды из меню
Установка пакетов из локального диска
Шаг 2. Выбор пакетного zip‐файла
Установка пакетов из локального диска
Шаг 3. Объявление библиотеки
Установка пакетов с сайта R
Шаг 1. Выбор команды из меню
Установка пакетов с сайта R
Шаг 2. Выбор зеркала
Установка пакетов с сайта R
Шаг 3. Выбор пакета
Установка пакетов с сайта R
Шаг 4. Объявление библиотеки
Загрузка и сохранение данных
# загрузка данных из Excel
# (*.xlsx‐файл должен существовать)
library(xlsx)
dat <- read.xlsx("C:/R/input.xls",sheetIndex=1,header=TRUE)
dat
V1 V2 V3
1 1 0 0
2 0 1 1
3 1 1 0
# экспорт данных в Excel
# (*.xlsx‐файл может не существовать)
write.xlsx(dat,"C:/R/output.xlsx",sheetName="Таблица1",
col.names=TRUE,row.names=FALSE,append=FALSE)
Загрузка и сохранение данных
# загрузка данных из *.csv
dat <- read.csv("C:/R/input.csv", header=TRUE, sep=",")
• header == TRUE, если в файле есть заголовки столбцов
• sep — разделитель столбцов ("," для *.csv)
# загрузка данных из *.txt
dat <- read.table("C:/R/input.txt",
header=TRUE, sep="," ,dec=".")
• dec — разделитель целой и дробной частей
• header, sep — аналогично read.csv