diff rDiff/src/locfit/m/lfplot.m @ 0:0f80a5141704

version 0.3 uploaded
author vipints
date Thu, 14 Feb 2013 23:38:36 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rDiff/src/locfit/m/lfplot.m	Thu Feb 14 23:38:36 2013 -0500
@@ -0,0 +1,104 @@
+function lfplot(varargin)
+ 
+% Plot (for one or two dimensions) a locfit() fit.
+%
+% Usage:
+%   fit = locfit(x,y);
+%   lfplot(fit);
+%
+% Plot the fitted smooth curve, and add a scatterplot of the data.
+%
+% Required argument:
+%   fit  (produced by locfit()).
+%
+% Optional arguments:
+%   'nodata'  - don't add data to plot.
+%   'contour' - for 2-d predictors, use contour instead of surf.
+%   'direct'  - fit directly, instead of using interpolation
+%               (see the predict() function).
+%   'what'    - locfit what argument ('coef', 'infl', 'vari', 'band' etc).
+%   Any additional arguments are passed to Matlab's plot(), contour()
+%     or surf() function as appropriate.
+%
+% To add confidence bands, use the lfband() function.
+%
+% Author: Catherine Loader.
+
+fit = varargin{1};
+data = fit.data;
+xdata = data.x;
+n = size(xdata,1);
+d = size(xdata,2);
+fali = fit.fit_points.family_link;
+ydata = data.y;
+wdata = data.weights;
+cdata = data.censor;
+if (length(cdata)==1) cdata = zeros(n,1); end;
+showdata = (fit.evaluation_structure.derivative==0);
+ppargs = {};
+plotargs = {};
+
+type = 's';
+na = 2;
+while na <= length(varargin)
+  inc = 0;
+  if (strcmp(varargin{na},'contour'))
+    type = 'c';
+    inc = 1;
+  end;
+  if (strcmp(varargin{na},'what'))
+    ppargs = {ppargs{:}, 'what', varargin{na+1}};
+    showdata = 0;
+    inc = 2;
+  end;
+  if (strcmp(varargin{na},'nodata'))
+    showdata = 0;
+    inc = 1;
+  end;
+  if (strcmp(varargin{na},'direct'))
+    ppargs = {ppargs{:} 'direct'};
+    inc = 1;
+  end;
+  if (inc==0)
+    plotargs = {plotargs{:} varargin{na}};
+    inc = 1;
+  end;
+  na = na+inc;
+end;
+
+xfit = lfmarg(fit);
+yfit = predict(fit,xfit,ppargs{:});
+yfit = invlink(yfit,fali);
+fam = mod(fali(1),64);
+if (fam>4)
+  ydata = ydata ./ wdata;
+end;
+
+if (d==1)
+  plot(xfit{1},yfit,plotargs{:});
+  if (showdata)
+    hold on;
+    if (length(ydata)==1) ydata = zeros(n,1); end;
+    plotbyfactor(xdata,ydata,cdata);
+    hold off;
+  end;
+end;
+
+if (d==2)
+  x1 = xfit{1};
+  x2 = xfit{2};
+  yfit = reshape(yfit,length(x1),length(x2));
+  if (type=='c')
+    [C h] = contour(x1,x2,yfit',plotargs{:});
+    clabel(C,h);
+    if (showdata)
+      hold on;
+      plotbyfactor(xdata(:,1),xdata(:,2),cdata);
+      hold off;
+    end;
+  else
+    surf(x1,x2,yfit',plotargs{:});
+  end;
+end;
+
+return;