首页 > 编程知识 正文

matlab怎么做线性回归,如何用matlab数据回归

时间:2023-05-03 06:50:02 阅读:188603 作者:3832

【实例简介】地理加权回归(GWR)matlab代码,亲测可用,该代码利用matlab实现了地理加权回归的代码,内附实际算例。

【实例截图】

【核心代码】

function result = gwr(y,x,east,north,info);

if nargin == 5 % user options

if ~isstruct(info)

fields = fieldnames(info);

nf = length(fields);

bwidth = 0; dtype = 0; q = 0; qmin = k 2; qmax = 5ysdzck;

bmin = 0.1; bmax = 20.0;

for i=1:nf

if strcmp(fields{i},'bwidth')

bwidth = info.bwidth;

if strcmp(dstring,'gaussian')

q = info.q;

qmax = info.qmax;

qmin = info.qmin;

bmin = info.bmin;

bmax = info.bmax;

bwidth = 0; dtype = 0; dstring = 'gaussian';

bmin = 0.1; bmax = 20.0;

result.north = north;

result.east = east;

if nobs ~= nobs2

switch dtype

case{0,1} % bandwidth cross-validation

if bwidth == 0 % cross-validation

options = optimset('fminbnd');

optimset('MaxIter',500);

if dtype == 0 % Gaussian weights

if output.iterations == 500,

fprintf(1,'gwr: cv convergence not obtained in %4d iterations',output.iterations);

result.iter = output.iterations;

bdwt = bwidthysdzcbwidth; % user supplied bandwidth

case{2} % q-nearest neigbhor cross-validation

if q == 0 % cross-validation

q = scoreq(qmin,qmax,y,x,east,north);

otherwise

bsave = zeros(n,k);

ssave = zeros(n,k);

yhat = zeros(n,1);

wt = zeros(n,1);

for iter=1:n;

sd = std(sqrt(d));

if dtype == 2, dmax = ds(q,1); end;

if dtype == 0, % Gausian weights

wt = stdn_pdf(sqrt(d)/(sdysdzcbdwt));

wt = exp(-d/bdwt);

wt = zeros(n,1);

nzip = find(d <= dmax);

wt(nzip,1) = (1-(d(nzip,1)/dmax).^3).^3;

wt = sqrt(wt);

nzip = find(wt >= 0.01);

ys = y(nzip,1).ysdzcwt(nzip,1);

xs = matmul(x(nzip,:),wt(nzip,1));

xpxi = invpd(xs'ysdzcxs);

b = xpxiysdzcxs'ysdzcys;

yhat(iter,1) = x(iter,:)ysdzcb;

nadj = length(nzip);

sdb = sqrt(sigeysdzcdiag(xpxi));

bsave(iter,:) = b';

ssave(iter,:) = sdb';

result.meth = 'gwr';

result.nobs = nobs;

result.nvar = nvar;

if (dtype == 0 | dtype == 1)

result.bwidth = sqrt(bdwt);

result.q = q;

result.beta = bsave;

result.tstat = bsave./ssave;

result.sige = sigv;

result.dtype = dstring;

result.y = y;

result.yhat = yhat;

result.resid = resid;

ym = y - mean(y);

rsqr1 = sigu;

rsqr2 = ym'ysdzcym;

result.rsqr = 1.0 - rsqr1/rsqr2; % r-squared

rsqr1 = rsqr1/(nobs-nvar);

rsqr2 = rsqr2/(nobs-1.0);

result.rbar = 1 - (rsqr1/rsqr2); % rbar-squared

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。