# создаем вектор
height <- c(174, 162, 188, 192, 165, 168, 174)
# смотрим структуру переменной
str(height)
# проверка: это вектор?
is.vector(height)
# проверка: он числовой?
is.numeric(height)
# строим график
plot(height)
# выбираем 1-й элемент
height[1]
# длина вектора
length(height)
# элементы со 2-го по 5-й
height[2:5]
# все элементы, кроме 1-го
height[-1]
sex <- c("male", "female", "male", "male", "female", "female", "male")
str(sex)
is.character(sex)
plot(sex)
sex.f <- factor(sex)
plot(sex.f)
str(sex.f)
as.numeric(sex.f)
weight <- c(69, 68, 93, 87, 59, 82, 72)
plot(height, weight)
plot(height, weight, pch=as.numeric(sex.f))
plot(height, weight, pch=as.numeric(sex.f), col=as.numeric(sex.f))
levels(sex.f)
nlevels(sex.f)
nl <- nlevels(sex.f)
legend("topleft", pch=1:nl, col=1:nl, legend=levels(sex.f))
size <- c("L", "S", "XL", "XXL", "S", "M", "L")
size_f <- factor(size)
str(size_f)
size_o <- ordered(size_f, levels=c("S", "M", "L", "XL", "XXL"))
str(size_o)
l <- list(1,"a", c(TRUE, F))
str(l)
l <- list(num=1, ch="a", log=c(TRUE, F))
str(l)
l[1]
str(l[1])
l[[1]]
str(l[[1]])
l$log
length(l$log)
df <- data.frame(height, weight, sex, size)
df[1,1]
df$height[1]
df[,1]
df[,"height"]
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(paste0(dirname(dirname(path)),"/data"))
getwd()
# В результате получится таблица с данными, которую будем называть swiss.01
(swiss.01 <- read.table("Swiss Bank Notes.dat", header=TRUE, sep="", dec=","))
View(swiss.01)
# В результате получится таблица с данными, которую будем называть swiss.01
(swiss.01 <- read.table("Swiss Bank Notes.dat", header=TRUE, sep="", dec=","))
# Результат импорта не показан.
# Чтобы посмотреть, что получилось, чтобы убедиться, что все правильно,
# наберем
swiss.01
# Создадим вектор, первые 100 элементов равны 1, следующие 100 - 0
origin <- c(rep(1, 100), rep(0, 100))
# Объединяем таблицу и вектор в новую таблицу
swiss.02 <- data.frame(swiss.01, origin)
View(swiss.02)
swiss.02
# Проверка типа данных у объекта
class(swiss.02)
# сначала удалим данные из памяти для чистоты эксперимента
rm(swiss.02, origin)
# Команда rm(имя, имя, имя)
# Удаляет перечисленные в скобках объекты из пути поиска и
# тем самым очищает память.
# Команда rm(list = ls(all = TRUE)) полностью очищает память
swiss.02 <- swiss.01
swiss.02$origin <- c(rep(1, 100), rep(0, 100))
# сначала удалим данные из памяти для чистоты эксперимента
rm(swiss.02, origin)
origin <- 0
# Разберитесь, как объединяется таблица и скаляр…
swiss.02 <- data.frame(swiss.01, origin)
View(swiss.02)
swiss.02$origin[1:100] <-1
swiss.02
# проверяем имена переменных: проверим себя, вдруг что-то забыли
names(swiss.02)
dim(swiss.02)
# Для векторов length(swiss.02)
nrow(swiss.02)
ncol(swiss.02)
str(swiss.02)
summary(swiss.02)
# Вариант 1. Все параметры задаются по умолчанию
hist(swiss.02$dist_up)
hist(swiss.02$Diag)
# Вариант 2. Задаем число столбцов,
# остальные параметры задаются по умолчанию
hist(swiss.02$dist_up, breaks=18)
hist(swiss.02$Diag, breaks=18)
# Вариант 3. Задаем число столбцов и способ вычисления высоты столбца,
# остальные параметры задаются по умолчанию
hist(swiss.02$dist_up, breaks=18, probability=TRUE)
# Дополнительно. При построении гистограммы можно задавать границы
# интервалов, над которыми строятся столбики. Как-то так...
hist(x, breaks=b, ...)
# Строим столбиковую диаграмму
# Пример. Смертность в штате Вирджиния - находится во в
# поставляемом вместе с набором данных VADeaths.
# Посмотрим его:
VADeaths
barplot(VADeaths, beside=TRUE, legend=TRUE, ylim=c(0, 90),
ylab="Deaths per 1000", main="Death rates in Virginia")
groupsizes <- c(18, 30, 32, 10, 10)
labels <- c("A", "B", "C", "D", "F")
pie(groupsizes, labels, col=c("grey40", "white", "grey", "black", "grey90"))
# Строим диаграмму рассеивания
plot(swiss.02$Length, swiss.02$Diag)
# Вариант 1
# Строим диаграмму рассеивания, при этом точки, соответствующие фальшивым
# и подлинным банкнотам отмечаем разными символами.
# Сначала рисуем пустые оси координат, смасштабированные
# «правильным образом»
plot(swiss.02$Length, swiss.02$Diag, type="n", xlab="Length",
ylab="Diagonal", main="Swiss Bank Notes")
# Добавляем точки, соответствующие подлинным банкнотам
points(swiss.02$Length[swiss.02$origin==1],
swiss.02$Diag[swiss.02$origin==1],pch=3)
# Добавляем точки, соответствующие фальшивым банкнотам
points(swiss.02$Length[swiss.02$origin==0],
swiss.02$Diag[swiss.02$origin==0],pch=1)
# Вариант 2
# Строим диаграмму рассеивания, точки, соответствующие фальшивым и
# подлинным банкнотам отмечаем разными символами и разным цветом.
plot(swiss.02$Length, swiss.02$Diag, type="n", xlab="Length",
ylab="Diagonal", main="Swiss Bank Notes")
points(swiss.02$Length[swiss.02$origin==1],
swiss.02$Diag[swiss.02$origin==1],pch=3, col=3)
points(swiss.02$Length[swiss.02$origin==0],
swiss.02$Diag[swiss.02$origin==0],pch=1, col=6)
# Вариант 1
plot(swiss.02)
# Вариант 2
pairs(swiss.02)
# Просто для сведения:
pairs(swiss.01, main = "Швейцарские банкноты",
pch = c(21), cex = 1, bg = c("red","green")[as.factor(swiss.02$origin)])
# Что понимается под фактором? Зачем их вводить?
# объясняем пакету, что переменную origin надо считать фактором
swiss.02$origin <- as.factor(swiss.02$origin)
# проверяем, действительно ли переменная origin стала фактором
is.factor(swiss.02$origin)
class(swiss.02$origin)
# строим ящик с усами, фактор должен быть указан первым...
plot(swiss.02$origin, swiss.02$Diag)
# если этого не сделать, если переменные поставить не в том порядке
# вместо ящика с усами получим…
plot(swiss.02$Diag, swiss.02$origin)
# так на график добавляется заголовок
title("Boxplot", "Swiss Bank Notes")
# так на график добавляется заголовок и подписи осей
plot(swiss.02$Length, swiss.02$Diag, xlab="Length", ylab="Diagonal")
title("Swiss Bank Notes")
# заголовок и подписи осей можно добавлять и так
plot(swiss.02$Length, swiss.02$Diag,
xlab="Length", ylab="Diagonal", main="Swiss Bank Notes")
# Такой перенос строки программа поймет:
# Такой перенос строки программа поймет:
# раз скобки не закрыты, значит ввод команды не завершен.
# Такой перенос строки программа поймет:
# раз скобки не закрыты, значит ввод команды не завершен.
# Такой перенос строки программа поймет:
# раз скобки не закрыты, значит ввод команды не завершен.
# Такой перенос строки программа поймет:
# раз скобки не закрыты, значит ввод команды не завершен.
# Задаем рабочую папку и начинаем анализ с импорта данных в R.
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(paste(dirname(path),"/../data"))
town.1959 <- read.table("town_1959.csv", header=T, sep="," )
# Посмотрим на данные.
# Зачем смотреть, все вроде бы правильно?
# Например, если бы мы пропустили любой из параметров
# header=T или sep=",", результат импорта был бы неправильным.
town.1959
# Столбец с номером нам не нужен, уберем его
town.1959$номер = NULL
# Посмотрим описательные статистики, характеризующие выборку.
summary(town.1959[,2])
# Наблюдение 1. Среднее арифметическое больше 3 квартили!
# Уточним.
sum(town.1959[,2] < 52.93)/nrow(town.1959) * 100
# Сколько всего наблюдений?
nrow(town.1959)
# Если принять, что Москва и Санкт-Петербург выбросы, и
# исключить их из выборки, получим следующее
summary(town.1959[-c(1,2),2])
# Посмотрим, на сколько процентов изменилось
# среднее арифметическое
(52.93 -  45.00)/ 52.93 * 100
# Какую долю городов мы удалили из выборки?
2/1004 * 100
# Сосчитать только среднее
mean(town.1959[,2])
# Сосчитать только медиану
median(town.1959[,2])
# Сосчитать усеченное среднее,  р=0.95
mean(town.1959[,2], trim = .025)
# На гистограмме видны только выбросы
hist(town.1959[,2])
# На гистограмме
hist(log(town.1959[,2]), breaks=44)
# Внешне распределение похоже на лог-нормальное.
# Внешне распределение похоже на лог-нормальное.
