Как извлечь коэффициенты в функции "cv.rq.pen" в R? - PullRequest
1 голос
/ 10 июня 2019
library(rqPen)
n <- 60
p <- 7
rho <- .5
beta <- c(3,1.5,0,2,0,0,0)
R <- matrix(0,p,p)
for(i in 1:p){
  for(j in 1:p){
    R[i,j] <- rho^abs(i-j)
  }
}
set.seed(1234)
x <- matrix(rnorm(n*p),n,p) %*% t(chol(R))
y <- x %*% beta + rnorm(n)
q.lasso_scad = cv.rq.pen(x, y, tau = 0.5, lambda = NULL, penalty = "SCAD", intercept = FALSE, criteria = "CV", cvFunc = "check", nfolds = 10,
                         foldid = NULL, nlambda = 100, eps = 1e-04, init.lambda = 1,alg="QICD")

q.lasso_scad

coef1 = q.lasso_scad$models[[which.min(q.lasso_scad$cv[,2])]]
coef1

У меня есть следующий вывод

Coefficients:
        x1         x2         x3         x4         x5         x6         x7         x8         x9        x10 
 0.0000000  0.3226967  1.8131688 -0.1971847  0.1981571  0.7715635 -0.2289284 -0.1087028  0.9713283 -0.1079333 

Я хочу извлечь только коэффициенты.Как я могу это сделать?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Это немного задом наперед, но вы можете сделать:

as.data.frame(as.list.data.frame(coef1)$coefficients)

Результат:

  as.list.data.frame(coef1)$coefficients
x1                             3.17487201
x2                             1.15712559
x3                             0.05078333
x4                             2.27113756
x5                             0.24893740
x6                             0.00000000
x7                            -0.07542964

Если я правильно понимаю проблему, вывод из rqPen - это что-то необычное list с дополнительными атрибутами. as.list.data.frame в основном заставляет coef1 быть "нормальным" списком, что позволяет мне использовать $coefficients для извлечения значений коэффициентов. Наконец, я использую as.data.frame, чтобы преобразовать его в более удобный объект.

Если вам просто нужны значения, вы можете заменить as.data.frame на as.vector:

as.vector(as.list.data.frame(coef1)$coefficients)

Результат:

[1]  3.17487201  1.15712559  0.05078333  2.27113756  0.24893740  0.00000000
[7] -0.07542964
0 голосов
/ 10 июня 2019

У меня нет доступа к программе R, поэтому я не могу убедиться, что она будет работать. Но попробуйте это:

names(coef1) <- NULL
coef1
...