No BSD License  

Highlights from
Ordinal Data Modeling

image thumbnail
from Ordinal Data Modeling by Valen Johnson
Companion Software

gpdisc(call)
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) ')']);       

Contact us at files@mathworks.com