Учебная страница курса биоинформатики,
год поступления 2015
Линейные модели часть 1
Загрузите датасет laptop_price.csv, содержащий данные о цене на ноутбуки с различными техническими характеристиками. В целом задача - определить, какие факторы сильнее всего влияют на цену. http://makarich.fbb.msu.ru/artemov/R/laptop_price.csv
laptop=read.csv("http://makarich.fbb.msu.ru/artemov/R/laptop_price.csv")
Корреляция
m=as.matrix(laptop[,c("Memory_Gb", "HDD_Gb", "Screen_size_inch", "Battery_capacity_mAh")]) cor(m) cor.test(laptop$Price_RUR, laptop$Memory_Gb)
Зависимость веса машины от расходы топлива
plot(mtcars$mpg, mtcars$wt) lm1<-lm(mtcars$wt~mtcars$mpg) abline(lm1, col='red')
Коэффициенты
lm1$coefficients lm1$coefficients[1]
Остатки
plot(mtcars$mpg, lm1$residuals, pch=19, col='red') plot(density(lm1$residuals), col='red', main="")
Задание 1
Создайте датасет с аллигаторами:
alligator = data.frame( lnLength = c(3.87, 3.61, 4.33, 3.43, 3.81, 3.83, 3.46, 3.76, 3.50, 3.58, 4.19, 3.78, 3.71, 3.73, 3.78), lnWeight = c(4.87, 3.93, 6.46, 3.33, 4.38, 4.70, 3.50, 4.50, 3.58, 3.64, 5.90, 4.43, 4.38, 4.42, 4.25) )
Постройте линейную модель зависимости веса от длины аллигаторов
Какую долю дисперсии объясняет модель?
Построение модели с несколькими предикторами
Шаг 1. Как зависит цена от объема HDD
l1=lm(Price_RUR ~ HDD_Gb, data=laptop) summary(l1)
Нарисуем
plot(laptop$HDD_Gb, laptop$Price_RUR) abline(l1)
Шаг 2. Наблюдаем на scatterplot 2 группы. Влияет фактор, какой тип жесткого диска, HDD или SSD.
plot(laptop$HDD_Gb, laptop$Price_RUR, col=laptop$HDD_type)
Добавим этот фактор в модель
l2=lm(Price_RUR ~ HDD_Gb + HDD_type, data=laptop) summary(l2)
Нарисуем две регрессионные прямые зависимости цены от объема диска: для случая HDD и SSD. Это придётся делать, задавая коэффициенты (intercept и slope) прямой вручную:
l2$coeff plot(laptop$HDD_Gb, laptop$Price_RUR, col=laptop$HDD_type) abline(l2$coeff[1], l2$coeff[2], col="black") abline(l2$coeff[1]+l2$coeff[3], l2$coeff[2], col="red")
Шаг 3. Похоже, что наклоны для двух групп тоже отличаются, другими словами, каждый 1Gb SSD стоит дороже каждого 1Gb HDD. Как это учесть? Для этого добавим в формулу взаимодействие предикторов. HDD_Gb:HDD_type
l3=lm(Price_RUR ~ HDD_Gb + HDD_type + HDD_Gb:HDD_type, data=laptop) #эквивалентно: l3=lm(Price_RUR ~ HDD_Gb*HDD_type , data=laptop) summary(l3)
Нарисуем (объяснение, почему такие коэффициенты наклона - в презентации):
plot(laptop$HDD_Gb, laptop$Price_RUR, col=laptop$HDD_type) abline(l3$coeff[1], l3$coeff[2]) abline(l3$coeff[1]+l3$coeff[3], l3$coeff[2]+l3$coeff[4], col="red")
Предсказание по модели
L3 = lm(formula = Price_RUR ~ HDD_Gb + HDD_type + HDD_Gb:HDD_type, data = laptop) newlaptops=data.frame( HDD_Gb=c(200, 1000, 500), HDD_type=c("SSD", "HDD", "HDD")) newlaptops predict( L3, newlaptops )