Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Модераторы: Connie, Модераторы форумов Диа-клуба

Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение answer42 » 09 май 2013, 21:35

Попытался разобраться в формулах и реализовать расчет, в целом получилось, но есть смущающая разница в расчетах, моих, DiaCalcJ 2.54.1 и Diabet2000. Мне кажется разница НЕ связана с округлением, которое зачем-то, судя по коду по ссылке, делает Diabet2000.

Пример: Белый хлеб, Вес=100, Белки=7,6, Жиры=0,9, Углеводы=46,7, ГИ=88.

Вот мои расчеты и результаты (жирным)
К1 = 1,1
К2 = 0,1
УГЛНАХЕ = 10

БелкиНорм = Белки #так как вес продукта 100, то нормированные значения равны исходному кол-ву
ЖирыНорм = Жиры
УглеводыНорм = Углеводы

F = УглеводыНорм/100*ГИ = 46,7/100*88 = 41,096
C1 = УглеводыНорм/100*(100-ГИ) = 46,7/100*(100-88) = 5,604
Калории = БелкиНорм*4,1 + ЖирыНорм*9,3 + УглеводыНорм*4,1 = 7,6*4,1 + 0,9*9,3 + 46,7*4,1 = 231
ХЕ = УглеводыНорм/УГЛНАХЕ = 46,7/10 = 4,67
Доза = БелкиНорм*4,1/100*К2 + ЖирыНорм*9,3/100*К2 + F/ХЕ*К1+С1/10*К1 = 7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1 = 5,17653
БыстраяДоза = F/ХЕ*К1 = 41,096/10*1,1 = 4,52056
МедленнаяДоза = БелкиНорм*4,1/100*К2 + ЖирыНорм*9,3/100*К2 + С1/10*К1 = 7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 5,604/10*1,1 = 0,65597

Результаты:

DiaCalcJ 2.54.1
БыстраяДоза = 4,521
МедленнаяДоза = 0,616+0,038 = 0,654 <- ниже показано 0,655, но это все равно чуть меньше чем в ручном расчете выше.
Калории = 225,3 <- вот тут я решительно не понимаю куда программа дела 5,7 калорий.

Diabet2000
БыстраяДоза = 4,51
МедленнаяДоза = 0,7 <- баг программы, несмотря на то, что выставлено 2 знака, показывается 1.

Предупреждая комментарий в стиле "это мелочи". Я могу показать накопление более серьезного расхождения с Diabet2000 в случае группы продуктов, просто это займет больше места. Поэтому хотелось бы понять может кто-то сходу знает, нет ли чего-то, что я забыл учесть в расчетах.
answer42

 
Сообщения: 11
Зарегистрирован: 10 фев 2013, 11:49

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 09 май 2013, 22:46

Программа Диабет2000 округляет дозы по обычным правилам, принятым в арифметике. Причем округляет до одного знака после запятой. При этом автора Диабет2000 никогда не интересовали и не интересуют дозы типа 4,52056 5,17653 0,65597 и т.д. ввиду их совершенной бессмысленности.

В походе к округлению возможны два варианта :
1.Считать дозы по каждому продукту в меню с максимальной точностью ( доть до 8-ми знаков после запятой :D ), затем складывать их и округлять конечный результат до заданной точности оператором round
2.Округлять дозы уже для каждого продукта до заданной точности и уже округленные складывать, получая суммарную дозу как сумму уже округленных доз
Если мне не изменяет память, в Диабет2000 применен первый метод округления.

