Статистика и R в науке и аналитике
4.11K subscribers
39 photos
80 links
Всем привет!
Подробнее о канале со списком самого интересного: https://t.iss.one/stats_for_science/108
Чат канала: https://t.iss.one/chat_stats_for_science
По всем вопросам - @lena_astr
Download Telegram
Ошибки первого и второго рода — мнемоническое правило

На сайте machinelearning.cards нашла любопытную картинку, как запомнить, что является ошибкой первого и второго рода. Несколько лет назад я путала, где какая ошибка, и приходилось каждый раз гуглить и проверять.

Ошибка I рода — false positive, то есть неверное отклонение нулевой гипотезы (например, нашли значимые различия там, где их на самом деле нет).
Ошибка II рода — false negative, не отклонили нулевую гипотезу, хотя должны (нулевая гипотеза неверна).

Эта картинка нравится графическим отражением ошибок I и II рода в буквах P и N, и на мой взгляд, сделано довольно изящно.
В комментарии скину другие способы запомнить, где какая ошибка.

Помним, что нулевая гипотеза может быть не только об отсутствии различий, но и об отсутствии связи между переменными, зависит от статистического теста.

Пишите, не путаете ли вы ошибки I и II рода, как удалось запомнить и какой из предложенных способов понравился больше.

#stats
👍44🔥5
Как неправильно хранить данные в таблицах?

Недели три назад в интернете форсился мем про хранение "параметров" людей в Excel-таблицах (примеры в комментариях). Я не поддерживаю такой утилитарный подход к окружающим, но оставляя за скобками морально-этические аспекты, хотелось бы рассказать, почему с технической стороны это было организовано неверно.
Основная претензия в том, что переменные (параметры) записаны в строках, а наблюдения (в данном случае люди) в столбцах. Это влечет за собой массу неудобств.

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

Во-вторых, для анализа подобных таблиц средствами языков программирования критично иметь одинаковый тип данных в столбцах. К примеру, в R это вытекает из структуры датафрейма (поскольку столбцы – это вектора, в которых требуется одинаковый тип данных).
Для переменных (признаков, параметров) обычно гарантируется одинаковый тип данных, в то время как для наблюдений – вовсе нет. Следовательно, в R при загрузке такой таблицы, все столбцы приведутся к наиболее общему типу – скорее всего строковому, что также усложнит или сделает невозможным анализ.

В-третьих, не в контексте конкретно таких таблиц, можно отметить, что в Excel-таблицах формата .xlsx максимальное количество столбцов: 16384 (2^14), в то время как строк: 1048576 (2^20). Следовательно, при заполнении наблюдений по столбцам, место закончится гораздо раньше.
В качестве иллюстрации я хотела привести пример, как в 2020 году британские медики заполняли новые случаи Covid-19 в эксель таблицу по столбцам, в результате чего новые случаи ковид просто не влезли! Однако я почитала еще, и оказалось, что проблема была немного другая: данные хранили в строках (ура!), но вместо .xlsx использовали устаревший формат .xls, который поддерживает только 65536 (2^16) строк. Похоже, что медицинские центры присылали данные в формате .csv, где нет ограничения на количество строк, в то время как министерство здравоохранения (Public Health England) открывало их в .xls формате, и все строки после 65536 для них исчезали. Таким образом потерялось около 16 тысяч положительных результатов ковид-тестов (а сколько всего было потерянных строк, не сообщается).

Вообще хранение большого количества строк в Excel в целом вызывает сомнение, но это отдельная тема, пока что отмечу, как у генетиков некоторые названия генов (MARCH1, SEPT2) превращались в даты (например описано здесь).

UPD: в комментариях дополнили про недостатки экселя:
- Превращение чисел в даты, что сильно раздражает и с этим сталкиваются не только генетики
- Привязка к региональным разделителям (по умолчанию запятая как десятичный разделитель, что приходится менять)
- Отсутствие стандартного обозначения пропущенных значений

