[personal profile] progenes
Я предполагаю, что меня читают биологи и информатики. Поскольку я сейчас столкнулась с феерическими расчетами, от которых у меня волосы на загривке вздыбились, считаю, что будет неплохо, если я расскажу причастным где впредь быть предельно внимательным. Я, к сожалению, не могу дотянуться до того парня, который это посчитал, чтобы надавать ленейкой по рукам. Но должна сказать, что это сервис, претендующий на серьезный.

Больше чем месяц назад я получила результаты и, помнится, даже всхипнула от ужаса. Дело было вот как.

Перед биологом стоит задача - сравнить экспрессию генов в нескольких тканях. Для этого надо выделить РНК и каким-то из методов определить, с каких генов эта РНК считалась и в каком количестве. Методов есть несколько. От нозерна до микрочипов. Самый модный - это секвенирование 454. О нем и пойдет речь.

Я не буду вдаваться в подробности, что за ткани я анализирую, скажу только, что этой ткани столько, что невооруженным глазом не видно, нарубили лазером под микроскопом. Выделили РНК в количествах на пределе воображения и отправили на прочитку (секвенирование). Это приблизительно так, как сейчас читают геномы, только не ДНК, а РНК. Причем прочитка - это полноценный сервис, который включает все. На выходе, как я уже упоминала 300 гигов информации: сырые сиквенсы, сбивка в контиги, скаффолды и унигены, бласты, функциональная аннотация по геномной антологии, метаболитических путях, визуализация, статистическая обработка и дифференциальный анализ. Все растыкано по 2000 тыщам файлов. Задача биолога теперь все ОСМЫСЛИТЬ и интерпретировать и сделать выводы, как же отличается работа генов в разных тканях и почему.

Я сузила сначала задачу и из вороха файлов нашла исходник в экселе: сравнение генной экспрессии в двух (из 48ми) тканях. Теперь внимание и пристегнитесь. Результаты сравнения представлены в виде log2 значения соотношения экспрессии генов в ткани 1 vs. 2. Просто настолько, что можно понять и идиоту, верно? Значения колеблются от -15 до плюс 15 (это уже log2). Огого, сечете разницу в экспрессии? Всех генов несколько десятков тыщ.

В этом месте меня подвело банальное любопытство. Что ж это за ген такой, у которого разница в работе в двух близлежащих тканях 214? Роюсь в ворохе файлов и нахожу сырые результаты. И тут, друзья, у меня глаза на переносице и сбежались. Потому что я знаю, что это за сырые значения. А это всего навсего количественный подчет ШТУК КУСКОВ РНК, которые принадлежат одному гену. Держитесь теперь крепче, пример из жизни.

Ген Х. Логарифмированное значение соотношения экспрессии в тканях 1 vs. 2 равно 14,72. Сырые данные в студию. В ткани Nr.1 насчитали 0 (ноль) кусков, в ткани Nr.2 насчитали 27 кусков. Формула расчета log2(27:0). Что, съели касатики?!!! Говорите на ноль нельзя делить? Ну нельзя так нельзя (хотя в результатах стоит ноль). Я прикинула, как могли бы рассуждать те, кто уныло смотрит на ноль. Ноль надо заменить на число, отличное от нуля. Я начала тупо подставлять и проверять логарифмом, как у них 14,72 получилось. Оказалось, что 0 приравняли до 0,001. log2(27:0,001)=14,72

Если вы еще не ржете, посчитайте, какое значение log2 будет, если в ткани Nr.1 насчитали 0 (ноль) кусков, в ткани Nr.2 насчитали 2 (два) куска. То есть вы догадываетесь, куда можно засунуть эти 300 гигов и ограничиться одной таблицей в экселе, да?

Проблема в том, что редкий биолог интересуется сырыми данными, если сервис поставил уже готовое соотношение в красочных схемах и диаграммах. И редкий информатик интересуется особенностями того, что ему поручено посчитать. Для него это голые абстрактные числа, а для меня это штуки кусков РНК. Особенно печально, если биолог мало знает о проблемах и недостатках того метода, которым хочет что-то проверить. После таких ляпов у меня возникли подозрения к алгоритмам сбивки в контиги (которые я встречала в других случаях), к проблемам аннотации (с которой долбилась годами). Эта же проблема также касается и анализов всяких там аффиметриксов и прочих биочипов.

Вырасту большой и научусь программированию сама.

Date: 2011-04-21 07:34 am (UTC)
From: [identity profile] stoshagownozad.livejournal.com
мало что я поняла из математики процесса, но зато понятно, что иногда ученые, бывает, такими данными оперируют (если не сами их посчитали), что только ой. и оёёёёй.

"Вот так и рождаются нездоровые сенсации", как сказал персонаж братьев Стругацких, выгоняя на мороз наколдованного гигантского комара...

Date: 2011-04-21 07:36 am (UTC)
From: [identity profile] progenes.livejournal.com
Математика простая. В одной клетке сидит 27 кроликов. Другая клетка пустая. Вопрос - во сколько раз в одной клетке больше кроликов, чем в другой. Ответ: в 27 тыщ раз.

Date: 2011-04-21 07:38 am (UTC)
From: [identity profile] stoshagownozad.livejournal.com
всрацця й закопацця, как моя мама говорит:)))
сочувствую, на самом деле. этоже натуральная засада, такие считатели.

Date: 2011-04-21 07:46 am (UTC)
From: [identity profile] jamhed.livejournal.com
а во сколько раз больше-то?

