Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Эконометрия на финансовом рынке. Практикум

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
11
save(m,file='m.RData')
А для загрузки данных можно использовать функцию load или просто нажать на нужный файл в разделе Files (зона 3).
load(file='m.RData')
1.8. Визуализация
В R есть встроенные инструменты для первичной визуализации информации. Это стандартные графики, сделанные в векторном режиме, т. е. формат графика подстраивается под то окно, в которое вы его записываете. Самый простой пример визуализации – функция plot:
plot(x)
По умолчанию вы получаете график точек, но можно этот график настроить:
plot(x,type='b',main='Title', sub='Subtitle',xlab='Time',
ylab='A',ylim=c(0,7), xlim=c(0,6),col='red')
где type может принимать значения: p – точки, l – линии, b – и точки и линии; main – это основная подпись; sub – дополнительная подпись внизу графика; xlab и ylab – подписи осей; xlim и ylim – формирование границ осей, делается
с помощью вектора из двух элементов с(начало оси, конец оси), col – цвет графика. Больше информации можно получить с помощью ?plot.
Чтобы добавить в график новый элемент, можно воспользоваться функцией lines:
x2=c(4,3,5,6,1)
lines(x2,col='blue',type='b')
Данная функция просто прорисовывает новую линию на построенный вами ранее график. Если линия выходит за пределы графика, то границы графика изменяться не будут:
x3=c(2,4,10,5,4)
lines(x3,col='black',type='b')
Вторая важная функция для визуализации – это построение гистограмм. Функция rnorm() генерирует стандартное нормальное распределение (введите ?rnorm).
r=rnorm(1000)
hist(r)
12
Конечно, ее можно настраивать точно так же, как и функцию plot (введите ?hist), но есть еще несколько индивидуальных параметров: breaks
– количество столбцов на графике, freq – переход из терминов количества наблюдений в плотность распределения:
hist(r,breaks = 50, freq=F, ,main='Title', sub='Subtitle',xlab='X',
ylab='Density',col='red')
Функция lines тут работает точно так же. Мы можем построить теоретическую плотность стандартного нормально распределения поверх гистограммы. В качестве примера возьмем ряд от -4 до 4 с шагом 0,01, который мы получим с помощью функции seq() (введите ?seq). Также мы будем использовать функцию плотности нормального распределения, которая бы принимала полученных на предыдущем шаге вектор (введите
?dnorm),:
a=seq(-4,4,by=0.01)
lines(a,dnorm(a),col='blue')
1.9. Отсутствие наблюдений
В процессе анализа данных нередко возникает проблема отсутствия статистических данных. В данном случае важно не рушить структуру данных, но при этом в дальнейшем корректно их обрабатывать (без изменений классов и свойств). В таких случаях используют переменные NA:
d=c(5,4,3,NA,5)
d
e=c(4,NA,3,2,3)
e
d+e
В отличии от NA, есть элемент NULL, который тоже показывает отсутствие данных, но если NA занимает место в векторе (имеет положение), то NULL является полностью пустым элементом:
a=NA
a=c(a,5)
a
b=NULL
b=c(b,5)
b
Видно, что в первом случае у нас появляется два элемента, а во втором – только один.
13
Чтобы проверить, является ли тот или иной элемент NA или NULL, можно использовать функции is.na() и is.null() :
is.na(a)
is.null(b)
c=NULL
is.null(c)
1.10. Циклы
В процессе работы с данными часто возникает необходимость использовать различные циклы, которые позволяют, изменяя один из параметров, многократно проходить по одному и тому же коду. Самым простым примером использования циклов является поэлементное отображение вектора x:
for(i in 1:NROW(x)){
print(x[i])
}
Переменная i меняется свое значения от 1 до 5, что позволяет на каждом этапе цикла извлечь i-й элемент вектора x и отобразить его в консоле (зона
4) с помощью функции print(). Функция NROW() подсчитывает количество строк в векторе или матрице.
С помощью циклов также можно формировать новые вектора. Допустим, нам нужно рассчитать среднее по столбцам матрицы m. Для этого нужно создать пустую переменную и на каждом этапе цикла добавлять новый элемент в конец созданной переменной, шаг за шагом формируя вектор:
a=NULL
for(i in 1:NCOL(m)){
a=c(a,mean(m[,i]))
}
a
Функция NCOL() определяет количество столбцов матрице, а mean() рассчитывает среднее значение по выборке.
1.11. IF и ELSE
Еще одним из инструментов языка R являются условные операторы, которые позволяют запускать код только в том случае, если выполняется какое-либо условие. Простым примером является отображение только тех элементов вектора, которые удовлетворяют условию:
14
for(i in 1:NROW(x)){
if(x[i]>3){
print(x[i])
}}
Функция IF принимает переменную класса "logical" (TRUE или FALSE). Если она принимает значение TRUE, то внутренний код (внутри фигурных скобок) срабатывает, если FALSE, то код пропускается.
Также есть дополнительный оператор ELSE, который позволяет выполнять код в случае, если IF принимает значение FALSE:
for(i in 1:NROW(x)){
if(x[i]>3){
print(x[i])
}else{
print("x<=3")
}}
Получается некоторый переключатель: если TRUE, то один код, если FALSE, – другой.
В случае, когда есть необходимость использовать более сложные переключатели, то можно использовать функцию switch:
?switch
1.12. Создание функций
В языке R у вас есть возможность создания собственных функций с помощью функции function. Вы задаете аргументы функции в круглых скобках, а тело функции – в фигурных скобках. Чтобы указать переменную, которую возвращает функция, нужно использовать функцию return():
FunctionName=function(x,y){
result=x*(y^2)
return(result)
}
FunctionName(10,4)
15
Задачи
1. Сделайте функцию, которая бы возвращала сумму по всем
столбцам матрицы, и примените ее для матрицы случайных чисел 50 ×50.
2. Для матрицы случайных чисел 50 × 50 создайте вторую матрицу,
которая бы состояла только из тех строк, для которых среднее значение было бы положительно (с использованием for и if).
3. Постройте гистограмму для положительных значений вектора
случайных чисел длинной 2000.
Литература
1. Кабаков Р. И. R в действии. Анализ и визуализация данных
в программе R / пер. с англ. П. А. Волковой. М. : ДМК Пресс, 2014. 588 с.
Официальные мануалы по R:
2. URL: https://cran.r-project.org/doc/manuals/R-data.pdf
3. URL: http://cran.r-project.org/doc/manuals/r-release/R-intro.pdf
16
2. Теория вероятностей
Эта глава предназначена для повторения и дополнения классического курса «Теория вероятности», читаемого студентам КРИ, специализирующимся по направлению «Экономика». В главе будет описан подход к анализу нормального распределения и центральной предельной теореме, начиная с классической вероятностной схемы, базовых распределений и характеристик распределений.
2.1. Классическая вероятностная схема
Если множество  состоит из N равновероятных исходов –
12
, , ,
N
 

