?

Log in

Я понимаю, что для ответа на мой вопрос самым правильным было бы посмотреть исходники R, но прежде чем погрузиться в разбор чужого кода, я хотел бы задать вопрос здесь: а вдруг кто-нибудь из моих друзей уже знает ответ? Проблема возникла из-за того, что мне понадобилось заменить скрипт на R скриптом на Perl. Реализация функции, вычисляющей точный тест Фишера, есть в библиотеке Python и в библиотеке R, но её нет в Perl. Поэтому я написал следующий тестовый код на Perl (он приводится под катом).
Результаты работы этого теста совпадают с результатами работы стандартной функции из библиотеки Python, но расходятся с результатами, выдаваемыми стандартной функцией из R.
Тестовый вывод приведенной под катом программы:

A = |30 60|
    |10 70|
Fisher exact test, Perl
P two-sided =         0.00187
Odds ratio  =         3.500
Confidence Interval:  1.581...7.746
P one-sided less =    0.99972
P one sided greater = 0.00109
P hypergeom =         0.00081


Для сравнения привожу тестовый вывод с теми же данными результатов работы стандартной библиотечной функции Python stats.fisher_exact:

Python's library function stats.fisher_exact
P two-sided =         0.00187
Odds ratio  =         3.500
P one-sided less =    0.99972
P one-sided greater = 0.00109


Однако результаты работы функции fisher.test из библиотеки R несколько отличаются от реализации на Perl, выполненной в соответствии с описанием в учебниках, и от реализации в статистической библиотеке Python. Отличающиеся значения выделены красным цветом:

R: Fisher's Exact Test for Count Data
P two-sided =         0.001871
Odds ratio  =         3.475
Confidence Interval:  1.503...8.655
P one-sided less =    0.99972
P one-sided greater = 0.00109


В документации R написано, что при расчете отношения шансов и доверительного интервала используется дополнительная «подгонка» результатов с использованием метода наилучшего соответствия. Есть ещё вот такая статья по расчету отношения шансов: http://www.people.fas.harvard.edu/~mparzen/published/parzen17.pdf, но в R всё равно используется что-то другое. Может ли кто-нибудь вкратце описать алгоритм работы функции R или всё же придётся лезть в исходники?

Upd.: Вкратце: мне нужно понять, как «руками» получить такое же отношение шансов (odds ratio), которое возвращает функция R, потому что сами вероятности я считаю правильно.

Реализация алгоритма точного теста Фишера на PerlCollapse )

Озеро Гарда: Дезенцано, Сирмионе, Пескьера

Предыдущие части рассказок об Италии были здесь (часть 4), здесь (часть 3), здесь (часть 2) и здесь (часть 1).

 

Там, наверху, в Италии прекрасной,
У гор, замкнувших Манью рубежом
Вблизи Тиралли, спит Бенако ясный.

Ключи, которых сотни мы начтем
Между Валькамбникой и Гардой, склоны
Пеннинских Альп омыв, стихают в нем.

Там место есть, где пастыри Вероны,
И Брешьи, и Тридента, путь свершив,
Благословить могли бы люд крещеный.

— Данте Алигьери. Божественная комедия. Ад. Песнь двадцатая.

Карта

Бенако, упоминаемое Данте, это латинское название озера Гарда — Benacus. Правила итальянского языка требуют ставить ударение в этом слове на втором слоге, в то время как местные жители, особенно со стороны Вероны, произносят название Бенако с ударением на первом слоге. Кстати, название города Бергамо мы тоже произносим неверно. Ударение в этом слове также падает на первый слог, на этот раз уже без всяких исключений.

Озеро Гарда располагается в северной части Италии, глубоко вдаваясь в Альпы своей северной частью и является крупнейшим итальянским озером. Одной из его характерных особенностей являются сейши — стоячие волны с очень большим периодом, возникающие при быстром изменении атмосферного давления и приводящие к резкому повышению уровня воды в озере на 30–50 см. Это явление часто происходит при совершенно тихой погоде, когда ничто не предвещает катаклизма. Повышение воды начинается внезапно, а его продолжительность может варьироваться от нескольких минут до нескольких часов.

