function gpdisc(call)
% This is the machine-generated representation of a MATLAB object
% and its children. Note that handle values may change when these
% objects are re-created. This may cause problems with some callbacks.
% The command syntax may be supported in the future, but is currently
% incomplete and subject to change.
%
% To re-open this system, just type the name of the m-file at the MATLAB
% prompt. The M-file and its associtated MAT-file must be on your path.
if nargin==0, call='start'; end
switch call
case 'start'
load gpdisc
a = figure('Color',[0.8 0.8 0.8], ...
'Colormap',mat0, ...
'Name','Learning about p using discrete models', ...
'PointerShapeCData',mat1, ...
'Position',[-2 30 1028 702], ...
'Tag','Fig1');
b = axes('Parent',a, ...
'Box','on', ...
'ButtonDownFcn','gpdisc(''adjust_bars'')', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat2, ...
'NextPlot','add', ...
'Position',[0.116803 0.697039 0.727459 0.15262], ...
'Tag','prior plot', ...
'UserData',mat3, ...
'XColor',[0 0 0], ...
'XLim',[-0.1 1.1], ...
'XLimMode','manual', ...
'YColor',[0 0 0], ...
'YLim',[0 0.181818], ...
'YLimMode','manual', ...
'ZColor',[0 0 0]);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.499196 -0.0454545 0], ...
'String','p', ...
'Tag','Text1', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.169973 0.0917666 0], ...
'Rotation',90, ...
'String','prob', ...
'Tag','Text2', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.293834 0.362778 0], ...
'Tag','Text3', ...
'Visible','off');
set(get(c,'Parent'),'ZLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.499196 0.198113 0], ...
'String','PRIOR DISTRIBUTION', ...
'Tag','Text4', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','pbars', ...
'UserData',mat4, ...
'XData',mat5, ...
'YData',mat6);
b = axes('Parent',a, ...
'Units','points', ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat7, ...
'Position',[70.7586 129.724 466.759 75.7241], ...
'Tag','post plot', ...
'UserData',mat8, ...
'XColor',[0 0 0], ...
'XLim',[-0.1 1.1], ...
'XLimMode','manual', ...
'YColor',[0 0 0], ...
'YLim',[0 0.255409], ...
'YLimMode','manual', ...
'ZColor',[0 0 0]);
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','post bars', ...
'UserData',0, ...
'XData',mat9, ...
'YData',mat10);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.5 -0.0559367 0], ...
'String','p', ...
'Tag','Text5', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.155126 0.127704 0], ...
'Rotation',90, ...
'String','prob', ...
'Tag','Text6', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.281358 1.03958 0], ...
'Tag','Text7', ...
'Visible','off');
set(get(c,'Parent'),'ZLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.5 0.275462 0], ...
'String','POSTERIOR DISTRIBUTION', ...
'Tag','Text8', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
b = uicontrol('Parent',a, ...
'Units','points', ...
'Callback','gpdisc(''get_data'')', ...
'Position',[127.241 240.828 49.0345 19.2414], ...
'String','Get Data', ...
'Tag','get data', ...
'UserData',[0 0]);
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.752941 0.752941 0.752941], ...
'Position',[266.276 243.931 54 15.5172], ...
'String','s=0 f=0', ...
'Style','text', ...
'Tag','text_data', ...
'UserData',[1 1]);
b = uicontrol('Parent',a, ...
'Units','points', ...
'Callback','gpdisc(''update'')', ...
'Position',[385.448 241.448 50.2759 19.8621], ...
'String','Update', ...
'Tag','Pushbutton1', ...
'UserData',[23 100]);
b = uicontrol('Parent',a, ...
'Units','points', ...
'Callback','gpdisc(''define_prior'')', ...
'Position',[248.897 399.724 107.379 16.1379], ...
'String','Define Prior Grid', ...
'Tag','define prior', ...
'UserData',[0 1 11]);
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.752941 0.752941 0.752941], ...
'Position',[369.931 36 89.3793 50.8966], ...
'Style','text', ...
'Tag','summaries');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[1 1 1], ...
'Position',[102.414 33.5172 137.793 54], ...
'Style','listbox', ...
'Tag','list probs', ...
'Value',1);
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.752941 0.752941 0.752941], ...
'Position',[119.793 92.4828 94.9655 12.4138], ...
'String','PROBABILITY TABLE', ...
'Style','text', ...
'Tag','StaticText1');
b = uicontrol('Parent',a, ...
'Units','points', ...
'Position',[372.414 93.7241 81.3103 11.1724], ...
'String','SUMMARIES', ...
'Style','text', ...
'Tag','StaticText1');
case 'define_prior'
prompt={'Enter smallest value for p::','Enter largest value for p:',...
'Enter number of values:'};
def={'','',''};
title='Define prior grid';
lineNo=1;
answer=inputdlg(prompt,title,lineNo,def);
lo=eval(answer{1}); hi=eval(answer{2}); n=eval(answer{3}); w=hi-lo;
set(gco,'userdata',[lo hi n]);
p=linspace(lo,hi,n);
prior=1/n+0*p;
t=findobj('tag','pbars');
X=[p;p;p]; Y=[0*prior;prior;0*prior+NaN];
set(t,'ydata',Y(:));
set(t,'xdata',X(:));
t=findobj('tag','prior plot');
set(t,'xlim',[lo-w/(n-1) hi+w/(n-1)]);
set(t,'ylim',[0 2*prior(1)]);
set(t,'userdata',[p;prior]);
t=findobj('tag','post bars');
t2=findobj('tag','post plot');
pdist=get(t2,'userdata');
p=pdist(1,:);
y=[0*p;0*p;NaN+0*p];
set(t,'ydata',y(:))
set(t2,'userdata',[p;0*p]);
set(findobj('tag','summaries'),'string','')
set(findobj('tag','list probs'),'string','')
case 'get_data'
prompt={'Enter the number of successes:','Enter the number of failures:'};
def={'',''};
title='Input Binomial Data';
lineNo=1;
answer=inputdlg(prompt,title,lineNo,def);
if prod(size(answer))==2
if (length(answer{1})>0)&(length(answer{2})>0)==1
set(gco,'userdata',[eval(answer{1}),eval(answer{2})])
t=findobj('tag','text_data');
set(t,'string',['s=' answer{1} ' f=' answer{2}])
t=findobj('tag','post bars');
flag=get(t,'userdata');
if flag==1
set(t,'userdata',0)
t2=findobj('tag','post plot');
pdist=get(t2,'userdata');
p=pdist(1,:);
y=[0*p;0*p;NaN+0*p];
set(t,'ydata',y(:))
set(t2,'userdata',[p;0*p]);
set(findobj('tag','summaries'),'string','')
set(findobj('tag','list probs'),'string','')
end
end
end
case 'update'
t=findobj('tag','prior plot');
pdist=get(t,'userdata');
t=findobj('tag','get data');
data=get(t,'userdata');
post=p_disc(pdist(1,:),pdist(2,:),data);
x=ones(3,1)*pdist(1,:);
y=[0*post;post;NaN+0*post;];
t=findobj('tag','post bars');
set(t,'xdata',x(:))
set(t,'ydata',y(:))
set(t,'userdata',1)
t=findobj('tag','post plot');
t2=findobj('tag','define prior');
lohi=get(t2,'userdata');
lo=lohi(1); hi=lohi(2); w=hi-lo; n=lohi(3);
set(t,'xlim',[lo-w/(n-1) hi+w/(n-1)])
set(t,'ylim',[0 max(post)*1.1])
postdist=[pdist(1,:);post];
set(t,'userdata',postdist);
clear
t=findobj('tag','post plot');
S=c_summ(get(t,'userdata'));
set(findobj('tag','summaries'),'string',S)
set(findobj('tag','list probs'),'string', ...
num2str(get(t,'userdata')','%5.3f %5.3f'));
case 'adjust_bars'
t=findobj('tag','define prior');
lohi=get(t,'userdata');
lo=lohi(1); hi=lohi(2); n=lohi(3);
p=get(gca,'currentpoint'); % reads point at mouseclick
dx=(hi-lo)/(n-1);
x=round((p(1,1)-lo)/dx+1); % finds the closest value of p
y=p(1,2);
t=findobj('tag','prior plot');
pdist=get(t,'userdata');
pr=pdist(2,:);
pr(x)=y; % put new value of p in probability vector
pr=pr/sum(pr); % normalizes
Y=[0*pr;pr;0*pr+NaN];
prior_handle=findobj('tag','pbars');
set(t,'ylim',[0 max(pr)*1.2])
set(prior_handle,'ydata',Y(:)); % resets current ydata of line
pdist=get(t,'userdata');
p=pdist(1,:); pdist=[p;pr];
set(gca,'userdata',pdist);
t=findobj('tag','post bars');
flag=get(t,'userdata');
if flag==1
set(t,'userdata',0)
x=[p;p;NaN+p];
y=[0*p;0*p;NaN+0*p];
set(t,'xdata',x(:))
set(t,'ydata',y(:))
t=findobj('tag','post plot');
set(t,'userdata',[pdist(1,:);0*p]);
set(findobj('tag','summaries'),'string','')
set(findobj('tag','list probs'),'string','')
end
end
function S=c_summ(postdist)
mn=sum(postdist(1,:).*postdist(2,:));
sd=sqrt(sum(postdist(1,:).^2.*postdist(2,:))-mn^2);
set=disc_int(postdist',.9); lo=min(set); hi=max(set);
t=findobj('tag','summaries');
S=strvcat(['Mean = ' num2str(mn)],...
['St dev = ' num2str(sd)], ...
['90% interval: (' num2str(lo) ',' num2str(hi) ')']);