楼主: ywh19860616
19059 101

[问答] R程序改写为matlab程序 [推广有奖]

11
ywh19860616 发表于 2011-10-31 20:15:30
epoh老师,我想显示出在Getis程序中的E(G(i)),但是总是显示最后一个,而前面的都为0。

form=1:N; % compute EGi(d)
for n=1:N
  if n==m
     WI=WI;
  else
     WI=WI+Wij(m,n);
  end
end %end for
EG(m)=WI/(N-1);

我把最后面的一句改为如下循环,也出不来想要结果
for m=1:N
EG(m)=WI/(N-1);
end
EG



Getis
GI =
    0.0847
    0.1061
    0.1861
    0.2221
    0.2074
    0.1125
    0.1555
    0.1262

ZG =
    5.3371
    6.6847
   11.7238
   13.9902
   13.0668
    7.0897
    9.7949
   -1.0495

EG =
         0
         0
         0
         0
         0
         0
         0
    0.1429

EG不应该前面都为0的,我不知道如何取出前面的循环结果


一份耕耘,一份收获。

12
epoh 发表于 2011-10-31 21:00:12

哈哈!抱歉!抱歉!

不是你的错

是我的错!

copy 过来的时候,产生的错误

   Getis_revised.rar (531 Bytes) 本附件包括:

  • Getis_revised.m

%%%%%%%%result
Xij =

         0   26.3976   46.9654   64.7889   62.6534   36.7131   43.1493   30.9348
   26.3976         0   20.6691   38.3926   39.3141   50.1330   25.8122   29.2114
   46.9654   20.6691         0   18.0368   28.1406   67.6762   28.9354   43.4492
   64.7889   38.3926   18.0368         0   24.4042   82.0487   37.9407   56.7230
   62.6534   39.3141   28.1406   24.4042         0   68.3261   22.4538   43.2943
   36.7131   50.1330   67.6762   82.0487   68.3261         0   46.2011   25.5506
   43.1493   25.8122   28.9354   37.9407   22.4538   46.2011         0   20.8906
   30.9348   29.2114   43.4492   56.7230   43.2943   25.5506   20.8906         0


Wij =

     0     1     0     0     0     0     0     0
     1     0     1     0     0     0     1     0
     0     1     0     1     0     0     0     0
     0     0     1     0     1     0     0     0
     0     0     0     1     0     0     1     0
     0     0     0     0     0     0     0     1
     0     1     0     0     1     0     0     1
     0     0     0     0     0     1     1     0


GI =

    0.0847
    0.3160
    0.3446
    0.4441
    0.4336
    0.1125
    0.4470
    0.2845


EG =

    0.1429
    0.4286
    0.2857
    0.2857
    0.2857
    0.1429
    0.4286
    0.2857


VarG =

  1.0e-003 *

    0.2520
    0.5039
    0.4199
    0.4199
    0.4199
    0.2520
    0.5039
    0.4199


ZG =

   -3.6629
   -5.0163
    2.8722
    7.7309
    7.2155
   -1.9103
    0.8188
   -0.0571


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 呵呵,epoh老师,我大意了,其实最后面我改.

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

13
ywh19860616 发表于 2011-10-31 21:09:40
呵呵,谢谢epoh老师了,又帮忙解决了一个难题
我只看到了最后部分漏了一些语句,没有注意中间了
运行也没有出错,也就没有注意找了

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
epoh + 1 + 1 + 1 潜心学习,追根究底

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

一份耕耘,一份收获。

14
ywh19860616 发表于 2012-5-9 14:16:00
epoh 发表于 2011-10-31 21:00
哈哈!抱歉!抱歉!不是你的错是我的错!copy 过来的时候,产生的错误  %%%%%%%%result
Xij =         0   26.3 ...
epoh老师,您好
我想请教您下面的程序应该如何传递参数的?
在您帮忙编写的Getis_revised:
function [GI,ZG,ZZ]=Getis(Wij,Xij)
在您基础上,我加了最后一句计算ZZ的ZZ=sum(abs(ZG))
根据这个函数function [GI,ZG,ZZ]=Getis(Wij,Xij),我需要输入Wij和Xij。现在我想实现如下操作,即这里的Wij是可以有多种取值的,然后根据哪个Wij得出的ZZ值最大,选得最终的Wij。
比如我先用下面程序计算多个Wij:
load ct_data
dista = GeogDistance(yc,xc);
for nn=1:28
    Wij=exp(-nn*dista);
end
Wij

那么如何传递到function [GI,ZG,ZZ]=Getis(Wij,Xij)?


% GeogDistance(yc,xc) 这个函数是您上传的distance_wm.m里面一部分。



一份耕耘,一份收获。

15
epoh 发表于 2012-5-9 15:41:57
ywh19860616 发表于 2012-5-9 14:16
epoh老师,您好
我想请教您下面的程序应该如何传递参数的?
在您帮忙编写的Getis_revised:
load ct_data    % Load Connecticut county latitude and longitude coordinates
                      % 8 counties in all
                      % http://en.wikipedia.org/wiki/List_of_counties_in_Connecticut

result = distance_wm(yc,xc);   % Make sure that you enter latitude and longitude
                                               % in that order
Xij=result.dista                 % This martrix contains the pairwise distances
Wij=result.dw                  % This matrix contains the connectivity structure
                                       % 1 = neighbor, 0 = not a neighbor   
[GI,ZG]=Getis(Wij,Xij)

%%%%%%
dista = GeogDistance(yc,xc);
for nn=1:28
     WWij=exp(-nn*dista);
end
WWij
   