, событие A – из M элементов множества .
Вероятность события A равна отношению благоприятствующих ему исходов к количеству всех возможных исходов:
P
M
i
i
A
M
AP
N
.
Пример:
При проведении психологического исследования испытуемому предлагают выбрать одну букву из 26 букв латинского алфавита, одну цифру от 0 до 9, одну букву из 33 букв кириллицы. Найти вероятность того, что при случайном выборе он не укажет первые символы из алфавитов и ноль.
Решение:
Первоначально испытуемый выбирает одну из 26 букв латинского алфавита, и далее для каждого из 26 возможных вариантов подбирает одну из 10 цифр. Очевидно, что если бы на этом эксперимент останавливался, то у нас было бы ровно 260 возможных исходов, различных комбинаций элементов из двух множеств: (a,0), (a,1), …, (a,9), (b,0), (b,1), … (z,9).
Продолжая эксперимент, испытуемый дополнительно к любой случайно выбранной из 260 вариантов комбинации будет выбирать одну из 33 возможных букв кириллицы, что в конечном итоге формирует 8580 элементарных исходов, каждый из которых представляет собой цепочку из трех элементов, выбираемых из соответствующих множеств.
Число всех возможных сочетаний N = 26 10 33 = 8580. Число сочетаний с учетом исключения из рассмотрения указанных символов равно M = 25 9 32 = 7200.
Таким образом, искомая вероятность в задаче: 󰇛󰇜
 
 
 .
17
2.2. Схема Бернулли
Схема Бернулли – это последовательность независимых испытаний, в каждом из которых возможен «успех» с вероятностью
0,1p
и
«неудача» с вероятностью
1qp
.
Распределение вероятностей по Бернулли,
p
B
:
01
P1pp
.
2.3. Биномиальное распределение
Пусть проводится n испытаний по схеме Бернулли. Нас интересует
P
n
k
– вероятность того, что событие наступит ровно k раз.
Соответственно, если k – число «успехов», то
nk
– число «неуспехов»,
т. е. случаи, когда событие не произошло. Согласно теореме о произведении вероятностей, если в конкретном эксперименте известна последовательность «успехов» и «неудач», то искомая вероятность равна
P
k n k
S p q
. Число способов, какими в векторе длины n можно
расставить k единиц, равно
k
n
C
, поэтому
P
k k n k
nn
k C p q

