Scale ksdensity

5 次查看(过去 30 天)
Susan
Susan 2011-8-12
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]);

采纳的回答

the cyclist
the cyclist 2011-8-12
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 个评论
the cyclist
the cyclist 2011-8-15
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 2011-8-15
Yeah It worked... Thank you :)

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

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

Start Hunting!

Translated by