|
提供一个matlab的程序,附件data.mat表示实际数据,result.mat表示运行结果
load data.mat
N=20;
x1=data(:,1)';
y=data(:,2)';
[p,~]=size(x1);
Beta1=zeros(2,N);
Betakernel1=zeros(2,N);
%------------cv格子点带宽选择
for t=1:1000
h1=t*1;
for i=1:N
xstar1=x1(:,i);
W1=zeros(1,N);
for j=1:N
W1(1,j)=exp(-(x1(1,j)-xstar1(1))^2/(2*h1(1)^2));
end
W1(i)=[];
W=diag(W1);
X1=[ones(N,1),x1'-xstar1];
X1(i,:)=[];
Xkernel=ones(N,1);
Xkernel(i)=[];
ytemp=y;
ytemp(i)=[];
Beta1(:,i)=(X1'*W*X1)\X1'*W*ytemp';%------局部线性估计
% Betakernel1(:,i)=(Xkernel'*W*Xkernel)\Xkernel'*W*ytemp';%----------局部核估计
end
yhat1=Beta1(1,:);
MSECV(t)=(yhat1-y)*(yhat1-y)'/N;
end
h1=find(MSECV==min(MSECV));%----------最优带宽
for i=1:N
xstar1=x1(:,i);
W1=zeros(N,N);
for j=1:N
W1(j,j)=exp(-(x1(1,j)-xstar1(1))^2/(2*h1(1)^2));
end
X1=[ones(N,1),x1'-xstar1];
Xkernel=ones(N,1);
Beta1(:,i)=(X1'*W1*X1)\X1'*W1*y';%------------局部线性估计
%Betakernel1(:,i)=(Xkernel'*W1*Xkernel)\Xkernel'*W1*y';%----------局部核估计
end
yhat1=Beta1(1,:);
MSENRR1=(yhat1-y)*(yhat1-y)'/N;
plot(x1,y,'*',x1,yhat1,'-')
|