Sunteți pe pagina 1din 13

Diagnosticarea medicala-elemente fizico-tehnice

Laborator 2-3
Sisteme bazate pe cunostinte: Reguli de decizie
Sistemele bazate pe cunostinte (Knodlege based sistems) sau sistemele expert (SE) sunt programe de
aplicatie care iau decizii sau rezolva probleme intr-un anumit domeniu, pe baza unor cunostinte
prealabile si a unor regului analitice stabilite de experti umani.
Caracteristicile domeniilor de activitate care utilizeaza SE:
- cunostintele necesare luarii deciziilor sunt bine definite,
- expertii in domeniu gasesc solutii mai repede decat nespecialistii (utilizatorii SE),
- luarea rapida a unei decizii corecte justifica efortul de a creea un sistem capabil sa
automatizeze partial sau total procesul decizional
Elemente obligatorii:
- Baza de cunostinte
- Motorul de Inferenta
Baza de Cunostinte
- Contine “domeniul de cunostinte” furnizate de specialisti umani,
- Este ultraspecializata intr-un anumit domeniu,
- Este reprezentata sub forma de reguli “IF-THEN”,

Figure 1 KBS
1. Scopul lucrarii
Lucrarea prezintă noţiuni introductive privind construirea si implementarea regulilor de inferenta “if-
then”, specifice sistemelor expert. Utilizand pachetul GUIDE (Graphical User Interface Development
Environement) disponibil in MATLAB si elementele medicale definitorii diagnosticarii convulsiilor
febrile la copii, lucrarea descrie implementarea unei interfete grafice utilizator care sa sprijine decizia
medicala finala.
2. Aplicatia medicala- studiu de caz: Diagnosticul diferenţial al
convulsiilor febrile la copii
Convulsiile febrile apar în general la copii cu vârste cuprinse între 6 luni si 5 ani sub forma unor
convulsii tonico-clonice generalizate asociate cu febra (peste 38 ºC), de scurta durata (sub 15 minute),
în absenta unei infectii sau anomalii la nivelul SNC. Nu sunt incluse în aceasta categorie convulsiile
însotite de febra aparute la copii care au avut anterior convulsii afebrile.

1
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

EPIDEMIOLOGIE
Convulsiile febrile reprezinta cea mai comuna afectiune neurologica întâlnita în pediatrie. Ele apar la
2-5% din totalul copiilor sub 5 ani, cu frecventa maxima în jurul vârstei de 2 ani, si sunt mai frecvente
la baieti.

ETIOLOGIE si FIZIOPATOLOGIE
În aparitia convulsiilor sunt implicati 3 factori:
- febra. Cresterea brusca a temperaturii corpului declansaza convulsiile datorita scaderii pragului
convulsivant al neuronilor cerebrali prin cresterea ratei metabolismului. Astfel, convulsiile febrile
survin precoce în cursul unor boli infectioase acute(otite medii, amigdalite, rinofaringite, pneumonii,
viroze, gastroenterite, infectii urinare), în perioada cresterii rapide a temperaturii si pot fi primul semn
al bolii. Convulsiile mai pot aparea si dupa unele imunizari (antipoliomielitica, antirujeoloasa, DTP),
în special la copiii cu convulsii febrile în antecedentele personale sau familiale.
- vârsta. Convulsiile sunt frecvente între 3 luni si 5 ani, când cortexul este mai excitabil, deci mai
susceptibil. Aceasta susceptibilatea este scazuta înainte de 5-6 luni(natura inhibitorie a cortexului) si
dupa 5 ani (datorita maturarii cerebrale).
- factori genetici. Exista o predispozitie genetica transmisa poligenic sau autozomal dominant cu
penetranta incompleta , în unele cazuri regasindu-se convulsii febrile în antecedentele familiale.

