function Est = Poisson_KNNQuadfit(AP,DV,Expr) % Finds K nearest neighbors, then makes quadratic fit to the expression % data. K = 20; % Rescale coordinates. AP2 = AP/100; DV2 = DV/(100*2.5); % Go through each point Est = zeros(length(Expr),1); for QueryPt = 1:length(Expr) % Find Euclidean distances EucDistSqr = (AP2(QueryPt)-AP2).^2+(DV2(QueryPt)-DV2).^2; % Find K nearest nuclei [Z,I] = sort(EucDistSqr); Near = I(2:(K+1)); % Set up and solve the quadratic fit Xnear=[AP2(Near) AP2(Near).^2 DV2(Near) DV2(Near).^2 AP2(Near).*DV2(Near) ones(K,1)]; Ynear=Expr(Near); W = inv(Xnear'*Xnear)*Xnear'*Ynear; Est(QueryPt) = W(1)*AP2(QueryPt) + ... W(2)*AP2(QueryPt)^2 + ... W(3)*DV2(QueryPt) + ... W(4)*DV2(QueryPt)^2 + ... W(5)*AP2(QueryPt)*DV2(QueryPt) + ... W(6); end