Построение и исследование моделей краткосрочного прогнозирования гликемии у больных сахарным диабетом
.pdf0m115[0m[37m,[0m114[0m[37m,[0m113[0m[37m,[0m112[0m[37m,[0m111[0m[37
m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[37m,[0m110[0m[
37m,[0m110[0m[37m,[0m110[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0
m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m111[0m[37m,[0m11
2[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m
112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[0m112[0m[37m,[
0m111[0m[37m[37m][0m[37m,[0m[34;1m"ZT"[0m[37m:[0m[37m[[0m120[0m[37m
,[0m121[0m[37m,[0m121[0m[37m,[0m122[0m[37m,[0m122[0m[37m,[0m123[0m[3
7m,[0m123[0m[37m,[0m124[0m[37m,[0m125[0m[37m,[0m126[0m[37m,[0m126[0
m[37m[37m][0m[37m[37m}[0m[37m,[0m[34;1m"COB"[0m[37m:[0m[0m0[0m[37 m,[0m[34;1m"IOB"[0m[37m:[0m[0m-0.032[0m[37m,[0m[34;1m"rea- son"[0m[37m:[0m[32m"COB: 0, Dev: -0.4, BGI: 0.0, ISF: 7.7, CR: 9.36, Target: 7.0, minPredBG 6.2, minGuardBG 6.1, IOBpredBG 6.2; Eventual BG 6.4 < 7.0, temp 0.1 ~< req 0.1U/hr. "[0m[37m[37m}[0m
No smb_enact needed. Temp refreshed: monitor/temp_basal.json: [37m{[0m[34;1m"duration"[0m[37m:[0m[0m28[0m[37m,[0m[34;1m"rate"[0m[37m:[0m[0m0.1[0m[37m,[0 m[34;1m"temp"[0m[37m:[0m[32m"absolute"[0m[37m[37m}[0m
No bolus needed. Settings less than 15 minutes old. Edison battery at 69% is charged (>= 98%) or likely charging (60-70%). Pumphistory-24 < 15m old
Your instance of oref0 [0.6.2, master] is out-of-date by 2 commits: you may want to consider updating.
Please make sure to read any new documentation and release notes that accompany the update.
Completed oref0-pump-loop at Mon Sep 9 06:28:32 MSK 2019
121
Приложение 2. Листинги программ
Листинг 1. M-файл для обработки данных обучающей и тестовой выборки
new_data = DATA.'
for i = 1 : (0.8 * (numel(DATA) / 10)) DataTrain(:, i) = new_data(:, i)
end
for j = 1 : (numel(DATA) / 10) - int64 (0.8 * (numel(DATA) / 10))
DataTest(:, j) = new_data(:, j + int64(0.8 * (numel(DATA) / 10)))
end
for k = 1 : 9
DataTrainInput(k, :) = DataTrain(k, :)
end
DataTrainOutput(1, :) = DataTrain(k + 1, :)
for k = 1 : 9
DataTestInput(k, :) = DataTest(k, :) end
DataTestOutput(1, :) = DataTest(k + 1, :)
for i = 1 : 4000 data(1,i)=first(i,1) data(2,i)=first(i,2) data(3,i)=first(i,3) data(4,i)=first(i,1) data(5,i)=first(i,2) data(6,i)=first(i,3) data(7,i)=first(i,1) data(8,i)=first(i,2) data(9,i)=first(i,3) data(10,i)=first(i,3) end
for i = 1 : 1000 dataTestInput(1,i)=data_2(i,1) dataTestInput(2,i)=data_2(i,2) dataTestInput(3,i)=data_2(i,3) dataTestInput(4,i)=data_2(i,1) dataTestInput(5,i)=data_2(i,2) dataTestInput(6,i)=data_2(i,3)
122
dataTestInput(7,i)=data_2(i,1) dataTestInput(8,i)=data_2(i,2) dataTestInput(9,i)=data_2(i,3) end
for k = 1 : 1000
data_2(k,:) = first(k+4000,:)
end
for i = 10 : 10 dataOutput(i-9,:)=data(i,:)
end
for j = 1 : 9
mu1(j, 1) = mean(DataTrainInput(j, :)); end
for j = 1 : 9
sig1(j, 1) = std(DataTrainInput(j, :)); end
for j = 1 : 9
DataTrainInputStandardized(j,:) = (DataTrainInput(j,:) - mu1(j,1)) / sig1(j,1);
end
for j = 1 : 9
mu3(j, 1) = mean(dataTestInput(j, :)); end
for j = 1 : 9
sig3(j, 1) = std(dataTestInput(j, :)); end
for j = 1 : 9
dataTestInputStandardized(j,:) = (dataTestInput(j,:) - mu3(j,1)) / sig3(j,1);
end
mu2(1, 1) = mean(dataOutput(1, :));
sig2(1, 1) = std(dataOutput(1, :));
dataTrainOutputStandardized(1,:) = (dataOutput(1,:) - mu2(1,1)) / sig2(1,1);
for j = 1 : 1
dataTestOutput4_1(j,:) = sig2(j,1)*dataTestOutput4(j,:) + mu2(j,1);
123
end
for i = 1201 : 1400
dataOutput_1(i - 1200, :) = data(i, :)
end figure
subplot(1,1,1)
plot(dataTestOutput(1,:)) hold on plot(dataTestOutput4_1(1,:)) hold off
legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Blood Glucose")
dataTestOutput4 = sim(network3, dataTestInputStandardized)
for j = 1 : 1000 dataTestOutput(1,j)=first(j+4000,3)
end
rmse3 = sqrt(mean((dataTestOutput(1,:)-dataTestOut- put4_1(1,:)).^2))
for i = 1 : 2000 dataSecondTestInput(1,i)=first(i+4000,1) dataSecondTestInput(2,i)=first(i+4000,2) dataSecondTestInput(3,i)=first(i+4000,3) dataSecondTestInput(4,i)=first(i+4000,1) dataSecondTestInput(5,i)=first(i+4000,2) dataSecondTestInput(6,i)=first(i+4000,3) dataSecondTestInput(7,i)=first(i+4000,1) dataSecondTestInput(8,i)=first(i+4000,2) dataSecondTestInput(9,i)=first(i+4000,3) end
for j = 1 : 9
mu4(j, 1) = mean(dataSecondTestInput(j, :)); end
for j = 1 : 9
sig4(j, 1) = std(dataSecondTestInput(j, :)); end
for j = 1 : 9
dataSecondTestInputStandardized(j,:) = (dataSecondTestInput(j,:) - mu4(j,1)) / sig4(j,1);
124
end
dataTestOutput6 = sim(network3, dataSecondTestInputStandardized)
for j = 1 : 1
dataTestOutput6_1(j,:) = sig2(j,1)*dataTestOutput6(j,:) + mu2(j,1);
end
for i = 1 : 2000 dataT(1,i)=first(i+4000,3)
end
DataTestNARXOutput = sim(network3, dataTrainInputStandardized)
for j = 1 : 1
DataTestNARXOutput_1(j,:) = sig2(j,1)*DataTestNARXOutput(j,:) + mu2(j,1);
end figure
subplot(1,1,1) plot(DataTestOutput_1(1,:)) hold on plot(dataOutput(1,:))
hold off
legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Blood Glucose")
for i = 1 : 1
DataTestOutput(i,:) = DataTest(i+9,:); end
% НОРМАЛИЗАЦИЯ ВХОДНЫХ ДАННЫХ
for j = 1 : 9
mu(j, 1) = mean(DataTrainInput(j, :)); end
for j = 1 : 9
sig(j, 1) = std(DataTrainInput(j, :)); end
for j = 1 : 9
125
DataTrainInputStandardized(j,:) = (DataTrainInput(j,:) - mu(j,1)) / sig(j,1);
end
% НОРМАЛИЗАЦИЯ ВХОДНЫХ ОБУЧАЮЩИХ ДАННЫХ
for j = 1 : 10
mu(j, 1) = mean(data(j, :)); end
for j = 1 : 10
sig(j, 1) = std(data(j, :)); end
for j = 1 : 1
DataTrainOutputStandardized(j,:) = (DataTrainOutput(j,:) - mu2(j,1)) / sig2(j,1);
end
% НОРМАЛИЗАЦИЯ ВЫХОДНЫХ ДАННЫХ
for j = 1 : 1
mu2(j, 1) = mean(DataTrainOutput(j, :)); end
for j = 1 : 1
sig2(j, 1) = std(DataTrainOutput(j, :)); end
for j = 1 : 1
DataTrainOutputStandardized(j,:) = (DataTrainOutput(j,:) - mu2(j,1)) / sig2(j,1);
end
% НОРМАЛИЗАЦИЯ ВХОДНЫХ ТЕСТОВЫХ ДАННЫХ
for j = 1 : 9
mu3(j, 1) = mean(DataTestInput(j, :)); end
for j = 1 : 9
sig3(j, 1) = std(DataTestInput(j, :)); end
for j = 1 : 9
DataTestInputStandardized(j,:) = (DataTestInput(j,:) - mu3(j,1)) / sig3(j,1);
end
126
ПОЛУЧЕНИЕ ОТВЕТА НС
Data1 = sim(NARX1, dataTestInputStandardized) Data2 = sim(NARX2, dataTestInputStandardized) Data3 = sim(NARX3, dataTestInputStandardized)
ДЕНОРМАЛИЗАЦИЯ
for j = 1 : 1
FirstData1(j,:) = sig2(j,1)*Data1(j,:) + mu2(j,1); FirstData2(j,:) = sig2(j,1)*Data2(j,:) + mu2(j,1); FirstData3(j,:) = sig2(j,1)*Data3(j,:) + mu2(j,1); end
for i = 1 : 500
dataTestOutput_1(1,i) = dataTestOutput(1, i) FirstData_1(1,i) = FirstData1(1,i) FirstData_2(1,i) = FirstData2(1,i) FirstData_3(1,i) = FirstData3(1,i)
end
FirstData_3(1,:) = FirstData_3(1,:) + 20
rmse = sqrt(mean((dataTestOutput_1(1,:) - FirstData_3(1,:)).^2))
figure subplot(2,1,1)
plot(dataTestOutput_1(1,:)); hold on plot(FirstData_3(1,:));
hold off
legend(["Observed" "Forecast"]) ylabel("Blood Glucose") title("Forecast with Updates")
subplot(2,1,2)
stem(dataTestOutput_1(1,:) - FirstData_3(1,:)) xlabel("Month")
ylabel("Error") title("RMSE = " + rmse)
rmse5 = sqrt(mean((dataT(1,:)-dataTestOutput6_1(1,:)).^2))
127
Листинг 2. Синтаксический анализатор
package sample;
import javafx.beans.property.SimpleStringProperty; import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.stage.FileChooser; import javafx.stage.Stage;
import javafx.scene.layout.AnchorPane; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.util.WorkbookUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.*; import java.net.URL;
import java.util.LinkedList; import java.util.ResourceBundle; import java.util.Scanner;
public class Controller {
private File fileEmployeis;
private LinkedList<String> date1 = new LinkedList<>(); private LinkedList<String> time1 = new LinkedList<>();
private LinkedList<String> iob1 = new LinkedList<>(); 128
private LinkedList<String> mealcob1 = new LinkedList<>(); private LinkedList<String> glucose1 = new LinkedList<>(); private LinkedList<String> normiob = new LinkedList<>(); private LinkedList<String> normmealcob = new LinkedList<>(); private LinkedList<String> normglucose = new LinkedList<>();
@FXML
private ResourceBundle resources; @FXML
private URL location; @FXML
private Button loadFileButton; @FXML
private Button saveFileButton; @FXML
private AnchorPane anchorPane; @FXML
private TextArea logtext;
public void loadFileEmployeis() throws IOException { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Выбор файла данных");
Stage stage = (Stage)anchorPane.getScene().getWindow(); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFil-
ter("LOG","*.log"));
fileEmployeis= fileChooser.showOpenDialog(stage); String stroka;
if (fileEmployeis!=null){ logtext.appendText("Файл открыт\n");
cleararray();
129
FileReader fr = new FileReader(fileEmployeis);
Scanner scan = new Scanner(fr);
while (scan.hasNextLine()){ stroka = scan.nextLine();
char[] charstr = stroka.toCharArray(); String[] stringstr = new String[charstr.length]; int i = 0;
for(char d: charstr){
stringstr[i] = Character.toString(d); i++;
}
if(stringstr.length>64){ String date = null;
finddate(stringstr,date,date1); String time=null; findtime(stringstr,time,time1); String iob = "0"; findiob(stringstr,iob,iob1); String mealcob=null;
findmealcob(stringstr,mealcob,mealcob1); String glucose=null; findglucose(stringstr,glucose,glucose1);
}
}
normalization(iob1,mealcob1,glucose1); logtext.appendText("Файл готов к отгрузке\n");
int k = time1.size(), u= date1.size(),z=iob1.size(),y=mealcob1.size(),t=glucose1.size();
fr.close();
130