MANIFESTÃRI CLINICE
Se descriu doua tipuri de crize convulsive febrile:
- convulsiile simple reprezinta 95% din totalul convulsiilor febrile.De obicei unice, ele sunt convulsii
tonico-clonice generalizate sau clonice, rar hipotonice, de durata scurta (de obicei 5-6 minute,
întotdeauna sub 15 minute), aparute la copii cu dezvoltare psihomotorie normala anterior crizei.
Revenirea la starea neurologica normala se face rapid, fara a lasa sechele.
- convulsiile complexe, 5% din totalul convulsiilor febrile, reprezinta convulsii focale, cu durata peste
15 minute, aparute la copii cu dezvoltare psihomotorie anormala anterioara crizei. Aceste crize se
repeta în 24 de ore si prezinta risc crescut de sechele neurologice. Convulsiile febrile complexe pot fi
urmate de pareza tranzitorie unilaterala (paralizie Todd).
Examinarea clinica trebuie sa urmareasca si detectarea cauzei febrei la copil (otita medie, faringita,
meningita etc.)

DIAGNOSTIC
Diagnosticul convulsiilor febrile se bazeaza pe:
- anamneza
- examen clinic
- investigatii paraclinice
- hemoleucograma, ionograma, glicemia, calcemia, magnezemia, EKG
- sumar de urina, urocultura
- examen al fundului de ochi (pentru eventuala evidentiere a unui edem papilar)
- examen ORL (pentru stabilirea cauzei febrei)
- screening toxicologic în cazurile neclare

2
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

- punctia lombara si examenul LCR au urmatoarele indicatii: copiii sub 18 luni (este
obligatorie la copiii sub 6 luni), întârzierea însanatosirii, suspiciune de meningita,
convulsii febrile complexe sau aparitia crizelor în a doua zi de boala.
- EEG nu prezinta interes în prima saptamâna; poate fi folositoare dupa una sau mai
multe saptamâni în cazurile incerte
- metode imagistice (CT, IRM cerebral) nu se fac de rutina. Indicatii: convulsii febrile
complexe, hipertensiune intracraniana, traumatism în antecedente, anomalii
neurologice.

Diagnosticul diferential al convusiilor febrile se face cu:


- afectiuni ale SNC (meningita, encefalita, tumori etc.)
- traumatisme cerebrale asociate cu febra
- spasmul hohotului de plâns
- delirul febril
- frisoane febrile
- sincopa convulsiva
- intoxicatii medicamentoase (fenitiazine, xantine)
- tulburari electolitice
- epilepsie

CONSTRUIREA SCHEMEI LOGICE


Pe baza cunostintelor anterioare se construieste schema logica a diagnosticului diferential. In cele ce
urmeaza, o diagrama logica simplificata a fost construita, tinand cont de urmatoarele criterii:
- absenta/prezenta conditiei febrile si valoarea temperaturii
- absenta/prezenta convulsiilor
- durata convulsiilor
- perioada de revenire din starea convulsiva
- repetarea convulsiilor
- perioada in care acestea s-au manifestat
- consumul anterior de medicamente

3
as. dr. ing Angela Lungu
4
Diagnosticarea medicala-elemente fizico-tehnice

Figure 2 Diagrama logica simplificata a diagnosticului diferential al convulsiilor febrile

as. dr. ing Angela Lungu


Diagnosticarea medicala-elemente fizico-tehnice

3. Sistem bazat pe cunostinte pentru diagnosticarea convulsiilor febrile


la copii. Exemplu in MATLAB
Pachetul de interfaţare grafică disponibil în MATLAB GUIDE poate fi folosit la implementarea unei
asemenea aplicaţii utilizator care furnizeaza un mediu de lucru familiar si intuitiv.
Accesarea pachetului se face prin tastarea comenzii guide în fereastra de comandă a MATLAB,
urmată de selectarea opţiunii Blank GUI (Default), care va deschide un nou panou de lucru.

Figure 3 Deschiderea panoului de lucru GUIDE

Crearea interfetei utilizator (design)

