Как разработать модель логистической регрессии с использованием пакета SGL?
В настоящее время я работаю с набором данных, который имеет очень большое количество переменных. Поэтому я решил использовать метод выбора переменных разреженной группы LASSO, реализованный в пакете SGL.
Моя проблема - это проблема логистической регрессии, которая является одной из возможных моделей для построения с использованием этого пакета. Однако, когда я пытаюсь использовать его, я получаю сообщение об ошибке. Мой фрейм данных называется N, а мой двоичный вектор называется y:
> x <- as.matrix(N)
> y <- as.matrix(Y)
> data <- list(x, y=y)
> sgl_small <- cvSGL(data, groups, type="logit")
Error: NA/NaN/Inf in foreign function call (arg 1)
В предыдущей ситуации Y был двоичным числовым вектором нулей и единиц, поэтому я подумал, что проблема заключается в том, что Y не является фактором, поэтому я попробовал другой раз:
> x <- as.matrix(N)
> y <- as.factor(Y))
> data <- list(x, y=y)
> sgl_small <- cvSGL(data, groups, type="logit")
Error in seq.default(log(max.lam),
log(min.lam), (log(min.lam) - log(max.lam))/(nlam - :
'from' cannot be NA, NaN or infinite
In addition: Warning messages:
1: In mean.default(y) : argument is not numeric or logical: returning NA
2: In mean.default(y) : argument is not numeric or logical: returning NA
3: In Ops.factor(y, m.y) : '-' not meaningful for factors
Таким образом, это сообщение об ошибке, кажется, указывает, что у не должно быть фактором. Я не знаю, что идет не так, особенно потому, что если я запускаю функцию cvSGL, рассматривая y как числовой двоичный вектор, но я строю линейную модель, а не логит-модель (хотя линейная модель мне не нужна), она на самом деле работает и не дает никакой ошибки.
Я имею в виду применить это:
> y <- as.matrix(Y)
> data <- list(x, y=y)
> sgl_small <- cvSGL(data, groups, type="linear")
Я хотел бы поблагодарить любую помощь, если кто-то еще пытался использовать этот пакет для построения модели логита.
1 ответ
Я нашел этот пример на странице помощи cvSGL
set.seed(1)
n = 50; p = 10;
X = matrix(rnorm(n * p), ncol = p, nrow = n)
beta = (-2:2)
y = sample(c(0,1),50, replace = T)
data = list(x = X, y = y)
cvFit = cvSGL(data, type = "logit")
Как видите, параметр "индекс" (вы называли его группами) в этой ситуации не использовался. Я не понимаю, как вы определили индекс в вашем случае. Я думаю, проблема в том, что вам нужно определить имя вашего списка элементов
data <- list(x = x, y=y)