Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
gr015_smooth.C File Reference

Detailed Description

View in nbviewer Open in SWAN
Show scatter plot smoothers: ksmooth, lowess, supsmu, as described in: Modern Applied Statistics with S-Plus, 3rd Edition W.N.

Venables and B.D. Ripley Chapter 9: Smooth Regression, Figure 9.1

Example is a set of data on 133 observations of acceleration against time for a simulated motorcycle accident, taken from Silverman (1985). The data are read from motorcycle.dat (2 columns of floats)

#include "TString.h"
#include "TInterpreter.h"
#include <fstream>
#include "TH1.h"
#include "TGraphSmooth.h"
#include "TCanvas.h"
#include "TSystem.h"
TCanvas *vC1;
TGraph *grin, *grout;
void DrawSmooth(Int_t pad, const char *title, const char *xt, const char *yt)
{
vC1->cd(pad);
TH1F *vFrame = gPad->DrawFrame(0,-130,60,70);
vFrame->SetTitle(title);
vFrame->SetTitleSize(0.2);
vFrame->SetXTitle(xt);
vFrame->SetYTitle(yt);
grin->Draw("P");
grout->DrawClone("LPX");
}
void gr015_smooth()
{
// data taken from R library MASS: mcycle.txt
TString dir = gROOT->GetTutorialDir();
dir.Append("/visualisation/graphs/");
dir.ReplaceAll("/./","/");
// read file and add to fit object
Double_t *x = new Double_t[133];
Double_t *y = new Double_t[133];
Double_t vX, vY;
Int_t vNData = 0;
ifstream vInput;
vInput.open(Form("%smotorcycle.dat",dir.Data()));
while (1) {
vInput >> vX >> vY;
if (!vInput.good()) break;
x[vNData] = vX;
y[vNData] = vY;
vNData++;
}//while
vInput.close();
grin = new TGraph(vNData,x,y);
// draw graph
vC1 = new TCanvas("vC1","Smooth Regression",200,10,900,700);
vC1->Divide(2,3);
// Kernel Smoother
// create new kernel smoother and smooth data with bandwidth = 2.0
grout = gs->SmoothKern(grin,"normal",2.0);
DrawSmooth(1,"Kernel Smoother: bandwidth = 2.0","times","accel");
// redraw ksmooth with bandwidth = 5.0
grout = gs->SmoothKern(grin,"normal",5.0);
DrawSmooth(2,"Kernel Smoother: bandwidth = 5.0","","");
// Lowess Smoother
// create new lowess smoother and smooth data with fraction f = 2/3
grout = gs->SmoothLowess(grin,"",0.67);
DrawSmooth(3,"Lowess: f = 2/3","","");
// redraw lowess with fraction f = 0.2
grout = gs->SmoothLowess(grin,"",0.2);
DrawSmooth(4,"Lowess: f = 0.2","","");
// Super Smoother
// create new super smoother and smooth data with default bass = 0 and span = 0
grout = gs->SmoothSuper(grin,"",0,0);
DrawSmooth(5,"Super Smoother: bass = 0","","");
// redraw supsmu with bass = 3 (smoother curve)
grout = gs->SmoothSuper(grin,"",3);
DrawSmooth(6,"Super Smoother: bass = 3","","");
// cleanup
delete [] y;
delete gs;
}
int Int_t
Signed integer 4 bytes (int).
Definition RtypesCore.h:59
double Double_t
Double 8 bytes.
Definition RtypesCore.h:73
#define gROOT
Definition TROOT.h:417
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2496
#define gPad
The Canvas class.
Definition TCanvas.h:23
TVirtualPad * cd(Int_t subpadnumber=0) override
Set current canvas & pad.
Definition TCanvas.cxx:716
A helper class to smooth TGraph.
void Draw(Option_t *chopt="") override
Default Draw method for all objects.
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:878
virtual void SetTitleSize(Float_t size=0.02, Option_t *axis="X")
Set the axis' title size.
Definition Haxis.cxx:365
void SetTitle(const char *title) override
Change/set the title.
Definition TH1.cxx:6836
virtual void SetXTitle(const char *title)
Definition TH1.h:667
virtual void SetYTitle(const char *title)
Definition TH1.h:668
virtual TObject * DrawClone(Option_t *option="") const
Draw a clone of this object in the current selected pad with: gROOT->SetSelectedPad(c1).
Definition TObject.cxx:319
void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) override
Automatic pad generation by division.
Definition TPad.cxx:1295
Basic string class.
Definition TString.h:138
const char * Data() const
Definition TString.h:384
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition TString.h:713
TString & Append(const char *cs)
Definition TString.h:581
STL class.
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Author
Christian Stratowa, Vienna, Austria

Definition in file gr015_smooth.C.