Я анализирую многомерный набор данных Z
с n = 12 выборками и параметрами p = 61 (данные являются числовыми и не имеют NA).Для этого я использую пакет glmnet для вычисления оценок Лассо по данным регрессии (Z[, j]
, Z [, -j]
) для j
между 1 и p.Поэтому я выбираю один столбец для своих наблюдений, другие столбцы - мой дизайн (для тех, кто немного разбирается в многомерной статистике: я хочу использовать Neighborhood Selection).
Кажется, что это легко сделать с использованием cv.glmnet
, что имеет место для больших образцов.Но в этом случае, с n = 12 выборками, glmnet
, кажется, запутался:
as.matrix( coef( cv.glmnet(Z[, -j], Z[, j], intercept=FALSE))[-1])
Ошибка в predmat [которую, seq (nlami)] <- preds: замена имеет нулевую длину</p>
Это ошибка, которую я получаю, но это не всегда происходит.Чтобы изучить ошибку, я использовал следующее: for
-loop
for (j in 1:p){
print(j)
as.matrix( coef( cv.glmnet(Z[, -j], Z[, j], intercept=FALSE))[-1])
}
Первое, что пришло мне в голову, это то, что он работает большую часть j
.Но иногда, как ни с того ни с сего, это, например, j=7
.Я повторил цикл и увидел, что j
, которые не работают, отличаются.Похоже, ошибка зависит от случайности.
set.seed(70)
for (j in 1:p){
print(j)
as.matrix( coef( cv.glmnet(Z[, -j], Z[, j], intercept=FALSE))[-1])
}
Это подтверждает мои предположения.Поэтому я думаю, что это связано с калибровкой параметров настройки.cv.glmnet
использует перекрестную проверку в k-кратном размере.Таким образом, мое следующее предположение состояло в том, что если k > 12
, то при разделении набора данных могут быть пустые наборы.Но установка nfolds = 3
не решила проблему.
Ребята, вы знаете, как решить эту проблему?
Вот минимальный пример проблемы:
library(glmnet)
set.seed(79)
data <- rnorm( n=62*12, mean=0, sd=1)
Z <- matrix( data, nrow=12, ncol=62)
set.seed(2)
for (j in 1:61)
{
print(j)
as.matrix( coef( cv.glmnet(Z[, -j], Z[, j], intercept=FALSE))[-1])
}
В этом случае мы видим, что процедура завершается с ошибкой j=13
.Однако, используя другое начальное число, мы не получаем ошибку:
set.seed(1239340)
for (j in 1:61)
{
print(j)
as.matrix( coef( cv.glmnet(Z[, -j], Z[, j], intercept=FALSE))[-1])
}