Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 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 )