Конечные результаты применение этих методов (каждый из которых, кстати, имеет полное право на жизнь и является лишь выражением вкуса программиста) могут в отдельных случаях (при определенных наборах продуктов в меню) отличаться. Но это отличие ( не такое уж и частое) лежит в пределах одного знака после запятой и им можно пренебречь. Автору Диабет2000 совершенно безразлично, насчитает ли ему программа дозу, к примеру, в 8.3 или 8.4 единицы инсулина :) Ну а в приведенных примерах конечный результат расчета с помощью ДиаКалка и Диабет2000 практически одинаков. И там и там БД и МД будет 4.5 и 0.7 соответсвенно. Не берусь судить за автора ДиаКалка, но автор Диабет2000 не является сторонником излишнего фанатизма в определении доз до несколько знаков после запятой ввиду бессмысленности этого мероприятия :wink: Хочу подчеркнуть : и Диабет2000 и ДиаКалк считают дозы по одним и тем же формулам. Разница лишь в подходе к округлению и степени точности округления результата, т.е. степени "фанатизма" :D
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Connie » 10 май 2013, 08:19

БыстраяДоза ... 4,52056
МедленнаяДоза ... 0,65597
...
... 4,521
... 0,655
...
... 4,51
... 0,7

Ну и? Дальше что? Вот я на помпе, на одной из самых современных. Как мне на ней ввести дозу инсулина с точностью до сотой? Не знаете? Ну вот когда узнаете, тогда и вернемся к этому вопросу :)
По поводу моей проги, прежде, чем сравнивать и анализировать, неплохо было бы глянуть исходный код.
Код: Выделить всё
public class Dose {
    public final static float PROT = 4.0f;
    public final static float FAT = 9.0f;
    public final static float CARB = 4.0f;
...
private void calcDoses(){
        float kWH = PROT * prod.getAllProt();
        float kFAT = FAT * prod.getAllFat();
        float kUG = CARB * prod.getAllCarb();
         
        Calories = kWH + kFAT +kUG;

        SlowDose = fact.getK2() * kWH/100f + fact.getK2() * kFAT/100f;
        //    (    WH Doze   )   (   Fat Doze     )
               
        //здесь 1 надо заменить на коэффициент позволяющий учитывать углеводы
        //по количеству
        CarbSlowDose = fact.getK1(Factors.DIRECT) / fact.getBE(Factors.DIRECT) *
                    ( prod.getAllCarb() * (100f - (float)prod.getGi()) / 100f );
        CarbFastDose = fact.getK1(Factors.DIRECT) / fact.getBE(Factors.DIRECT) *
                ( prod.getAllCarb() *  (float)prod.getGi() / 100f );
       
        NeedReCalc = false;
    }

То есть калорийность питательных веществ у меня в формуле отличается от того, с чем сравниваете Вы.
Из Брешии в Брешию DiaCalc
Аватара пользователя
Connie
Модератор сайта
Модератор сайта
 
Сообщения: 20020
Зарегистрирован: 27 июл 2006, 09:09
Откуда: Ульяновск
Возраст: 50

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 10 май 2013, 09:19

То есть калорийность питательных веществ у меня в формуле отличается от того, с чем сравниваете Вы.

И в этом тоже нет ничего удивительного :D Даже сами диабетологи и прочие диетологи не могут определиться с единым подходом в калорийности компонентов пищи. Кто-то считает, что калорийность одного грамма белков и углеводов - 3.8 ккал, а кто-то - 4.1. Кто-то принимает калорийность одного грамма жиров за 9.1 ккал, а кто-то чуть-чуть иначе :) Ну и что ? Да ровным счетом НИЧЕГО ! :D Анализ формулы расчета КД показывает, что эти отличия могут заинтересовать лишь абстрактных фанатиков от инсулинотерапии, обожающих расчет дозы с точностью до пятого знака после запятой, но не умеющих вводить такие дозы с такой же точностью :D Во всяком случае, подобные "погрешности" несравнимы с погрешностями определения количества углеводов ( ХЕ) ложками, кружками, штучками и пястками :D А любиелей похудеть на основе подсчетов калорийности пищи подобные различия вообще не должны интересовать, поскольку не принципиальны :P
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение answer42 » 10 май 2013, 13:05

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

Juris писал(а):Если мне не изменяет память, в Диабет2000 применен первый метод округления.

