R 是否有可能将包跳跃的“coef”输出转换为系数的完整向量?

R 是否有可能将包跳跃的“coef”输出转换为系数的完整向量?,r,R,假设我有一个由以下代码生成的系数列表,我希望它的形式如下面的注释所示。有什么直接的方法吗 library(leaps) set.seed(1) N = 1000 P = 20 x=matrix(rnorm(N*P),N,P) eps=rnorm(N) beta = sample(c(0,1), P, replace=T) y = x %*% beta + eps regfit.full= regsubsets(y~., data=data.frame(x=x[train,], y=y[

假设我有一个由以下代码生成的系数列表,我希望它的形式如下面的注释所示。有什么直接的方法吗

library(leaps)

set.seed(1)

N = 1000
P = 20

x=matrix(rnorm(N*P),N,P)
eps=rnorm(N)

beta = sample(c(0,1), P, replace=T)
y = x %*% beta + eps

regfit.full= regsubsets(y~., data=data.frame(x=x[train,], y=y[train]), nvmax=20)
coefi = coef(regfit.full, id=3)

#Output:
#> coefi
#(Intercept)         x.5        x.10        x.20
# 0.03730904  1.39039580  1.68618982  1.15607983

# How do I generate from coef a vector of the form 
# transformed = [0 0 0 0 1.39039580 0 0 0 0 1.68618982 0...0 1.15607983]
尝试以下方法:

# generate colnames with paste, since x is matrix without column names
# and compare with names in coefficient vector
v <- paste("x", seq_len(ncol(x)), sep=".") %in% names(coefi)
coef_full <- numeric(ncol(x))
coef_full[v] <- coefi[-1] # remove intercept
coef_full
#使用paste生成colnames,因为x是没有列名的矩阵
#并与系数向量中的名称进行比较

v对于您的具体示例,我不确定您的
列车
向量是什么,但我自己的
列车
有一种可能性:

set.seed(2)
train <- sample(length(y), length(y)*0.5)

regfit.full= regsubsets(y~., data=data.frame(x=x[train,], y=y[train]), nvmax=20)
coefi = coef(regfit.full, id=3)

#> coefi
#(Intercept)         x.6         x.7        x.16 
# 0.09013856  1.10080511  0.97903517  1.37892870 


vars <- paste("x", seq(ncol(x)), sep=".")
res <- rep(0, length(vars))
put <- which(vars %in% names(coefi))
take <- which(names(coefi) %in% vars)
res[put] <- coefi[take]
res
#> res
# [1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.1008051 0.9790352
# [8] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#[15] 0.0000000 1.3789287 0.0000000 0.0000000 0.0000000 0.0000000
set.seed(2)
训练系数
#(截距)x.6 x.7 x.16
# 0.09013856  1.10080511  0.97903517  1.37892870 

vars这里是另一种方法

> pos <- na.omit(as.numeric(gsub("[[:punct:]]*[[:alpha:]]*", "" ,names(coefi))))
> transformed  <- rep(0, pos[length(pos)])
> transformed[pos] <- coefi[-1]
> 
> coefi       # original
(Intercept)         x.2         x.7        x.12 
 0.08130501  1.16965068  1.24027061  1.22437825 
> transformed # desired
 [1] 0.000000 1.169651 0.000000 0.000000 0.000000 0.000000 1.240271 0.000000 0.000000 0.000000 0.000000 1.224378
>pos已转换[pos]
>科菲#原创
(截距)x.2X.7X.12
0.08130501  1.16965068  1.24027061  1.22437825 
>转变#期望
[1] 0.000000 1.169651 0.000000 0.000000 0.000000 0.000000 1.240271 0.000000 0.000000 0.000000 0.000000 1.224378

我的训练向量与你的非常相似。稍后我可能会对问题进行编辑,以明确这一点。