Scale ksdensity

5 visualizzazioni (ultimi 30 giorni)
Susan
Susan il 12 Ago 2011
Hello everyone.. I have data on my X-axis I import it from a file and I am trying to estimate the kernel function for it.. I believe the code for the kernel is right but I only can see my data(red) and not the kernel but I can see a blue line on the axes and I think its the kernel but not scaled .. I did the scaling for the data but don't know how to scale the ksdensity. I don't know how can you scale two different plots using axes? or is there another way I can make the kernel visible in my plot?
work = importdata('data.dat');
x = work(:,1);
X = (x).';
a= min(X);
b=max(X);
[xi,f]=ksdensity(X);
plot(f,xi);line(repmat(X,2,1),repmat([0;1],1,length(X)),'color','r' );axis([a b 0 40]);

Risposta accettata

the cyclist
the cyclist il 12 Ago 2011
The output of ksdensity() is scaled so that the area under the curve is equal to 1, which is conventional for a probability density function. Using your notation, this means that
sum(xi.*diff([0,f]))
will be approximately 1.
If you want your red lines to be about the same height as the curve, you will need to multiply one or the other before plotting. For example, use the following line to use shorter red lines. (I also commented out your manual rescaling.)
plot(f,xi);line(repmat(X,2,1),repmat([0;0.01],1,length(X)),'color','r' );%axis([a b 0 40]);
If you really want to use two different scales, then you can use the plotyy() command.
  5 Commenti
the cyclist
the cyclist il 15 Ago 2011
I meant that you should use my repmat() command INSTEAD OF YOURS:
work = importdata('data.dat');
x = work(:,1);
X = (x).';
a= min(X);
b=max(X);
[xi,f]=ksdensity(X);
plot(f,xi);
line(repmat(X,2,1),repmat([0;0.1*max(xi)],1,length(X)),'color','r' );
% axis([a b 0 40]);
Susan
Susan il 15 Ago 2011
Yeah It worked... Thank you :)

Accedi per commentare.

Più risposte (0)

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by