套索r码-有什么问题吗?

套索r码-有什么问题吗?,r,regression,lasso-regression,lars,R,Regression,Lasso Regression,Lars,我试图使用lars包进行套索回归,但似乎无法使lars位工作。我已输入代码: diabetes<-read.table("diabetes.txt", header=TRUE) diabetes library(lars) diabetes.lasso = lars(diabetes$x, diabetes$y, type = "lasso") lars::lars似乎没有公式接口,这意味着您不能对列名使用公式规范(而且它不接受“data=”参数)。有关此主题和其他“数据挖掘”主题的更多

我试图使用lars包进行套索回归,但似乎无法使lars位工作。我已输入代码:

diabetes<-read.table("diabetes.txt", header=TRUE)
diabetes
library(lars)
diabetes.lasso = lars(diabetes$x, diabetes$y, type = "lasso")

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

我认为一些混淆可能与以下事实有关:
lars
包附带的
diabetes
数据集具有不寻常的结构

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
是一个包含“列”的数据框,这些列本身就是矩阵。在这种情况下,
使用(糖尿病,lars(x,y,type=“lasso”)
lars(糖尿病$x,糖尿病$y,type=“lasso”)
效果良好。(但是仅仅
lars(x,y,type=“lasso”)
不会,因为R不知道在
diabetes
数据框中查找
x
y
变量。)

但是,如果您正在读取自己的数据,您必须自己分离响应变量和预测矩阵,例如

X <- as.matrix(mydiabetes[names(mydiabetes)!="y",])
mydiabetes.lasso = lars(X, mydiabetes$y, type = "lasso")

X你能把dput(糖尿病)
的结果发布在第一部分(使其可复制)吗?
lars()中的
X
被认为是一个矩阵,而
y
是一个向量。您的数据不太可能满足至少
x
的要求,因为如果您显示的代码是准确的,那么这将是一个单一的描述向量。我的数据是一个txt文件,包含10个变量的大约500个数据样本。如何编辑代码使其工作?我已经尝试了上面的2个,但它不起作用。给我们看你的数据,几行就足够了。我已经把我的数据添加到了原来的帖子中。现在“糖尿病”是
pkg:lars
附带的数据集之一(正如OP使用
数据(糖尿病)
。我已经尝试了上面的内容,我得到:lars中的错误(x,y,type=“lasso”):object'x'not found糖尿病对象是一个列表,其'x'元素是一个矩阵。
colnames(diabetes$x)[1]“年龄”“性别”“体重指数”“map”“tc”“低密度脂蛋白”“高密度脂蛋白”“tch”“ltg”“glu”
实际上它是一个矩阵……至少解释器是这么认为的:
是.matrix(diabetes$x)[1]TRUE
…是.data.frame(diabetes$x)[1]FALSE
对不起,我的意思是糖尿病是一个数据框,而不是一个列表(这让我觉得有点混乱)。我同意糖尿病$x是一个矩阵。
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
X <- as.matrix(mydiabetes[names(mydiabetes)!="y",])
mydiabetes.lasso = lars(X, mydiabetes$y, type = "lasso")
X <- model.matrix(y~.,data=mydiabetes)