[GGI,ZZG,ZZ]=Getis1(WWij,Xij)  %ZZ=sum(abs(ZG))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 谢谢

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

16
ywh19860616 发表于 2012-5-9 16:06:42
epoh 发表于 2012-5-9 15:41
load ct_data    % Load Connecticut county latitude and longitude coordinates
                     ...
epoh老师,您上面的[GGI,ZZG,ZZ]=Getis1(WWij,Xij)作了哪些修改吗?
我运行下面程序只得到一个ZZ值

load ct_data
result = distance_wm(yc,xc);
Xij=result.dista;
dista = GeogDistance(yc,xc);
for nn=1:28
     WWij=exp(-nn*dista);
end
WWij
[GGI,ZZG,ZZ]=Getis_revised(WWij,Xij)
一份耕耘,一份收获。

17
epoh 发表于 2012-5-9 16:17:02
ywh19860616 发表于 2012-5-9 16:06
epoh老师,您上面的[GGI,ZZG,ZZ]=Getis1(WWij,Xij)作了哪些修改吗?
我运行下面程序只得到一个ZZ值
呵呵,补充一下
Getis_revised我更名为Getis

Getis1就是在Getis_revised最后加一句ZZ=sum(abs(ZG))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 谢谢epoh老师,我再斟酌下

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

18
ywh19860616 发表于 2012-5-9 16:24:06
epoh 发表于 2012-5-9 16:17
呵呵,补充一下
Getis_revised我更名为Getis
恩,谢谢epoh老师。不知道为何我运行16楼的程序只得出对应一个Wij的结果。
一份耕耘,一份收获。

19
epoh 发表于 2012-5-9 16:43:56
ywh19860616 发表于 2012-5-9 16:24
恩,谢谢epoh老师。不知道为何我运行16楼的程序只得出对应一个Wij的结果。
Getis_ZZ.rar (4.12 KB)
load ct_data   

result = distance_wm(yc,xc);   
Xij=result.dista              
Wij=result.dw                 
                              
[GI,ZG]=Getis(Wij,Xij)

%%%%%%
dista = GeogDistance(yc,xc);
for nn=1:28
     WWij=exp(-nn*dista);
end
WWij
   
[GGI,ZZG,ZZ]=Getis1(WWij,Xij)  %ZZ=sum(abs(ZG))


%%%%%%%%%%%
Xij =

         0   26.3976   46.9654   64.7889   62.6534   36.7131   43.1493   30.9348
   26.3976         0   20.6691   38.3926   39.3141   50.1330   25.8122   29.2114
   46.9654   20.6691         0   18.0368   28.1406   67.6762   28.9354   43.4492
   64.7889   38.3926   18.0368         0   24.4042   82.0487   37.9407   56.7230
   62.6534   39.3141   28.1406   24.4042         0   68.3261   22.4538   43.2943
   36.7131   50.1330   67.6762   82.0487   68.3261         0   46.2011   25.5506
   43.1493   25.8122   28.9354   37.9407   22.4538   46.2011         0   20.8906
   30.9348   29.2114   43.4492   56.7230   43.2943   25.5506   20.8906         0


Wij =

     0     1     0     0     0     0     0     0
     1     0     1     0     0     0     1     0
     0     1     0     1     0     0     0     0
     0     0     1     0     1     0     0     0
     0     0     0     1     0     0     1     0
     0     0     0     0     0     0     0     1
     0     1     0     0     1     0     0     1
     0     0     0     0     0     1     1     0


GI =

    0.0847
    0.3160
    0.3446
    0.4441
    0.4336
    0.1125
    0.4470
    0.2845


ZG =

   -3.6629
   -5.0163
    2.8722
    7.7309
    7.2155
   -1.9103
    0.8188
   -0.0571


WWij =

    1.0000    0.0000         0         0         0         0         0         0
    0.0000    1.0000    0.0000         0         0         0    0.0000         0
         0    0.0000    1.0000    0.0000         0         0         0         0
         0         0    0.0000    1.0000    0.0000         0         0         0
         0         0         0    0.0000    1.0000         0    0.0000         0
         0         0         0         0         0    1.0000         0    0.0000
         0    0.0000         0         0    0.0000         0    1.0000    0.0000
         0         0         0         0         0    0.0000    0.0000    1.0000



GGI =

  1.0e-219 *

    0.0000
    0.0000
    0.1141
    0.0887
    0.0000
    0.0000
    0.0000
    0.0000


ZZG =

  1.0e-108 *

      -Inf
    0.0000
    0.1284
    0.0597
    0.0000
   -0.0000
   -0.0000
    0.0000


ZZ =

   Inf
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 1 + 1 + 1 epoh老师,抱歉,我没有说清楚问题,谢谢

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

20
ywh19860616 发表于 2012-5-9 18:34:52
epoh 发表于 2012-5-9 16:43
load ct_data   

result = distance_wm(yc,xc);
呵呵,epoh老师,非常抱歉,可能我没有说清楚问题。
您上面的程序得出的还只是一个ZZ值,而我想要的其实是根据多个WWij(i,j)计算出多个ZZ值,然后再取sum(abs(ZZ))最大值所对应的那个WWij(i,j)。

而我WWij的生成公式为:
WWij(i,j)=exp(-k*dista(i,j))   %其中dista(i,j)就是dista = GeogDistance(yc,xc); 而我这里变化k,所以WWij(i,j)应该是多个的。

计算出WWij(i,j)后再传递到函数Getis_revised(WWij(jj),Xij),这样每个WWij(i,j)都可以得到ZZ值的。

一份耕耘,一份收获。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 16:08