Судя по формулам приведенным здесь, это вроде бы не так.

Data2.Recordset.Fields("D") = Round((Data2.Recordset.Fields("WH2") * 4.1 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("FAT2") * 9.3 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("F") / Text36 * Text4), 1) + Round((Data2.Recordset.Fields("C1") / Text36 * Text4), 1)

Компоненты сначала округляются, а потом складываются.

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

Из примера выше:
Доза = БелкиНорм*4,1/100*К2 + ЖирыНорм*9,3/100*К2 + F/ХЕ*К1+С1/10*К1 = 7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1 = 5,17653

с округлением (как в коде)
Доза = round(7,6*4,1/100*0,1;1) + round(0,9*9,3/100*0,1;1) + round(41,096/10*1,1;1) + round(5,604/10*1,1;1) = 5,1

Диабет2000 выдает:
КД = 5,2

Разница уже не в сотые, а в десятую.

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

PS: В принципе все недоразумения снимаются, если признать что код здесь не верно прописывает использует округления.
Доза = ROUND(7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1;1) = 5,2
answer42

 
Сообщения: 11
Зарегистрирован: 10 фев 2013, 11:49

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 10 май 2013, 14:35

В принципе все недоразумения снимаются, если признать что код здесь не верно прописывает использует округления

Из примера выше: Доза = 5,17653

Диабет2000 выдает: КД = 5,2

Я не знаю, какие признания мне надо сделать, чтобы убедить людей в том, что 5.2 это есть ничто иное, как округленное до одного знака после запятой число 5,17653 :не знаю И я не знаю, как убедить людей в том, что различия в определении дозы во втором знаке после запятой не имеют никакого практического значения :не знаю
:D
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.

За это сообщение автора Juris поблагодарил:
KRONa (10 май 2013, 20:38)
Рейтинг: 1.08%
 
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Марьванна » 10 май 2013, 16:51

answer42,
Ну, про калорийность могу вам сразу сказать, что точность +- 100 калорий не критична. Главное, чтобы суточная потребляемая калорийность была меньше расходуемой. А от величины этой разницы будет зависеть только скорость снижения веса.
Хочу все знать!
Аватара пользователя
Марьванна

 
Сообщения: 7518
Зарегистрирован: 30 апр 2005, 23:34
Откуда: Израиль
Возраст: 75

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение answer42 » 10 май 2013, 22:39

Juris, я наверное плохо объяснил, попробую еще раз.

У вас написано:
Data2.Recordset.Fields("D") = Round((Data2.Recordset.Fields("WH2") * 4.1 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("FAT2") * 9.3 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("F") / Text36 * Text4), 1) + Round((Data2.Recordset.Fields("C1") / Text36 * Text4), 1)


Если считать как написано:
Доза = round(7,6*4,1/100*0,1;1) + round(0,9*9,3/100*0,1;1) + round(41,096/10*1,1;1) + round(5,604/10*1,1;1) = 5,1

А должно быть:
Доза = round(7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1;1) = 5,2

Вот и всё, баг в документации.

Я же выше написал, что хочу понять как цифры получаются, то что сотая - не важна, я согласен и про калории тоже, не стоит повторять. Просто последствия округления имеют обыкновение накапливаться.
answer42

 
Сообщения: 11
Зарегистрирован: 10 фев 2013, 11:49

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 10 май 2013, 23:15

А должно быть:
Доза = round(7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1;1) = 5,2

Ну если уж на то пошло, то правильно не так, а вот так :
Доза = round((7,6*4,1/100*0,1 + 0,9*9,3/100*0,1 + 41,096/10*1,1 + 5,604/10*1,1);1) = 5,2