Date: 2011-04-21 07:47 am (UTC)
From: [identity profile] stoshagownozad.livejournal.com
а там нельзя "во". там надо "на".

Date: 2011-04-21 07:50 am (UTC)
From: [identity profile] jamhed.livejournal.com
вопрос-то как задан? во сколько раз в одной клетке больше кроликов, чем в другой.

Date: 2011-04-23 06:57 pm (UTC)
From: [identity profile] tannenbaum.livejournal.com
В плюс бесконечность, если уж быть предельно точным :))
(deleted comment)

Date: 2011-04-24 10:48 am (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
Почему полкроля, а не 1/10 или 2/3?
(deleted comment)

Date: 2011-04-24 08:55 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
Короче, всё равно «среднее потолочное».
(deleted comment)

Date: 2011-04-24 11:48 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
0.5 — чтоб расстояние до обоих целых было одинаковым, это хорошо для аддитивных величин. А вот 5%, 10% etc порог достоверности действительно берётся с потолка.

Date: 2011-04-25 05:29 am (UTC)
From: [identity profile] jamhed.livejournal.com
я, если честно, не вижу разницы между пол-кроля и одной тысячной его-же.
From: [identity profile] lion-casserole.livejournal.com
.
У меня был однажды эксперимент о том, как по разному люди решают одну и ту же задачу. Постановка была такая, примерно:

Реализовать процедуру-переключатель, принимающую в качестве единственного параметра величину типа integer, и назначающую этому параметру
(1) значение (integer) 7, если получено значение пяти, (2) значение (integer) 5, если получено значение семь.

Вот некоторые решения (адатировано):


/* студент */
procedure switchValue ( var pInteger : integer ) ;
begin
if ( pInteger = 5 )
then pInteger := 7
else
if ( pInteger = 7 )
then pInteger := 5
else ;
end ;

/* ассистент */
procedure switchValue ( var pInteger : integer ) ;
begin
if ( pInteger = 5 )
then pInteger := 7
else ;
if ( pInteger = 7 )
then pInteger := 5
else ;
end ;

/* доцент */
procedure switchValue(var z:integer);begin if (z=5) then z:=7 else if(z=7)then z:=5 end;

/* программист */
procedure switchValue ( var pInteger : integer ) ;
begin
pInteger := 13 - pInteger
end ;

/* программист */
procedure switchValue ( var pInteger : integer ) ;
begin
case ( pInteger ) of
5, 7 : pInteger := 13 - pInteger
else
reportAnException ( 'switchValue', 001 )
end case ;
end ;
Edited Date: 2011-04-25 04:11 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
Во-первых, 5 + 7 = 12 != 13 :)

Во-вторых, как программеру мне таки было бы ближе

procedure switchValue ( var pInteger : integer ) ;
begin
case ( pInteger ) of
5 : pInteger := 7;
7 : pInteger := 5;
else
{* ничего не делаем, ибо не сказано что-либо делать *}
end case ;
end ;

Так код проще править.
From: [identity profile] anatoly borodin (from livejournal.com)
Короче, вариант доцента мне ближе, но некоторые компиляторы оптимизируют case лучше, чем вложенные if-ы.

Yep, 12 <> 13

Date: 2011-04-25 10:13 pm (UTC)
From: [identity profile] lion-casserole.livejournal.com
.
Да, этот case-вариант хорош и для чтения, и для сопровождения, и для компиляции, и для QC/QA.

А в том, давнем исследовании, без ошибок написали только студент и доцент. Второй программёр хотел "утереть нос" первому, и скопипейстил его ошибку.
From: [personal profile] no1u1w1w6c
а задача поставлена неполно, как её решать-то? вот ещё, так решают укушеные макроассемблером: return arg^2. но поведение функции на других аргументах не задано, увы — и потому совершенно любое её поведение на не-5 и не-7 будет корректным или некорректным по желанию автора ТЗ.
From: [identity profile] lion-casserole.livejournal.com
.
Thanks,

/* другими словами, здесь, в нотации Pascal, предложена вот такая реализация: */
procedure switchValue ( var pInteger : integer ) ;
begin
pInteger := pInteger xor 2 ;
end ;

Yep, я могу назвать по крайней мере двух уважаемых мною профессионалов, кто сделал бы в таком стиле, и это - без выпендрежа.

А постановщики, увы, не заботятся о полноте описания. Когда к ним приходишь с вопросами, сердятся, типа: "Это же элементарно, вы же программисты, неужели сами не можете догадаться, что тут нужно сделать?" И прожект-менеджеры хмурятся и переглядываются.
From: [personal profile] no1u1w1w6c
>и это — без выпендрежа
и правильно. потому что 12-x — это чревато переполнением при передаче страшных чисел. а переполнение — это в стандартном паскале, емнип, нештатная ситуация с абортами.

>А постановщики, увы, не заботятся о полноте описания
ну да. и их тоже понять можно — кому-то вещь очевидная, и описывать даже мысли не появляется. а кто-то и рад бы, да не может, писалка не оттуда выросла. потом получают чудо-юдо и удивляются.

с другой стороны — все мы хороши же. программер выкатит, а потом тоже удивляется: «какие тупые пользователи! ну как можно не понять, что галка 'использовать клингонский в исключительных ситуациях' обозначает 'на самом деле сначала использовать минбарский, а потом расстрелять'».

Profile

progenes: (Default)
progenes

March 2025

S M T W T F S
      1
2345678
9101112131415
1617 1819202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 6th, 2026 04:40 am
Powered by Dreamwidth Studios