Итак, использовать эксель для анализа и хранения данных возможно не лучшая затея, однако если вы все же это делаете, то храните наблюдения в строках, а переменные в столбцах, это придумано не случайно!

#stat_humor #data #excel
👍2316🔥5😁4🤔1
Подборка материалов по статистике: обновление

Я давно составляла и размещала на канале рекомендуемые источники по статистике, однако кое-что устарело, плюс нашла еще классные материалы, так что решила обновить.

Книги
1) Статистика и котики из старой подборки пусть остаются, книга критикуется где-то за излишние упрощения, но для старта все еще неплохо.

2) Медико-биологическая статистика Гланца пусть тоже остается, хотя я сама недолюбливаю эту книгу, по крайней мере перевод на русский язык. В нем много небольших неточностей, например достоверность вместо статистической значимости, плюс переведено только старое издание, в котором нет упоминаний поправок на множественное тестирование FDR. Однако во многих чатах его советуют, поэтому оставляю в подборке.

3) Статистика для всех (Statistics in a nutshell) Сары Бослаф неплохая книга, однако в переводе большинство терминов насильно переведены на русский (иногда довольно неудачно), и плохо, что не дано исходного термина на английском, поскольку гуглить придется все равно так. Читать рекомендую самое свежее издание, благо найти в интернете легко.

4) Анализ данных и статистика в R Ивана Позднякова, что хорошо, автор постоянно обновляет часть по R (особенно по tidyverse) и дополняет часть по статистике, например многомерные методы. Материалы вплоть до обобщенной линейной модели доступны, написано хорошо, в общем рекомендую.

5) Рандомизация и бутстреп: статистический анализ в биологии и экологии с использованием R. В.К. Шитиков, Г.С. Розенберг. Остаются с предыдущей подборки.

Курсы

У меня в старой подборке есть однозначная рекомендация курсов Анатолия Карпова по статистике, однако после длительных дискуссий на тему качества этих курсов, я пересмотрела первую часть (Основы статистики).
Соглашусь, что действительно много неточностей как мелких, так и иногда довольно существенных в этом курсе. Следовательно, сейчас я не могу рекомендовать его, поскольку вышло много бесплатных и более качественных материалов (однако для 2013го года это был хороший продукт, так как русскоязычных курсов по статистике практически не было). Возможно, я сделаю более подробный разбор неточностей, которые я собрала, но пока не классифицировала и не оформила в пост.

Следовательно, рекомендую:
1) Курсы Марины Варфоломеевой: Линейные модели, дисперсионный и регрессионный анализ с использованием R, с еще несколькими курсами можно ознакомиться здесь. Наткнулась на материалы практически случайно, увидела что в других чатах тоже рекомендуют, сама кое-какие идеи оттуда брала для своих лекций (конечно с ссылкой на источник). Очень качественно и подробно разобрано практически все, с чем можно столкнуться в статистике, супер круто, что такие материалы есть в открытом доступе.

2) Курс Data Analysis with R Specialization на курсере, я сама не проходила, но много где советовали, программа очень солидная.

3) Платные курсы от Института биоинформатики и бластима. Ссылки кидать не буду, но они легко гуглятся, если кто-то не найдет, пишите в личку или в комменты. На бластиме я преподавала, как многие тут уже знают, могу ручаться за качество лекций и поддержки ассистентов. Курсы или точнее программы повышения квалификации от института биоинформатики тоже однозначно рекомендую, много общалась с людьми оттуда, делают очень качественный продукт.

Ютуб-каналы

1) StatQuest - отличный канал с короткими, но очень четкими разборами конкретных тем по статистике. У автора забавный стиль изложения, с приколами и всякими фразочками, сам он биоинформатик (а по первому образованию музыкант).
2) TileStats - пожалуй еще лучше чем первый канал (хоть и малоизвестный). Тоже формат коротких видео, где наглядно показывается применение формул, как это выглядит на графике и что означает. Абсолютно незаменим для подготовки собственных лекций, очень удачные идеи по визуализации сложных концептов. Стиль изложения более строгий, без забавных фразочек, но все равно максимально понятно.