До 225 года до нашей эры территорию вокруг озера Гарда контролировало племя Кеноманов; историки относят их к восточным галлам. В 225 году до н. э. Кеноманы, объединившись с венетами, заключили союз с Римской республикой для отражения вторжения германских племён. Однако латинизация этой территории началась только в первом веке до нашей эры, когда в 89 году до н. э. окружающим озеро городам по распоряжению римского консула Помпея Страбона был предоставлен статус римских городов. Последней статус римского города получила Брешия в 49 г. до н. э.

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

Проблема состояла в том, что в то время как наиболее удобным способом путешествия по Италии является железная дорога, в Сирмионе — казалось бы самом туристическом месте — нет железнодорожной станции. Поезд, следующий из Брешии в Верону, останавливается только в Дезенцано дель Гарда и в Пескьере дель Гарда.

Зайдя на сайт trenitalia.it, можно узнать, что поезда Regionale отправляются из Брешии в сторону Вероны каждый час, и проезд до станции Дезенцано дель Гарда стоит €3.30. Так же обстоит дело и с обратными поездами. Мы решили добираться до Сирмионе из Дезенцано, затем, после Сирмионе доехать до Пескьеры, где сесть на обратный поезд до Брешии. Оказалось, что точно так же раз в час между Дезенцано, Сирмионе и Пескьерой ходит автобус. На самом деле этот автобус ходит между Брешией и Вероной, но поскольку он идёт со всеми остановками, то есть очень долго, то пользоваться им имеет смысл лишь в том случае, когда надо добраться до одного из населенных пунктов на его маршруте, удалённых от железнодорожных станций. В нашем случае таким пунктом был город Сирмионе, но мы всё равно решили садиться в автобус не в Брешии, а в Дезенцано, потому что поезд из Брешии идёт до Дезенцано 15 минут, а автобус — почти час.


Дезенцано

_IMG_6211

Название города Дезенцано происходит от Read more...Collapse )

Брешия. Продолжение

 

Предыдущие части рассказок об Италии были здесь (часть 3), здесь (часть 2) и здесь (часть 1).

Я изменил форматирование записи, разместив сопроводительный текст не вперемежку с фотографиями, а сбоку, так чтобы сразу было понятно, к ка­­кой картинке относится какой комментарий. Что скажете? Если так удобнее, то и все последующие рассказки я оформлю таким же образом, ес­ли нет, вернусь к предыдущему, простому варианту разметки.

_IMG_6195Прибыв в Брешию поздно ве­че­ром, прямо как в песне: со­шли с са­молёта мы по лесенке на дру­гом краю земли, а там вста­ют, как счастья вестники, Аль­пы синие вдали, и тем же ве­че­ром, в подвале сводчатом вы­пив старого вина, побрели по ти­хим дворикам, по промокшим площадям...

На этой фотографии вечерняя пло­щадь Павла VI (Piazza Paolo VI), римского Папы, до ин­тро­ни­за­ции — Джованни Баттиста Эн­ри­ко Антонио Мария Монтини, ро­див­шегося в Брешии в 1897 году.

Ближе к нам новый собор — Duomo Nuovo, построенный меж­­ду 1604 и 1825 годами, а даль­ше — старый собор, Duomo Vecchio, ведущий свою историю с базилики Санта Ма­рия Мад­жо­ре VI века.

_P1030817А вот и те самые синие Альпы вдали.

Это вид на вечернюю Брешию. Аква­­рель... Шучу, фотография. Цве­та именно такие, ничего не до­­ба­влял и не корректировал.

Снимок сделан с горы, на ко­то­рой находится замок Брешии.

Узнать, что было дальшеCollapse )

Продолжение рассказок: Рассказка пятая. Озеро Гарда: Дезенцано, Сирмионе, Пескьера.