Но само понятие "должно" здесь неуместно, поскольку, как я уже сказал выше, эти строки программного кода в Вашем посте олицетворяют лишь разные подходы к выполнению операции округления. Подходы, каждый из которых имеет право на существование. В первом случае округляются и складываются промежуточные результаты, а во втором - округляется конечный результат точного сложения. И тот и другой метод имеет свои нюансы и даже свои мелочные недостатки. Основной недостаток обоих методов в том, что находятся пытливые умы и в некоторых случаях ( в некоторых комбинациях продуктов и их весов) находят мизерные и ничего не значащие расхождения :D Кстати, эти "ошибки" не накапливаются. Во-первых, потому что не являются ошибками. Во-вторых, потому что носят случайный а не системный характер. В-третьих, потому что эти расхождения появляются далеко не всегда. И в-пятых, они появляются лишь в одном конкретном в меню продуктов, а не накапливаются от меню к меню.
Честно говоря, я не помню точно, какой подход применен в Диабет2000, поскольку это было 13 лет назад и лезть сейчас в листинг мне просто лень. Кстати, увиденный "баг в документации", это просто пример программного кода. Малюсенький-малюсенький и абстрактный. Он приведен не в качестве пособия по изучению "кишок" программы, а в качестве примера подхода к реализации задачи на конкретном языке программирования :| Чтобы посмотреть как оно есть на самом деле, надо посмотреть весь проект :|
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение answer42 » 11 май 2013, 00:40

Честно говоря, по некоторым пунктам не убедили, но благодарен за то что ответили, ситуацию с этим расчетом я для себя прояснил.

Juris писал(а):Чтобы посмотреть как оно есть на самом деле, надо посмотреть весь проект


Может тогда выложите код, тогда бы у меня возникло меньше вопросов, вот тут я спрашивал про код и отправили меня именно в этот листинг.
answer42

 
Сообщения: 11
Зарегистрирован: 10 фев 2013, 11:49

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 11 май 2013, 01:00

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

В объектно-ориентированном языке программирования листинг программного кода сам по себе мало чего даст для понимания сути. Нужен весь проект с формами, контролами и т.д. и т.п. Если есть желание, могу выслать :) Напишите мне в ЛС Ваше "мыло" и я вышлю. Хотя, стоит ли копаться в старом языке Visual Basic, если есть более новые ? :думаю Хотя, с другой стороны, принципы в новых языках примерно такие же. Может отличаться синтаксис языка, но не его суть. Поэтому и суть Диабет2000 в разном языковом исполнении не меняется. Появляются какие-то "рюшечки" и "фичечки", но не более того :P
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение brom » 28 июн 2014, 01:23

Здравствуйте господа форумчане!
Я тоже сталнулся с данной проблемой при попытке создания универсального инструмента для расчета доз "для всех" операционных сред, и остановился на Exel. Остается выяснить: должны ли быть равны компенсационные дозы при расчете "по скорости", и "без ГИ" в "Диабет2000" (имеется в виду их сумма "КД")?

[ Пост написан с помощью Android ] Изображение
brom

 
Сообщения: 5
Зарегистрирован: 17 июн 2014, 19:01

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 28 июн 2014, 16:41

Остается выяснить: должны ли быть равны компенсационные дозы при расчете "по скорости", и "без ГИ" в "Диабет2000" (имеется в виду их сумма "КД")?

В вариантах "по скорости" и "без ГИ" общая конечная КД будет одинаковая, но распределение дозы на БД и МД будет разное. Это связано с тем, что в обоих вариантах компенсации подлежат все без исключения углеводы. Просто в варианте "по скорости" они разделяются по ГИ, формируя БД и МД, а в варианте "без ГИ" принято считать, что все углеводы быстрые и гликемическим индексом заморачиваться не стоит. Т.е. БД будет равна КД. Такой вариант вполне мог существовать в эпоху простых коротких инсулинов, но при повсеместном использовании УК инсулинов он может быть даже опасен :подумай
Что касается варианта "по количеству", то общая КД будет меньше, чем в предыдущих вариантах. Это связано с тем, что не все углеводы подлежат компенсации. В этом режиме считается, что компенсацией углеводов с низким ГИ можно пренебречь. Какой режим выбрать ? Ну это уже дело вкуса :) Лично я использую только режим "по скорости" хотя на заре своей "диабетологии" баловался вариантом "без ГИ" :спасибо:
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.