Если что-то забыла из хороших материалов, пишите комментарии, буду стараться держать подборку лучших книг и курсов всегда обновленной!

#recommendation
👍5318🔥3
Пятничный мем.
Еще вариант: tidyverse/data.table

Идея мема взята у Хэдли Викхама

#R #tidyverse #stat_fun
28🔥7😁6🤯1
ПоздRавление от подписчика
У админа канала вчера был день рождения! А еще завтра (а у кого-то уже сегодня) день знаний, поэтому мы поздравляем админа и вас таким тортиком, сделанным в R, а заодно ещё раз исследуем базовую графику!
Вы можете тоже сделать такой тортик для себя и друзей:

install.packages('DescTools')
library('DescTools')
candle = function(pos)
{
x=pos[1]
y=pos[2]
rect(x,y,x+.2,y+2,col="red")
polygon(c(x+.05,x-.1,x+.1,x+.3,x+.15,x+0.05), c(y+2,y+2.3,y+2.6,y+2.3,y+2,y+2),col="#EECF08")

}

plot(c(0,10), c(0,10),type="n", bty="n",xaxt="n",yaxt="n", main="Cake", xlab="",ylab="")
DrawEllipse(x = 5, y = 2,col="seagreen",radius.x=4.4,radius.y=1.7)
DrawEllipse(x = 5,y = 2,col="violet",radius.x=4,radius.y=1.4)
rect(1,2,9,5,col="violet",border="violet")
lines(c(1,1),c(2,5))
lines(c(9,9),c(2,5))
DrawEllipse(x = 5,y = 5,col="brown",radius.x=4,radius.y=1.4)

candle(c(2.5,4.5))
candle(c(3,5))
candle(c(4,4.5))
candle(c(5,5))
candle(c(6,4.5))
candle(c(7,5.2))

Источник кода: https://qiuyiwu.github.io/2019/01/29/Birthday/ (там можно увидеть, что некоторые функции в аре устаревают и приходится искать аналоги)

В комментариях получившийся торт)
🎉287👍2
Неявное приведение типов - иллюстрация

Пятничный мем! Сделала еще давно, но вспомнила только сейчас.

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

#stat_fun #R
😁39🔥197👍5
А каким оператором присваивания в R пользуетесь вы?
Anonymous Poll
66%
<-
12%
=
9%
И тем и другим
13%
Не использую R
Опубликовала первое видео на ютубе, посвященное истории языка R, и ответу на животрепещущий вопрос*, почему в сообществе принято использовать оператор <-, а не =. Планируется записать ~15 видео по R и примерно столько же по статистике, так что подписывайтесь, все будет опубликовано здесь.

По результатам опроса 66% подписчиков канала используют оператор <-, что в целом неудивительно, скорее меня озадачило использование обоих операторов одновременно (почему - смотрите в видео).

Комментарии, пожелания, замечания приветствуются здесь или на ютубе, список тем будет опубликован чуть позже.

*примерно раз в месяц в биоинформатических чатах появляется обсуждение, чем же <- лучше =

#R #youtube
👍40🔥1611
Результаты репетиторской программы по статистике

Около года назад я запустила репетиторство по R, статистике и биоинформатике (условия описаны здесь). Настало время подвести итоги - основные моменты оформила в карточках (кстати, как вам такой формат подачи информации?).

На мой взгляд, было очень интересно, в том числе для меня, поскольку у всех студентов были совершенно разные задачи, и нередко приходилось довольно много времени посвятить обдумыванию конкретной ситуации, чтобы адекватно проконсультировать.

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

Сейчас тоже возможно записаться на индивидуальные занятия, условия описаны в последней карточке, пишите в личные сообщения @lena_astr. После нового года скорее всего будет повышение цены, поэтому успевайте записаться сейчас!