Panoul de lucru (având extensia .fig) permite în acest moment adăugarea elementelor grafice de tipul
butoanelor, zonelor de afişare, a câmpurilor de text, etc. Aceste elemente grafice se regăsec în stânga
zonei de lucru. Poziţionarea obiectelor dorite în zona de lucru se va face prin operaţiunea de „drag and
drop”.
1. Plasaţi cursorul deasupra obiectelor din stânga panoului de lucru şi indentificaţi tipul
acestora. Pentru afişarea numelor obiectelor selectaţi din meniul fişierului de lucru
GUIDE: File-> Preferences-> GUIDE şi bifaţi: Show names in component pallet
(OK).
2. Pentru aplicatia curenta vor fi necesare urmatoarele elemente:
 Static Text (17)
 Edit Text (9)
 Push Button (1)
 Toggle Button (1)
 Button Group (1)
 Radio Button (2)

5
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

Figure 4 Plasarea initiala a elementelor grafice


3. Salvaţi fişierul: File -> Save as -> „nume_fisier” -> Save
Salvarea va genera un fisier de tip .m şi unul de tip figură, .fig având acelaşi nume. Fişierul .m conţine
toate comezile şi funcţiile care descriu interfaţa grafică. În lipsa unui mediu interactiv, precum
GUIDE, este posibilă generarea unei interfeţe grafice prin linia de comandă. In general, fiecarui obiect
din fisierul .fig ii corespunde o functie care il descrie si ii specifica atributele (callback). Functiile de
tip callback vor rula doar atunci cand evenimentul pentru care au fost programate are loc. Mai precis,
in momentul in care un buton de pe interfata grafica a fost activat (si-a schimbat starea initiala), atunci
functia callback atasata obiectului (in cazul nostru, butonul), va rula, executand comenzile specificate
in interior.
4. Închideţi figura.
5. Dechideţi figura: click dreapta pe fisierul cu extensia .fig si selectati : open in
GUIDE.
Deschideti si fisierul .m si observati functile generate din fisier care corespund
obiectelor. Cele doua fisiere, .m si .fig sunt legate intre ele si drept urmare, orice
modificare (urmata de salvare) aplicata unuia dintre ele va fi regasita si in cel de-al
doilea.

Figure 5 Exemplu (print screen) al modulul de re-deschidere a figurii in GUIDE

6
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

6. Modificarea proprietatilor obiectelor interfetei grafice


Schimbarea oricarei proprietati a obiectelor se va face din meniul Property Inspector. Acesta se
acceseaza prin click dreapta pe obiect, selectandu-se din meniul care s-a deschis.
Meniul Property Inspector permite schimbarea dimensiunii, a fontului, culorii textului, culoarea de
fundal, vizibilitatea, numele obiectului s.a, dar tot aici pot fi adaugate ‚etichete intuitive (tag-uri)
fiecarui obiect. Tag-urile, nu sunt vizibile utilizatorului interfetei, dar sunt extrem de utile
programatorului, care poate atasa un nume sugestiv, stiind in timpul codarii, care este obiectul asupra
caruia actioneaza. In Property Inspector al fiecarui obiect, modificati campurile String si Tag folosind
notatiile din tabel. Bara oblica din tabel sugereaza absenta campului tag pentru obiectul respectiv.
Redimensionati interfata grafica si modificati proprietatile obiectelor dupa cum este indicat in figura
urmatoare si tinand cont de informatia din tabelul 1.

Table 1 Lista obiectelor de plasat pe panoul de lucru


tipul obiectului String Tag
Diagnosticul
convulsiilor
text1
febrile la
copii
Datele
text2
Pacientului
Nume text3
Prenume text4
Varsta (luni) text5
Sex text6
Examen
text7
clinic
Temperatura
text8
(C)
Frecventa
Static Text text9
cardiaca
Tensiune
text10
sistolica
Tensiune
text11
diastolica
Durata
text12
convulsiilor
Diagnostic
diferential al
text14
convulsiilor
febrile
Static text intrebare
Intrebare text15
Recomandare text16
Panou mesaj mesaj

7
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

Push Button START start


Togglebutton Valideaza vali
Button Group Raspuns
Radio Button DA da

Radio Button NU nu

nume

prenume

varsta

sex

Edit text temperatura

frecventa

tensiunea_sist

tensiunea_diast

durata_convulsii