За это сообщение автора Juris поблагодарил:
brom (28 июн 2014, 20:21)
Рейтинг: 1.08%
 
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение brom » 29 июн 2014, 14:02

Огромное спасибо уважаемому Juris'у за информационную поддержку!!! *YAHOO* Теперь у меня, надеюсь и не только, есть черновой вариант "Диабет2000" "под Exel", который выкладываю для общего пользования и обсуждения, с целью дальнейше доработки и совершенствования.

Мой взгляд:

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

Ограничения:

* Расположение полей расчетов, баз данных, графиков, и т. д. должно "дружить" с размерами экранов мобильных устройств.
* Не нашел возможности дорабатывать Exel (расставлять формулы, цеплять графики...) под андройдом.

Работа с файлом:

* Принцип работы схож с работой онлайновского калькулятора на сайте программы "Диабет2000";
-копируем продукты из баз данных в верхнюю таблицу "листа расчетов", проставляем веса и коэффициенты (зеленые поля), и получаем компенсационные дозы в красных полях.
* Количество знаков после запятой можно менять в свойствах соответствующих ячеек столбцов B; C; D.
* !!! При копировании баз данных из сторонних источников приходится расставлять числовые значения вручную, проверяя свойства этих ячеек, и задавая числовой формат с требуемым количеством знаков после запятой.
* Разделителем целого числа в винде является запятая, а в андройде точка (сверится можно с разделителем в базах данных).
http://files.mail.ru/BB2ED211A44D4ADDA68A0D04C27EF4AC
brom

 
Сообщения: 5
Зарегистрирован: 17 июн 2014, 19:01

Re: Расчёт дозы вручную и сравнение с Diabet2000 и DiaCalc

Сообщение Juris » 29 июн 2014, 14:54

Огромное спасибо уважаемому Juris'у за информационную поддержку!!! *YAHOO* Теперь у меня, надеюсь и не только, есть черновой вариант "Диабет2000" "под Exel", который выкладываю для общего пользования и обсуждения, с целью дальнейше доработки и совершенствования.

Вообще-то, именно экселовский вариант программы стал когда-то прообразом Диабет2000 :wink: Как сейчас помню: откачали меня в очередной раз и молодая обалденно красивая врачиха говорит: "не будешь точно считать дозы, дядя, долго не протянешь" :плачу Я (любуясь ею) : "А как !?" :shock: Она (снисходительно, но дружелюбно глядя на меня): "Учись" :| Прямо там, в эндокринологическом отделении рижской больницы им.Страдыня обложился первыми книжками по всей этой "диабетологии" и попросил друзей принести мне ноутбук ... Так родился прообраз Диабет2000. Потом был вариант с макросами VBA for Excel. Ну а потом уж Диабет2000 :спасибо:
Екселовская программа вполне может стать надежным помощником, а широкие возможности Excel могут удовлетворить любые вкусы, как по расчету доз, так и по различным дневникам. Кстати, онлайновский калькулятор на сайте, это тоже Excel, только доработанный под Сеть. Но у экселовской программы есть один недостаток - уж слишком она индивидуальная и нежная. Ведь попади она в чужие и неопытные руки, не знакомые с Excel, и нежным формульным связям между ячейками быстро придет конец :плачу
Да и зачем возвращаться к уже давно пройденному этапу, имея уже достаточно продвинутые инструменты хоть под Windows, хоть под Android ? :не знаю

Кстати :
Разделителем целого числа в винде является запятая

это не совсем так. Выбор между запятой и точкой в качестве разделителя между целой и дробной частью числе можно сделать в панели управления Windows ( языки и стандарты )
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73
След.

Вернуться в Программа Диабет2000

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron