Mercurial > repos > vipints > rdiff
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;