Figure 6 Modificarea elementelor grafice

7. Salvati si rulati aplicatia. Rularea poate fi facuta atat din fisierul .fig (pe care au fost
amplasate obiectele) cat si din cel .m. In acest moment, interfata grafica nu este
8
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

functionala. Legatura dintre componenta grafica plasata pe panoul de lucru si


evenimenul pe care activarea acelei componente sa il declanseze se realizeaza prin
intermediul functiilor de tip callback. Atunci cand spre exemplu un buton este apasat,
programul va raspunde (call back) cu o anumita actiune. Stabilirea legaturilor dintre
obiecte si codul MATLAB, prezentata in paragrafele urmatoare.

Stabilirea legăturii dintre interfaţă şi codul MATLAB (functionalitate)


Fiecarui element grafic pozitionat in zona de lucru i s-a generat automat o functie de tip call back in
fisierul .m file. In acest moment poate fi observanta importanta TAG-urilor. Functiile se apeleaza prin
intermediul denumirilor stabilite in campurile de tag. Fiecare componenta grafica va avea asociat un
handles –o structura ce contine toti parametrii care puteau fi vizualizati sub property.
Pentru a obtine un anumit parametru al unui element grafic se foloseste functia get() iar pentru a seta
un parametru se foloseste functia set().
Exemplu:
- Se doreste obtinerea valorii numerice introdusa in campul de editare cu tagu-ul varsta:
get(handles.varsta, „String‟)
Raspunsul va fi unul de tip sir; daca se doreste compararea valorii stocate in varsta cu o alta valoare
numerica, atunci este necesara convertirea din string in data de tip numeric folosind functia str2num()
- Se doreste setarea valorii numerice din campul de editare cu tagu-ul varsta la valoarea
5:
set(handles.varsta, „String‟,‟5‟)

1. Setarea valorilor initiale


In functia de deschidere “OpeningFcn” vor fi trecute valorile initiale ale fiecarui obiect grafic.
% --- Executes just before convulsii1 is made visible.
function convulsii1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to convulsii1 (see VARARGIN)

% Choose default command line output for convulsii1


handles.output = hObject;
set(handles.nume,'String', ' ');
set(handles.prenume,'String', ' ');
set(handles.sex,'String', ' ');
set(handles.varsta, 'String', '0');
set(handles.temperatura, 'String', '0');
set(handles.frecventa, 'String', '0');
set(handles.tensiunea_sist, 'String', '0');
set(handles.tensiunea_diast, 'String', '0');
set(handles.tensiunea_diast, 'String', '0');
set(handles.durata_convulsii, 'String', '0');
9
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

set(handles.mesaj, 'String', '');


set(handles.intrebare, 'String', '');
% Update handles structure
guidata(hObject, handles);

Figure 7 Lansarea in executie a interfetei grafice


3. Startul algoritmului si implementarea regulilor de diagnosticare
Apasarea butonului start va permite parcurgerea diagramei logice de diagnosticare. Intrebarile vor fi
afisate in static_text avand tag-ul intrebare. Utilizatorul, va alege un raspuns din grupul butoanelor
radio, iar cu ajutorul toggle button, acest raspuns va fi validat. Se va folosi functia waitfor(), care
asteapta activarea butonului toggle (tag vali) pentru a trece mai departe conform schemei logice.
Raspunsul final va fi afisat in static_text avand tag-ul mesaj.
% --- Executes on button press in start.
function start_Callback(hObject, eventdata, handles)
% hObject handle to start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

set(handles.mesaj, 'String', '');


set(handles.intrebare, 'String', '');

if(str2double(get(handles.temperatura, 'String'))>=38.5)
set(handles.intrebare, 'String','Convulsii prezente?')

waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1 && str2double(get(handles.durata_convulsii, 'String'))>=15)
set(handles.mesaj,'String','Convulsii febrile complexe. Se recomanda spitalizarea.')
elseif(get(handles.da, 'Value')==1 && str2double(get(handles.durata_convulsii, 'String'))<15)
set(handles.intrebare, 'String','Crize anterioare prezente?')