#R #stats
35🔥9👍4
📈 Рекомендация курса "Статистика, R и анализ данных" от бластима

Всем привет! А я снова буду техническим ассистентом на курсе бластима по статистике, R и анализу данных, и если вы ждали знак, чтобы записаться на курс — то вот он. А еще по читкоду промокоду LENAASTRR вы получите 10% скидку! Также для студентов есть 30% скидка, а для аспирантов 10%.

Почему именно вам стоит записаться на курс?

📊 Вы хотите более системно разобраться в статистических тестах, в их ограничениях и правильной интерпретации.

🖥 Давно собирались автоматизировать анализ и визуализацию данных в R, делать это быстро и эффективно, не спотыкаться о синтаксис.

🧬 Хотите освоить биоинформатические методы, в частности обработку NGS данных.

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

На курсе будем разбирать язык R с самых основ, что подходит людям без опыта программирования, но также обсудим и продвинутые штуки, что будет полезно и интересно тем, кто уже изучал язык. Самое главное преимущество курса — системность в освоении нового, например, подробно будет разбираться тема функционального программирования в R и обработка данных с помощью tidyverse-подхода, что является лучшими практиками в области (как в науке, так и в индустрии).

Курс будет проходить 23 — 27 октября + 4, 5 и 11, 12 ноября очно в Москве и онлайн. Я буду помогать 4, 5 и 11, 12 ноября на части по статистике, буду рада увидеть в числе участников подписчиков канала!

Записывайтесь на курс на сайте: agency.blastim.ru/stat_r, не забудьте про промокод. Если есть вопросы по курсу, формату проведения или еще о чем-то, можете задавать их здесь в комментариях, постараюсь ответить на все.

#R #stat #blastim #реклама
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14🤩32🎉2👍1
История факторов в R

Сегодня разберем историю факторов в R, почему раньше при чтении таблиц аргумент stringsAsFactors по умолчанию был TRUE, и почему с версии R 4.0 это отменили, а также нужны ли факторы сейчас.

Моя история знакомства с факторами в R была такова: когда я только начинала осваивать R (это было в 2017 году), и использовала его для работы с табличками дифференциальной экспрессии генов, то мне сразу сказали, что при чтении таблицы надо использовать аргумент stringsAsFactors = FALSE, чтобы строки не превратились в факторы. Прозвучало это супер непонятно, но далее я обратила внимание, что если этого не делать, то после фильтрации таблицы в строковых переменных остаются какие-то уровни (levels), это было неудобно, поэтому я стала следить, чтобы всегда при чтении таблиц было указано stringsAsFactors = FALSE. И потом при работе уже с дисперсионным анализом поняла, зачем нужны были факторы, и как их использовать, но все равно они оставались чем-то загадочным, средним между строкой и числом, даже казались мне ближе к строке (но это не так, сейчас разберем почему).

Изначально R был создан и использовался в первую очередь для статистических задач, и поэтому превращение всех строк в факторы при чтении таблиц было оправданно, поскольку не числовая переменная в таблице скорее всего означала категории (пол, группа крови, наличие болезни и тп). Для дальнейшего статистического анализа, например, при создании моделей с помощью функций lm(), glm(), факторы были нужны для корректной работы этих функций.

Кроме этого, есть еще одна менее очевидная причина. Раньше хранение факторов занимало меньше места в памяти, чем хранение строк. Дело в том, что факторы во внутреннем представлении R – это integer, то есть целые числа, соответственно занимают около 4 байт памяти. При этом строки занимают больше памяти и при работе с категориальными переменными каждая строка таблицы занимала свое место в памяти (то есть если записано disease в 100 строках, то грубо говоря и памяти будет занято как место занимаемое строкой disease*100) [1].
Плюс сравнивать факторы было проще, чем строки, поскольку сравнение чисел происходит за фиксированное время, в то время как для сравнения строк необходимо было "проходить" каждую строку побайтно.