.
Эта формула носит название формулы Якоба Бернулли. С помощью схемы Бернулли определим новое распределение вероятностей.
Биномиальное распределение вероятностей
,np
B
числа успехов в n
испытаниях – соответствия числа успехов k его вероятности:
1 , 0
nk
kn n
C p p k n
либо в табличном виде:
12
22
0 1 2
P 1 1 1 1
n n n n k
k k n
nn
kn
p np p C p p C p p p
.
18
Пример:
Имеется пять человек, каждый из которых с вероятностью 0,2 дает положительный ответ на вопрос, нравится ли ему деревенская жизнь. Вычислить вероятность того, что три человека дадут утвердительный ответ.
Решение:
󰇛󰇜 
󰇛  󰇜


 .
Чтобы решить пример в R, нужно использовать функцию dnorm(), которая принимает нужное количество положительных результатов, общее количество испытаний и вероятность положительного исхода:
p=dbinom(x=3,size=5,prob=0.2)
p
2.4. Случайные величины и их распределения
Случайная величина (с. в.) – функция
:R

, если
Rx
: x
  
является событием.
Распределение случайной величины – это соответствие значения с. в. вероятности его принять:
Pxx

;
для множества на прямой – соответствие вероятности в него попасть:
P,a x b a b
  
.
С. в. имеет дискретное распределение, если существует конечный или счетный набор чисел
12
,,aa
:
1
P1
i
i
a
.
Функция распределения с. в. – функция
:R 0,1F
:
󰇛󰇜
 󰇛󰇜 󰇛󰇛󰇜 󰇜.
Функция распределения описывает все распределение с. в. Аналогично введенным абстракциям, у разных с. в. могут быть одинаковые функции распределения.
Свойства функции распределения случайной величины
1. Ограниченность:
01Fx

.
2. Существование пределов:
 
lim 1
x
Fx

,
 
lim 0
x
Fx

.
19
3. Непрерывность слева
 
0
0
0
lim
xx
F x F x


.
4.
0 0 0
0PF x F x x

.
5.
   
P a b F b F a

.
6. Неубывание:
12
xx
12
F x F x

.
1 2 2 1 1 2
P0F x F x F x F x x x
.
Случайная величина имеет абсолютно непрерывное распределение, если существует неотрицательная функция
fx
:
   
x
F x f t dt


,
где
fx
– плотность распределения с. в.
Свойства плотности распределения с. в.
1.
0fx
.
2.
   
d
f x F x
dx

.
3. Условие нормировки
 
1f x dx


.
4.
     
P
b
a
a b F b F a f x dx
.
5. Если пределы
 
limxfx

и
 
limxfx

существуют, то они равны
нулю.
Многие функции и плотности распределений встроены в базовые пакеты R. Чтобы посмотреть информацию по всем распределениям, можно использовать ?distributions. Для каждого распределения можно получить функцию распределения, плотность распределения и квантиль распределения, а также сгенерировать с. в. в достаточном количестве при заданных параметрах.
20
hist(rnorm(1000),breaks = 50, freq=F, ,main='Гистограмма и теоретическая плотность \n нормального распределения',xlab='x',ylab='Плотность',col='red')
lines(seq(-4,4,by=0.01),dnorm(seq(­4,4,by=0.01)),col='blue')
hist(runif(1000),breaks = 50, freq=F, ,main='Гистограмма
и теоретическая плотность \n равномерного распределения',xlab='x',ylab='Плотность',col='red')
lines(seq(0,1,by=0.01),dunif(seq(0,1,by=0.01)),col='blue ')
hist(rbinom(1000,100,0.3),breaks = 50, ,main='Гистограмма и теоретическая плотность \n
биноминального распределения',xlab='x',ylab='Плотность',col='red')
points(seq(0,100,by=1),dbinom(seq(0,100,by=1),100,0.3)*1 000,col='blue')
hist(rchisq(1000,10),breaks = 50, freq=F, ,main='Гистограмма и теоретическая плотность \n
распределения Хи квадрат',xlab='x',ylab='Плотность',col='red')
lines(seq(0,40,by=0.01), dchisq (seq(0,40,by=0.01),10),col='blue')
hist(rt(1000,10),breaks = 50, freq=F, ,main='Гистограмма
и теоретическая плотность \n распределения Стьюдента',xlab='x',ylab='Плотность',col='red')
lines(seq(-10,10,by=0.01),dt(seq(­10,10,by=0.01),10),col='blue')
hist(rf(1000,10,100),breaks = 50, freq=F, ,main='Гистограмма и теоретическая плотность \n распределения Фишера',xlab='x',ylab='Плотность',col='red')
lines(seq(0,10,by=0.01), df(seq(0,10,by=0.01),10,100),col='blue')
2.5. Нормальное распределение
Случайная величина  имеет нормальное распределение с параметрами
Ra
и
0
,
2
,€a
N
, если плотность распределения выглядит
следующим образом:
 
2
2
2
2
1
.
2
xa
f x e