9 мая в обеих Америках, Африке, Европе и большей части Азии (за исключением районов Восточной Сибири и Дальнего Востока) можно будет наблюдать прохождение Меркурия по диску Солнца. В отличие от прохождений Венеры, прохождения Меркурия происходят относительно часто: 13-14 раз в столетие. Предыдущее прохождение было в 2006 году, следующее будет в 2019. Нынешнее прохождение начнётся около 14 часов МСК и закончится около половины десятого вечера.
Read more...Collapse )
Рабочая программа для моделирования эволюции тройной звездной системы с учетом общей теории относительности непрерывно улучшалась и модифицировалась в течение последних десяти лет. В результате ее код превратился в такую кашу, что дальнейшая его поддержка стала невозможной.
Пришлось заняться рефакторингом, а заодно и оптимизацией.
В итоге код сократился в полтора раза, а быстродействие выросло в два раза. Интересно, что основной прирост быстродействия удалось получить, заменив везде где только можно деление умножением. Например, простая замена выражения a/(b/c+d/e) выражением a*c*e/(b*e+c*d) дает выигрыш в скорости выполнения в три раза.

Upd.: оптимизация компилятора отключена по причинам, которые обсуждаются далее в комментариях.

Upd2.: впрочем, для случая замены выражения a/(b/c+d/e) выражением a*c*e/(b*e+c*d) включение или выключение оптимизации не играет роли.

Пишу популярную статью про гравитационные волны и рисую к ней наглядные картинки. Задался вопросом: как наиболее просто и понятно представить искривление пространства-времени (возможно, в ущерб строгости).

FallingAppleИз популярной литературы и «правильной» научной фантастики многие, возможно, помнят, что в гравитационном поле с пространством-временем происходят две вещи: время в гравитационном поле замедляется, а вертикальное расстояние сокращается. Чтобы наглядно представить себе этот процесс, возьмём прямоугольную декартову сетку координат, в которой по горизонтали отложено время, а по вертикали высота и начнём её искривлять. Сначала сократим расстояние, то есть сделаем масштаб по вертикали неравномерным. Сетка после этого всё еще будет прямоугольной. После этого останется учесть замедление времени — для этого нам придётся изогнуть сетку, так чтобы масштаб оси времени внизу отличался от масштаба времени наверху.

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

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

При этом картинка либо сожмётся в 10 миллионов раз по вертикальной оси, либо растянется в 10 миллионов раз по горизонтальной.

Вот такая идея. Насколько такое объяснение понятно? Приглашаю задавать глупые вопросы и давать умные советы.

Я дорос, наконец, до необходимости приобретения фотосумки или фоторюкзака, но у меня есть к этому предмету несколько специфических требований.
Начну с того, что я собираюсь в нём носить:
1. Тушка Canon 1100D.
2. Объективы: а) китовый Canon 18-55, б) Canon 55-250, в) Tokina 11-16, г) Юпитер 37А, д) Мир 1В.
3. Набор удлинительных колец.
4. Желательно микроштатив, на худой конец, струбцина или «паучок».
5. 8-дюймовый планшет
6. Телефон
7. Хотелось бы туда же определить деньги с документами, ключи от машины, мультиинструмент.
8. Размеры — небольшие, чтобы можно было проносить вторым дополнительным местом кабин-багажа во всякие изи-райан-балтик-джеты.

Желательно, чтобы эта сумка или рюкзак были удобны в плане хождения по людным туристическим местам, имели хотя бы минимальную степень защиты от карманников, но при этом позволяли быстро доставать/убирать камеру и менять объективы.

Не слишком ли много я хочу? Что посоветуете?

Tags:

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

Время работы Matlab — 1.2 c
Время работы Octave — 101.1 c

Посмотреть код скриптаCollapse )

Octave выполняет скрипт в сто раз медленнее, чем Matlab. В сто раз, Карл!

А вот это уже аргумент

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

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

Profile

Мефистофель
al_pas
Alexey V. Pasechnik
Website

Latest Month

October 2016
S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom
Powered by LiveJournal.com
Designed by yoksel