🖥 Все изменилось в обновлении R 2.6.0 в 2007 году, когда сделали хеширование CHARSXP, что означало, что теперь ВСЕ строки хешируются и хранятся в глобальном пуле строк, и теперь к строкам обращались по целочисленным указателям: не было нужды хранить каждую копию строки, достаточно было хранить только указатель.
Между прочим, это обновление было сделано благодаря проекту Bioconductor, потому что разработчикам приходилось работать с большими строками, например, с последовательностями нуклеиновых кислот и белков, и без хеширования строк работа со старым типом была максимально неэффективной.

После этого выигрыш в хранении и сравнении строк в виде факторов перестал быть существенным, тем не менее факторы все еще необходимы в lm, glm и других подобных функциях, а также для упорядочивания категорий на графике.

Иллюстрация объема памяти, занимаемого на хранение строк (пример взят из книги Advanced R):
banana <- "bananas bananas bananas"
obj_size(banana)
#> 136 B
obj_size(rep(banana, 100))
#> 928 B

Мы создали 100 копий строки, но при этом занимаемый объем увеличился всего в 6.8 раз!

При чтении таблиц средствами базового R аргумент stringsAsFactors был TRUE, и только в 2020 году с версии R 4.0 разработчики R это изменили на FALSE. Только в функциях из пакета readr строки не превращались в факторы по умолчанию. На мой взгляд, разработчики R довольно поздно изменили дефолтное поведение функций read.table и read.csv, но лучше уж поздно чем никогда, хотя я сейчас пользуюсь только readr-ом для загрузки таблиц (и fread, при необходимости).

Ссылки на источники:
1. https://simplystatistics.org/posts/2015-07-24-stringsasfactors-an-unauthorized-biography/
2. https://notstatschat.rbind.io/2015/07/25/stringsasfactors-sigh/
3. https://notstatschat.rbind.io/2022/03/31/stringsasfactors-do-you-feel-lucky/

#R #history #baseR
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41💯2
Рекомендация курса "Анализ данных RNA-seq" от Бластима

А я к вам с еще одной рекомендацией, на этот раз курса Бластим по анализу RNA-seq данных.

Исторически повелось и у Бластима, и у многих других школ, что NGS — это сборная солянка обо всем в области: и метагеномика, и филогенетика, и дифференциальная экспрессия, но мало кому реально все это нужно на практике в коротком промежутке времени. Поэтому рекомендую пойти на курс RNA-seq — это быстрее и дешевле.

Курс стартует уже через неделю, 25 октября, но еще не поздно записаться + у меня есть промокод на скидку 15%: LENAASTRRNA.

Мы составили очень крутую программу курса, я прочитаю лекции по анализу дифференциальной экспрессии генов и использованию пакета DESeq2, в том числе многофакторный анализ дифэкспрессии.

Преимущества курса:

- Удобный формат, занятия проходят онлайн раз в неделю вечером.
- Сочетание теории с практикой, возможность проанализировать собственные RNA-seq данные с сопровождением преподавателей, обратной связью и финальной презентацией результатов.
- В программе курса есть все необходимое, чтобы освоить стандартный пайплайн обработки RNA-seq данных, включая работу как с модельными, так и с немодельными организмами.
- Плюс введение в single-cell, для тех кто хочет вкатиться в эту область (но это скорее стартовые знания, дальше нужно будет углубляться самому).

Итак, записывайтесь на сайте, всех жду!

#реклама #blastim
👍15🔥42
Brian Moore про Властелин Колец в попытке найти, а кто действительно главный герой трилогии на основании сказанных слов, появлений на экране и взаимрдействий.

ps табло гики, советую обязательно подсмотреть, что все картинки героев – не картинки, а полигоны! Прям очень необычно.
17🔥6👍2
Очень классная визуализация в Tableau частоты встречаемости героев Властелина Колец. Мне лично интересно, какая частотность упоминания штанов Арагорна (спойлер: скорее всего 0, потому что похоже что во всем тексте упоминаний не было).

#data_vis
🔥9🎉5