diff options
Diffstat (limited to 'sourcecodes/parameter_learning/code_backup/drawFigure.m')
| -rw-r--r-- | sourcecodes/parameter_learning/code_backup/drawFigure.m | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/sourcecodes/parameter_learning/code_backup/drawFigure.m b/sourcecodes/parameter_learning/code_backup/drawFigure.m deleted file mode 100644 index f84bffa3..00000000 --- a/sourcecodes/parameter_learning/code_backup/drawFigure.m +++ /dev/null @@ -1,390 +0,0 @@ -function [] = drawFigure(nnodes,bnet,labels,filename,cases,stdevs,means,selectvar,selectdata) -%drawFigure writes the parameters and data that are needed to draw the -%structure of a Bayesian network for BNW. -% This is the first function that - - - -if nargin < 8, - drawFigureNoEv(nnodes,bnet,labels,filename,cases,stdevs,means); -else - drawFigureEv(nnodes,bnet,labels,filename,cases,stdevs,means,selectvar,selectdata); -end; - -end - - - -function [] = drawFigureEv(nnodes,bnet,labels,filename,cases,stdevs,means,selectvar,selectdata) -%Function to use if there is no entered evidence. -% -% -%Before each printed line, I will have a line that starts with %%% -% that describes what will be on that line - -%Create an empty evidence cell array. - -%val=cases; -%for i = 1:nnodes -% val(i,1)=val(i,2); - -%end - -A=cell2mat(cases'); -Amax=max(A); -Amin=min(A); - - -evidence = cell(1,nnodes); -engine = jtree_inf_engine(bnet); - -evidence{selectvar}=selectdata; - -[engine,loglik]=enter_evidence(engine,evidence); - -%Open the file, and write the nodes to a file. -fileID = fopen(filename,'w'); - -%%%%Evidence node -fprintf(fileID,'%i\n',selectvar); -%%% The number of nodes -fprintf(fileID,'%i\n',nnodes); -%Get canvas size -labels_temp = cellstr(labels); -[x,y] = make_layout(bnet.dag); - -x = x - min(x); -y = 1 - y; -y = y - min(y); - -[x_dim,y_dim] = canvasSize(nnodes,x,y); - -%%% The dimensions of the canvas for the javascript code -fprintf(fileID,'%i\t%i\t\n',x_dim,y_dim) - -x = x*x_dim; -y = y*y_dim; -for i = 1:nnodes, -%%% The name and X- and Y-positions of each node - fprintf(fileID,'%s\t%i\t%i\n',labels{i},round(x(i)),round(y(i))); -end - -%Get the number of parents and children for each node. -num_par = zeros(1,nnodes); -%For parents, sum down columns -for i = 1:nnodes, - for j = 1:nnodes, - if bnet.dag(j,i) == 1, - num_par(i) = num_par(i) + 1; - end - end -end -num_child = zeros(1,nnodes); -for i = 1:nnodes, - for j = 1:nnodes, - if bnet.dag(i,j) == 1, - num_child(i) = num_child(i) + 1; - end - end -end - - -for i = 1:nnodes, - %%% The name and type of each node (1=continuous, the number of states - %%% if it is discrete - fprintf(fileID,'%s\t%i\n',labels{i},bnet.node_sizes(i)); - %%% The size of the node, I am going to keep them - %%% 250(width) by 150(height) for now - %Could modify this to change the width based on the length of the node - %name - fprintf(fileID,'%i\t%i\n',250,150); - %%% The number of parents of the node, and the parents - if num_par(i) == 0; - %%% If no parents: - fprintf(fileID,'%i\n',num_par(i)); - else - parents = zeros(1,num_par(i)); - k = 1; - for j = 1:nnodes, - if bnet.dag(j,i) == 1, - parents(1,k) = j; - k = k + 1; - end - end - format = '%i\t'; - for j = 1:num_par(i)-1, - format = strcat(format,'%i\t'); - end - format = strcat(format,'%i\n'); - %%%If there are parents: - fprintf(fileID,format,num_par(i),parents(1,:)); - end - - - %%% The number of children of the node, and the children - if num_child(i) == 0; - %%% If no children: - fprintf(fileID,'%i\n',num_child(i)); - else - children = zeros(1,num_child(i)); - k = 1; - for j = 1:nnodes, - if bnet.dag(i,j) == 1, - children(1,k) = j; - k = k + 1; - end - end - format = '%i\t'; - for j = 1:num_child(i)-1, - format = strcat(format,'%i\t'); - end - format = strcat(format,'%i\n'); - %%%If there are parents: - fprintf(fileID,format,num_child(i),children(1,:)); - end - - predict = marginal_nodes(engine,i); - if isempty(evidence{i}) - if bnet.node_sizes(i) ~= 1, - for j = 1:bnet.node_sizes(i), - %%%For discrete nodes, the state and the percent of that state - fprintf(fileID,'%i\t%6.4f\n',j,predict.T(j)); - end; - else - - [x_vals,y_vals] = calcGaussian(predict.mu,predict.Sigma,Amax(i),Amin(i)); - %%%For continuous nodes, print x and the pdf of a normal curve. - for j = 1:101, - %%Undo standardization - xvals(j,1) = xvals(j,1)*stdevs{i}+means{i} - fprintf(fileID,'%6.4f\t%6.4f\n',x_vals(j,1),y_vals(j,1)); - end; - end; - else - fprintf(fileID,'%6.4f\t%6.4f\n',selectdata,1); - end - -end -%fprintf(fileID,'%s\t %\n',labels_temp{:}); - - -fclose(fileID); - -end - - - - - - -function [] = drawFigureNoEv(nnodes,bnet,labels,filename,cases,stdevs,means) -%Function to use if there is no entered evidence. -% -% -%Before each printed line, I will have a line that starts with %%% -% that describes what will be on that line -A=cell2mat(cases'); -Amax=max(A); -Amin=min(A); - -%Create an empty evidence cell array. -evidence = cell(1,nnodes); -engine = jtree_inf_engine(bnet); -[engine,loglik] = enter_evidence(engine,evidence); - -%Open the file, and write the nodes to a file. -fileID = fopen(filename,'w'); -%%% The number of nodes -fprintf(fileID,'%i\n',nnodes); - -%Get canvas size - -labels_temp = cellstr(labels); -[x,y] = make_layout(bnet.dag); -%[x,y] = layout_dag(bnet.dag); - - -x = x - min(x); -y = 1 - y; -y = y - min(y); - -[x_dim,y_dim] = canvasSize(nnodes,x,y); - -%%% The dimensions of the canvas for the javascript code -fprintf(fileID,'%i\t%i\t\n',x_dim,y_dim) - -x = x*x_dim; -y = y*y_dim; -for i = 1:nnodes, -%%% The name and X- and Y-positions of each node - fprintf(fileID,'%s\t%i\t%i\n',labels{i},round(x(i)),round(y(i))); -end - -%Get the number of parents and children for each node. -num_par = zeros(1,nnodes); -%For parents, sum down columns -for i = 1:nnodes, - for j = 1:nnodes, - if bnet.dag(j,i) == 1, - num_par(i) = num_par(i) + 1; - end - end -end -num_child = zeros(1,nnodes); -for i = 1:nnodes, - for j = 1:nnodes, - if bnet.dag(i,j) == 1, - num_child(i) = num_child(i) + 1; - end - end -end - - -for i = 1:nnodes, - %%% The name and type of each node (1=continuous, the number of states - %%% if it is discrete - fprintf(fileID,'%s\t%i\n',labels{i},bnet.node_sizes(i)); - %%% The size of the node, I am going to keep them - %%% 250(width) by 150(height) for now - %Could modify this to change the width based on the length of the node - %name - fprintf(fileID,'%i\t%i\n',250,150); - %%% The number of parents of the node, and the parents - if num_par(i) == 0; - %%% If no parents: - fprintf(fileID,'%i\n',num_par(i)); - else - parents = zeros(1,num_par(i)); - k = 1; - for j = 1:nnodes, - if bnet.dag(j,i) == 1, - parents(1,k) = j; - k = k + 1; - end - end - format = '%i\t'; - for j = 1:num_par(i)-1, - format = strcat(format,'%i\t'); - end - format = strcat(format,'%i\n'); - %%%If there are parents: - fprintf(fileID,format,num_par(i),parents(1,:)); - end - - - %%% The number of children of the node, and the children - if num_child(i) == 0; - %%% If no children: - fprintf(fileID,'%i\n',num_child(i)); - else - children = zeros(1,num_child(i)); - k = 1; - for j = 1:nnodes, - if bnet.dag(i,j) == 1, - children(1,k) = j; - k = k + 1; - end - end - format = '%i\t'; - for j = 1:num_child(i)-1, - format = strcat(format,'%i\t'); - end - format = strcat(format,'%i\n'); - %%%If there are parents: - fprintf(fileID,format,num_child(i),children(1,:)); - end - - predict = marginal_nodes(engine,i); - if bnet.node_sizes(i) ~= 1, - for j = 1:bnet.node_sizes(i), - %%%For discrete nodes, the state and the percent of that state - fprintf(fileID,'%i\t%6.4f\n',j,predict.T(j)); - end; - else - %cases(i) - % MAX(cases(i)) - % MIN(cases(i)) - [x_vals,y_vals] = calcGaussian(predict.mu,predict.Sigma,Amax(i),Amin(i)); - %%%For continuous nodes, print x and the pdf of a normal curve. - for j = 1:101, - %%Undo standardization - x_vals(j,1) = x_vals(j,1)*stdevs{i}+means{i}; - fprintf(fileID,'%6.4f\t%6.4f\n',x_vals(j,1),y_vals(j,1)); - end; - end; -end -%fprintf(fileID,'%s\t %\n',labels_temp{:}); - - -fclose(fileID); - -end - - -function [x_dim, y_dim] = canvasSize(nnodes,x,y) -%canvasSize Function to calculate the size of the canvas to -% build the network structure - - -%I am going to assume that the node size will be -% height = 150, width = 250 -% so there will be a node spacing of -% 200 (in y-dim) and 300 (in x-dim). -y_space = 200; -x_space = 300; - -%Set default minimum x and y dimensions -x_dim = 1200; -y_dim = 1200; - -%get unique y values -y_unique = unique(y); -size_y = size(y_unique,2); -y_dim_temp = size_y*y_space; - -%get the maximum nodes in any layer -size_x = zeros(1,size_y); -for i = 1:size_y, - for j = 1:nnodes, - if y_unique(i) == y(j), - size_x(1,i) = size_x(1,i) + 1; - end; - end; -end; -size_x = max(size_x); -x_dim_temp = size_x*x_space; - -if x_dim_temp > x_dim, - x_dim = x_dim_temp; -end; - -if y_dim_temp > y_dim, - y_dim = y_dim_temp; -end; -end - -function [x_vals,y_vals] = calcGaussian(mu,Sigma,maxval,minval) -%Function to calculate 101 points of Gaussian function to use in plotting -% Gets the probability density of the mean value and 50 evenly spaced -% points up to 3Sigma below the mean and 50 evenly space points up to -% 3Sigma above the mean. -%maxval -%minval -x_vals = zeros(101,1); -y_vals = zeros(101,1); - -%x_vals(1,1) = mu - 3*Sigma; -x_vals(1,1) = minval - 1; -gap=((maxval+1)-(minval - 1))/100; -%x_vals(1,1) = 0;%mu - 3*Sigma; -for i = 1:100, - % x_vals(i+1,1) = x_vals(1,1) + i*6*Sigma/100; - x_vals(i+1,1) = x_vals(i,1) + gap; - %x_vals(i+1,1) = x_vals(i,1) + 1/100; -end - -for i = 1:101, - y_vals(i,1) = normpdf(x_vals(i,1),mu,Sigma); -end - -end |
