Как фильтровать гены в матрице на основе квантильной отсечки?

Это матрица с некоторыми примерными данными:

                  S1        S2       S3
ARHGEF10L       11.1818   11.0186  11.243
HIF3A            5.2482   5.3847   4.0013
RNF17            4.1956      0        0
RNF10            11.504   11.669.  12.0791
RNF11            9.5995   11.398    9.8248
RNF13            9.6257  10.8249    10.5608
GTF2IP1         11.8053  11.5487    12.1228
REM1             5.6835   3.5408    3.5582
MTVR2               0     1.4714      0
RTN4RL2          8.7486   7.9144    7.9795
C16orf13        11.8009   9.7438    8.9612
C16orf11            0        0         0
FGFR1OP2          7.679   8.7514    8.2857
TSKS             2.3036    2.8491   0.4699

У меня есть матрица «h» с 10 000 генов в виде имен строк и 100 образцов в виде столбцов. Мне нужно выбрать 20% наиболее изменчивых генов для кластеризации. Но я не уверен в том, что я дал правильно или нет.

Итак, для этой фильтрации я использовал пакет Genefilter R.

varFilter(h, var.func=IQR, var.cutoff=0.8, filterByQuantile=TRUE)

Как вы думаете, правильна ли команда, которую я дал, чтобы получить верхние 20% высоковариабельных генов? И может ли кто-нибудь сказать мне, как этот метод работает статистически?


person beginner    schedule 13.07.2017    source источник
comment
Я бы сделал это, преобразовав ваш matrix в data.frame. Это вариант для вас, или вы хотели бы остаться в рамках пакета bioconductor? Что касается базовой статистики, я думаю, что это статистика для Cross Validated (stats.stackexchange.com).   -  person JanLauGe    schedule 13.07.2017
comment
В порядке. Должен ли я удалить этот вопрос здесь и опубликовать с перекрестной проверкой или просто опубликовать эту ссылку с перекрестной проверкой?   -  person beginner    schedule 13.07.2017
comment
Я думаю, что вопрос здесь в порядке, но если вы хотите получить подробный ответ на последнюю часть (может ли кто-нибудь рассказать мне, как этот метод работает статистически?), я бы разместил отдельный вопрос на Cross Validated. для этого.   -  person JanLauGe    schedule 13.07.2017
comment
В порядке. И вы считаете это правильным? за избрание лучших 20% генов? vars ‹- применить(h, 1, sd); h[vars › квантиль(vars, 0.8), ]   -  person beginner    schedule 13.07.2017
comment
Да, я думаю, что ответ @Jarko Dubbeldam выглядит великолепно и попадает в самую точку   -  person JanLauGe    schedule 13.07.2017


Ответы (1)


Я сам не использовал этот пакет, но в файле справки используемой вами функции есть следующее замечание:

IQR является разумным выбором фильтра дисперсии, когда набор данных разделен на две примерно равные и относительно однородные фенотипические группы. Если в вашем наборе данных есть важные группы, составляющие менее 25 % от общего размера выборки, или если вас интересуют необычные шаблоны на индивидуальном уровне, IQR может оказаться недостаточно чувствительным для ваших нужд. В таких случаях вам следует рассмотреть возможность использования менее надежных и более чувствительных мер дисперсии (самой простой из них будет sd).

Поскольку ваши данные состоят из множества небольших групп, может быть разумно последовать этому совету и изменить var.func на var.func = sd.

sd вычисляет стандартное отклонение, что должно быть легко понять.

Однако эта функция ожидает свои данные в виде объекта expressionSet. Сообщение об ошибке, которое вы получили (Error in (function (classes, fdef, mtable) : unable to find an inherited method for function 'exprs' for signature '"matrix"'), подразумевает, что у вас нет этого, а вместо этого есть обычная матрица.

Я не знаю, как создать expressionSet, но я думаю, что это слишком сложно. Поэтому я бы предложил использовать код, который вы разместили в комментариях:

vars <- apply(h, 1, sd)
h[vars > quantile(vars, 0.8), ] 
person JAD    schedule 13.07.2017
comment
Не могли бы вы рассказать мне, как применить это, чтобы получить лучшие 20% генов? - person beginner; 13.07.2017
comment
varFilter(h, var.func=sd, var.cutoff=0.8, filterByQuantile=TRUE) должно работать. - person JAD; 13.07.2017
comment
В порядке. но думаете ли вы, что при отсечке 0,8 выбранные гены составляют 20% лучших? Я знаю, что он дает 20% генов из всех доступных генов, но не уверен, входят ли они в топ-20% или нет. - person beginner; 13.07.2017
comment
Как вы думаете, это дает лучшие 20%? Думаю, на этот раз я прав. vars ‹- применить(h, 1, sd); h[vars › квантиль(vars, 0.8), ] - person beginner; 13.07.2017
comment
Нет, то, что вы дали, не работает и выдает ошибку - person beginner; 13.07.2017
comment
Ошибка в (функция (классы, fdef, mtable): не удалось найти унаследованный метод для функции «exprs» для сигнатуры «matrix» - person beginner; 13.07.2017
comment
Давайте продолжим обсуждение в чате. - person beginner; 13.07.2017