Код Лассо - что с ним не так?
Я пытаюсь выполнить регрессию лассо, используя пакет lars, но не могу заставить его работать. Я ввел код:
diabetes<-read.table("diabetes.txt", header=TRUE)
diabetes
library(lars)
diabetes.lasso = lars(diabetes$x, diabetes$y, type = "lasso")
Однако я получаю сообщение об ошибке: Ошибка в rep(1, n): неверный аргумент 'times'.
Я попытался ввести это так:
diabetes<-read.table("diabetes.txt", header=TRUE)
library(lars)
data(diabetes)
diabetes.lasso = lars(age+sex+bmi+map+td+ldl+hdl+tch+ltg+glu, y, type = "lasso")
Но затем я получаю сообщение об ошибке: "Ошибка в ларах (возраст + пол + bmi + map + td + ldl + hdl + tch + ltg + glu, y, type = "lasso"): объект 'age' not found'
Куда я иду не так?
РЕДАКТИРОВАТЬ: Данные - как показано ниже, но с еще 5 столбцами.
ldl hdl tch ltg glu
1 -0.034820763 -0.043400846 -0.002592262 0.019908421 -0.017646125
2 -0.019163340 0.074411564 -0.039493383 -0.068329744 -0.092204050
3 -0.034194466 -0.032355932 -0.002592262 0.002863771 -0.025930339
4 0.024990593 -0.036037570 0.034308859 0.022692023 -0.009361911
5 0.015596140 0.008142084 -0.002592262 -0.031991445 -0.046640874
2 ответа
lars::lars
не похоже на интерфейс формулы, что означает, что вы не можете использовать спецификацию формулы для имен столбцов (и, кроме того, он не принимает аргумент "data="). Для получения дополнительной информации по этой и другим темам "интеллектуального анализа данных" вы можете получить копию классического текста: "Элементы статистического обучения". Попробуй это:
# this obviously assumes require(lars) and data(diabetes) have been executed.
> diabetes.lasso = with( diabetes, lars(x, y, type = "lasso"))
> summary(diabetes.lasso)
LARS/LASSO
Call: lars(x = x, y = y, type = "lasso")
Df Rss Cp
0 1 2621009 453.7263
1 2 2510465 418.0322
2 3 1700369 143.8012
3 4 1527165 86.7411
4 5 1365734 33.6957
5 6 1324118 21.5052
6 7 1308932 18.3270
7 8 1275355 8.8775
8 9 1270233 9.1311
9 10 1269390 10.8435
10 11 1264977 11.3390
11 10 1264765 9.2668
12 11 1263983 11.0000
Я думаю, что некоторая путаница может быть связана с тем, что diabetes
набор данных, который поставляется с lars
Пакет имеет необычную структуру.
library(lars)
data(diabetes)
sapply(diabetes,class)
## x y x2
## "AsIs" "numeric" "AsIs"
sapply(diabetes,dim)
## $x
## [1] 442 10
##
## $y
## NULL
##
## $x2
## [1] 442 64
Другими словами, diabetes
является фреймом данных, содержащим "столбцы", которые сами являются матрицами. В этом случае, with(diabetes,lars(x,y,type="lasso"))
или же lars(diabetes$x,diabetes$y,type="lasso")
отлично работает (Но просто lars(x,y,type="lasso")
не будет, потому что R не знает, чтобы искать x
а также y
переменные в пределах diabetes
фрейм данных.)
Однако, если вы читаете свои собственные данные, вам придется разделить переменную ответа и матрицу предиктора самостоятельно, что-то вроде
X <- as.matrix(mydiabetes[names(mydiabetes)!="y",])
mydiabetes.lasso = lars(X, mydiabetes$y, type = "lasso")
Или вы могли бы использовать
X <- model.matrix(y~.,data=mydiabetes)