求教各位,本人研一小硕士一名,正在用MATLAB测度产业集聚DO指数,方法参考袁海红等的《产业集聚的测度及其动态变化—基于北京企业微观数据的研究》,duranton和overman的《Exploring the Detailed Location Patterns of UK Manufacturing Industries Using Microgeographic Data》,分为三个步骤(1)K-density函数(2)局部置信区间(3)全局置信区间。目前,我在进行第二步通过蒙特卡洛模拟来建立置信区间时,用命令randperm生成了随机数向量y,数据的顺序每次都发生了变化,但是每次后面模拟计算出的距离密度矩阵o,每一列与第一步一致(模拟100次,100列的结果完全一致),导致后续置信限up、down全部为0,求问为何出现这个问题,如何解决,感谢各位大神,附上我的数据、参考文献,代码如下,欢迎大家批评指正,帮助解决者小弟必有重谢:
%% DO指数
%输入矩阵b:Lats
%输出DO指数
function k=do1(b)
d=linspace(0,10,1000)';
k=linspace(0,0,1000)';
h=1; %选取
x=find(b(:,3)>0)';
n=size(b,1);
function k=gauss(d,k,h,n,b,x)
for i=1:(n-1)
for j=(i+1):n
if d-distance(b,x(i),x(j))>0
k=k+exp(-(d-distance(b,x(i),x(j))).^2./(2*h^2));
else
k=k+exp(-(distance(b,x(i),x(j))-d).^2./(2*h^2));
end
end
end
k=2*k./(n*(n-1)*h);
end
k=gauss(d,k,h,n,b,x);
plot(d,k,'LineWidth',2);
function [up,down]=Monte_Carlo(d,n,h,b)
for i=1:100 %模拟100次
m=linspace(0,0,1000)';
y=randperm(length(b(:,1)),n)';
o(:,i)=gauss(d,m,h,n,b,y);
end
up=quantile(o,0.95,2);
down=quantile(o,0.05,2);
end
[up,down]=Monte_Carlo(d,n,h,b);
plot(d,up,'--','LineWidth',2)
plot(d,down,'--','LineWidth',2);
a=linspace(0,0,500)';
c=linspace(0,0,500)';
if k-up>0
a=k-up; %集聚指数
end
fprintf('the value of a is%6.2f\n',a);
if down-k>0
c=down-k; %分散指数
end
fprintf('the value of c is%6.2f\n',c);