У меня есть простая таблица, в которой я пытаюсь выяснить, связаны ли мои ко-вариации (гены) с больными раком. Поскольку существует много ко-вариаций (~ 800), я провожу логистическую регрессию с штрафом LASSO с glmnet()
и перекрестной проверкой с cv.glmnet()
. Первая часть работает нормально, без предупреждений. Именно на бите проверки я получаю эти сообщения:
Предупреждающие сообщения:
1: В lognet (x, is.sparse, ix, jx, y, weights,offset, alpha, nobs,:
один полиномиальный или биномиальный класс имеет менее 8 наблюдений; опасное основание
2: в логнете (x, is.sparse, ix, jx, y, веса, смещение,alpha, nobs,:
один полиномиальный или биномиальный класс имеет менее 8 наблюдений; опасное основание
3: опция сгруппирована = FALSE принудительно применяется в cv.glmnet, поскольку <3 наблюдения на каждый раз </p>
Это образец данных, которые я использую (только с 7 ко-вариациями):
> data
Tumor Probe_1 Probe_2 Probe_3 Probe_4 Probe_5 Probe_6 Probe_7
S_1 No -1.41509461 -3.92144111 -4.3319583 -4.894204000 -5.5379790 2.9031321 0.80587018
S_2 No -0.94584134 -2.77641045 -3.3560507 -2.211370963 -6.0006283 5.1775379 1.45389838
S_3 No -0.95188379 -3.47742475 -1.9058528 -3.019003727 -5.7203533 2.2121110 1.83080221
S_4 No -2.27462408 -3.83136845 -4.1285407 -1.691782991 -6.3683810 6.4500360 1.22882676
S_5 No -0.74983930 -2.51738976 -2.1747453 -2.279177452 -3.5778674 2.3518098 1.04400722
S_6 No -1.10189012 -3.12456412 -3.1800114 -2.567847449 -5.7474062 3.7589517 1.70868881
S_7 Yes 0.03970897 -1.98928788 -1.2119801 -0.686115233 1.0235521 0.3666321 -2.35612013
S_8 Yes 0.01597890 -1.20865821 -0.4579608 -1.192134064 1.4096178 2.4922013 0.40925359
S_9 Yes -0.27984931 -2.15706349 -2.4641827 0.047430187 1.6129360 0.5129123 -1.34833497
S_10 Yes 0.93021040 -1.97824406 -0.2918638 0.979103921 -2.5054538 -0.7654758 -2.48255982
S_11 Yes 0.83353713 -1.79506256 -2.0438707 0.460100440 0.9242979 -0.2319373 -1.51113570
S_12 Yes 0.18570649 0.05800963 0.2385482 0.433187887 -2.0097881 2.2284231 0.74761104
S_13 Yes 0.19232213 -0.95197653 -0.8496967 -0.105562938 1.0253468 0.6895510 -1.31659822
S_14 Yes 0.95731937 -1.53396032 -0.1456985 1.804472462 -3.3191177 0.2357909 -0.91231503
S_15 Yes 0.45860215 -1.36153814 -1.0998994 -0.003680416 2.0982345 -0.5042816 -1.07098039
S_16 No -0.02045748 -2.07952404 -1.5161549 1.095944357 -2.9224003 3.6426993 0.43034932
S_17 No 0.71109429 -1.19594432 -0.2472489 -0.333784895 0.7016542 0.1602559 -1.96375484
S_18 No 0.25009776 -0.98431835 -1.2113967 -0.062552222 -0.5772906 1.9909411 0.34956032
S_19 No 0.10396440 -1.43761294 -1.5490060 -0.900273908 -1.9889734 2.6280227 0.02848154
S_20 No -1.67179799 -0.69662635 0.3057564 0.497189699 1.8436791 -0.6753654 -1.74453932
S_21 No -0.33691459 -2.53752284 -2.7764968 -2.258180090 1.5861724 1.4335190 1.14224595
S_22 No -0.20888250 -3.32322098 -2.1782679 0.293379051 -5.8727867 2.3515395 1.89576377
S_23 No 0.48536983 -2.00023465 -0.8494739 -1.323411080 -6.1974792 0.2637433 -0.71707341
S_24 No 0.42733184 -2.23335363 -2.4388843 0.357150391 -2.8792254 0.4145872 -0.98182166
Столбец Tumor
уже установлен как фактор:
> data$Tumor
[1] No No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes No No No No No No No No No
Levels: No Yes
Подготовка данных и запуск функции glmnet()
:
b <- paste(colnames(data)[2:ncol(data)], collapse=" + ")
b <- as.formula(paste("~ ",b))
x <- model.matrix(b, data)
y <- data$Tumor
library("glmnet")
lasso_tumor <- glmnet(x, y, family="binomial", standardize=T, alpha=1, intercept = F)
Здесь нет ни сообщений об ошибках, ни предупреждений. Но если я сейчас запускаю cv.glmnet (), эти предупреждающие сообщения показываютup:
> cv.lasso_tumor <- cv.glmnet(x, y, family="binomial", standardize=T, alpha=1, nfolds=10, parallel=TRUE, intercept=F)
Warning messages:
1: In lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has fewer than 8 observations; dangerous ground
2: In lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has fewer than 8 observations; dangerous ground
3: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold
Я предполагаю, что Tumor
слишком мало (n = 9) для запуска проверки, и потому чтошаг случайным образом разбивает группы, группа Tumor
будет весьма ограничена. Имеет ли это хоть какой-то смысл? Я прочитал в этой теме , что это может быть проблемой, с которой можно справиться (комментарий @smci). Любая идея о том, как это можно сделать?
В качестве альтернативы, вы могли бы просто пропустить часть перекрестной проверки и перейти только с логитом с помощью лассо? В таком случае, что было бы разумным ограничением для лямбды, чтобы найти те гены (здесь называемые «пробами»), которые связаны с моей биномиальной классификацией?
Любая помощь очень ценится. Спасибо!