Scale ksdensity
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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]);
0 comentarios
Respuesta aceptada
the cyclist
el 12 de Ag. de 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 comentarios
the cyclist
el 15 de Ag. de 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]);
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!