在交叉验证期间生成可变大小的模型系数矩阵

时间:2015-11-08 10:13:03

标签: r matrix

我正在尝试准备一个适当的结构(例如矩阵或数据框),用于存储线性回归的交叉验证过程的结果。作为其中的一部分,我需要存储每次运行的误差矩阵和每个预测系数的选择。由于系数的数量取决于特征的数量,因此矩阵/数据帧中的条目将是可变的。存储它们的最佳方法是什么? 我想到了将误差矩阵和预测系数矩阵分开,但由于条目的大小是可变的,因此无法继续预测系数部分。 作为一个试验例子,我试图将结构作为矩阵进行处理。

Q1。是否有可能有一个结构将系数向量存储到矩阵或数据框中,以便我们可以访问它以选择具有最小误差的那个? Q2。这个问题的好方法是什么?

> a1 <- matrix(1:2, nrow=2, ncol=1)
> a2 <- matrix(2:3, nrow=2, ncol=1)
> b1 <- matrix(1:3, nrow=3, ncol=1)
> b2 <- matrix(2:4, nrow=3, ncol=1)
> 
> a1
     [,1]
[1,]    1
[2,]    2
> a2
     [,1]
[1,]    2
[2,]    3
> b1
     [,1]
[1,]    1
[2,]    2
[3,]    3
> b2
     [,1]
[1,]    2
[2,]    3
[3,]    4
> M <- matrix(data=NA, nrow=2, ncol=2)
> M[1,1] <- a1
Error in M[1, 1] <- a1 : 

要替换的项目数不是替换长度的倍数

以下是我所说的回复:

> j <- list(first=a2, second=b2)
> k <- list(first=a1, second=b1)
> j
$first
     [,1]
[1,]    2
[2,]    3

$second
     [,1]
[1,]    2
[2,]    3
[3,]    4

> k
$first
     [,1]
[1,]    1
[2,]    2

$second
     [,1]
[1,]    1
[2,]    2
[3,]    3

> M <- list(A=k, B=j)
> M
$A
$A$first
     [,1]
[1,]    1
[2,]    2

$A$second
     [,1]
[1,]    1
[2,]    2
[3,]    3


$B
$B$first
     [,1]
[1,]    2
[2,]    3

$B$second
     [,1]
[1,]    2
[2,]    3
[3,]    4

我稍微修改了上面的代码,以便我可以使用LETTERS和字母如下:

> j <- list(a=a1, b=b1)
> k <- list(a=a2, b=b2)
> M <- list(A=j, B=k)
> M
$A
$A$a
     [,1]
[1,]    1
[2,]    2

$A$b
     [,1]
[1,]    1
[2,]    2
[3,]    3


$B
$B$a
     [,1]
[1,]    2
[2,]    3

$B$b
     [,1]
[1,]    2
[2,]    3
[3,]    4

我希望我可以在本次讨论中提出跟进问题,因为它与同一主题相关。假设,从错误矩阵中,minimum具有索引[1,1](即row = 1且column = 1),那么相应地我必须访问列表元素M $ A $ a(来自上面的代码)。所以我尝试了以下代码:

> m <- LETTERS[1]
> n <- letters[1]
> t <- noquote(paste0("M", "$", m, "$", n, sep=""))
> t
[1] M$A$a
> t <- as.expression(t)
> t
expression("M$A$a")
> eval.parent(t, n=1)
[1] "M$A$a"

所以,我不能以这种方式得到M $ A $ a,但如果我执行下面的代码,我会得到所需的list元素:

> eval.parent(M$A$a, n=1)
     [,1]
[1,]    1
[2,]    2

出了什么问题?

0 个答案:

没有答案