10
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.intrebare, 'String','Crize repetate la un interval <24 de ore?')
waitfor(handles.vali,'Value')

if(get(handles.da, 'Value')==1)
set(handles.mesaj,'String','Se recomanda spitalizarea pentru investigatii suplimentare.')
else
set(handles.mesaj,'String','Tulburari electrolitice posibile. Se recomanda investigatii
suplimentare.')
end
elseif(get(handles.da, 'Value')==0)
set(handles.intrebare, 'String','Revenire rapida la starea anterioara?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.mesaj,'String','Convulsii simple.')
elseif(get(handles.da, 'Value')==0)
set(handles.intrebare, 'String','Episod de convulsie insotit de pierderea constientei?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.mesaj,'String','Investigatii suplimentare.')
else
set(handles.mesaj,'String','Convulsii simple.')
end
end
end
elseif(get(handles.da, 'Value')==0)
set(handles.mesaj,'String','Investigatii suplimentare pentru determinarea cauzei febrile.')
end

else
set(handles.intrebare, 'String','Convulsii prezente?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==0)
set(handles.mesaj,'String','Pacientul nu sufera de convulsii febrile.')
elseif(get(handles.da, 'Value')==1 && str2double(get(handles.durata_convulsii, 'String'))>=15)
set(handles.mesaj, 'String','Se recomanda investigatii suplimentare. Se suspecteaza stari
epileptice.')
elseif(get(handles.da, 'Value')==1 && get(handles.durata_convulsii, 'Value')<15)
set(handles.intrebare, 'String','Criza a avut loc in urma unui episod de plans intens?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.mesaj, 'String','Sindromul hohotului de plans.')
elseif(get(handles.da, 'Value')==0)
set(handles.intrebare, 'String','Crizele s-au repetat?')
waitfor(handles.vali,'Value')
11
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

if(get(handles.da, 'Value')==1)
set(handles.intrebare, 'String','Crizele au avut loc intotdeauna in timpul zilei?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.mesaj, 'String','Sincopa convulviva.')
else
set(handles.mesaj, 'String','Se recomanda investigatii suplimentare.')
end
else
set(handles.intrebare, 'String','Copilul a consumat medicamente precum Emiteral?')
waitfor(handles.vali,'Value')
if(get(handles.da, 'Value')==1)
set(handles.mesaj, 'String','Intoxicatie cauzata de medicamente.')
else
set(handles.mesaj, 'String','Se recomanda investigatii suplimentare.')
end
end
end
end
end

guidata(hObject,handles);

4. Exercitii
1. Sa se modifice diagrama logica a diagnosticului diferential al convulsiilor febrile astfel incat
urmatorii parametri si valorile lor sa reprezinte criterii decizionale:
- varsta
- tensiunea sistolica
- tensiunea diastolica
- frecventa cardiaca
Sa se introduca modificarile din noua diagrama in codul sursa.
2. Sa se creeze o interfata grafica care sa permita introducerea datelor personale ale unui pacient,
inclusiv inaltime si greutate si sa afiseze valoarea indicelui de masa corporala. Pe baza valorii IMC sa
se indice printr-un mesaj riscul pentru sanatate:

unde kg- reprezinta greutatea in kg a pacientului si h reprezinta inaltimea in m a pacientului


- IMC sub 18,5 Risc pentru sănătate: ridicat Aceasta valoare indică riscuri pentru
sănătatea ta, este mult prea mică pentru o sănătate optimă.
- IMC 18,5-24,9 Risc pentru sănătate: minim/scăzut
- IMC 25-29,9 Risc pentru sănătate: scăzut/moderat
- IMC 30-34,9 Risc pentru sănătate: moderat/ridicat Acesta e un semn de avertisment:
schimbă-ți dieta acum!

12
as. dr. ing Angela Lungu
Diagnosticarea medicala-elemente fizico-tehnice

- IMC peste 35 Risc pentru sănătate: ridicat Greutatea iți afectează în mod radical
sănătatea. Scapă de surplusul de greutate!

13
as. dr. ing Angela Lungu