全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2012-5-11 09:03:22
ywh19860616 发表于 2012-5-10 23:18
epoh老师,就是distance_wm函数的返回结果的results.W
%          results.dista = (n x n) matrix of  ...
standardized weight matrix
可以 Wij=normw(result.dw)
也可以 Wij=full(result.W)
Wij =

         0    1.0000         0         0         0         0         0         0
    0.3333         0    0.3333         0         0         0    0.3333         0
         0    0.5000         0    0.5000         0         0         0         0
         0         0    0.5000         0    0.5000         0         0         0
         0         0         0    0.5000         0         0    0.5000         0
         0         0         0         0         0         0         0    1.0000
         0    0.3333         0         0    0.3333         0         0    0.3333
         0         0         0         0         0    0.5000    0.5000         0

ZZmat的每行都分别找出一个最大值及其对应位置

ZZmat =

   10.5321   13.1748   14.1048   14.1081   13.5731   12.7366   11.7508   10.7131    9.6844
    7.0585    8.2455    8.2969    7.8566    7.2101    6.5026    5.8074    5.2754    4.7729
   14.8975   18.3559   19.4375   19.3021   18.4963   17.3349   16.0100   14.6396   13.2945
   16.2223   19.8581   20.8892   20.6055   19.6146   18.2636   16.7615   15.2342   13.7550
   13.6478   16.6916   17.5135   17.2049   16.2868   15.0609   13.7105   12.3468   11.0344
   13.8836   16.9895   17.8799   17.6583   16.8396   15.7157   14.4612   13.1810   11.9363
    7.5528    8.9430    9.1190    8.7473    8.1289    7.4203    6.7042    6.0220    5.3923
   10.1812   13.0251   14.2785   14.6337   14.4292   13.8759   13.1149   12.2428   11.3248

Indexmat=zeros(n1,3)
for i =1:n1
Indexmat(i,1)=i;
index=find(ZZmat(i,:)==max(ZZmat(i,:)));
Indexmat(i,2)=ZZmat(i,index);
Indexmat(i,3)=index;
end
Indexmat
Indexmat =

    1.0000   14.1081    4.0000
    2.0000    8.2969    3.0000
    3.0000   19.4375    3.0000
    4.0000   20.8892    3.0000
    5.0000   17.5135    3.0000
    6.0000   17.8799    3.0000
    7.0000    9.1190    3.0000
    8.0000   14.6337    4.0000


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 09:16:16
epoh 发表于 2012-5-11 09:03
standardized weight matrix
可以 Wij=normw(result.dw)
也可以 Wij=full(result.W)
epoh老师,如何根据indexmat取出对应的WW?
计算类比于您之前的程序:
index=find(ZZmat==max(ZZmat))
WW;
WW(:,:,index)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 09:54:50
ywh19860616 发表于 2012-5-11 09:16
epoh老师,如何根据indexmat取出对应的WW?
计算类比于您之前的程序:
index=find(ZZmat==max(ZZmat))
...
index   1              2              3             4             5             6              7            8          9
ZZmat =
   10.5321   13.1748   14.1048   14.1081   13.5731   12.7366   11.7508   10.7131    9.6844
    7.0585      8.2455    8.2969    7.8566    7.2101    6.5026    5.8074    5.2754    4.7729
   14.8975   18.3559   19.4375   19.3021   18.4963   17.3349   16.0100   14.6396   13.2945
   16.2223   19.8581   20.8892   20.6055   19.6146   18.2636   16.7615   15.2342   13.7550
   13.6478   16.6916   17.5135   17.2049   16.2868   15.0609   13.7105   12.3468   11.0344
   13.8836   16.9895   17.8799   17.6583   16.8396   15.7157   14.4612   13.1810   11.9363
    7.5528      8.9430    9.1190    8.7473    8.1289    7.4203    6.7042    6.0220    5.3923
   10.1812   13.0251   14.2785   14.6337   14.4292   13.8759   13.1149   12.2428   11.3248

以 20.8892  而言,index=3,row=4
w=WW(:,:,3)

w =

         0    0.4530    0.2444    0.1432    0.1527    0.3324    0.2740    0.3953
    0.4530         0    0.5379    0.3161    0.3075    0.2222    0.4610    0.4163
    0.2444    0.5379         0    0.5821    0.4299    0.1313    0.4198    0.2716
    0.1432    0.3161    0.5821         0    0.4809    0.0853    0.3204    0.1824
    0.1527    0.3075    0.4299    0.4809         0    0.1288    0.5099    0.2729
    0.3324    0.2222    0.1313    0.0853    0.1288         0    0.2501    0.4646
    0.2740    0.4610    0.4198    0.3204    0.5099    0.2501         0    0.5343
    0.3953    0.4163    0.2716    0.1824    0.2729    0.4646    0.5343         0

[GGI,ZZG,ZZ]=Getis1(w,Xij(4,:));

ZZ =

   20.8892
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 10:52:34
epoh 发表于 2012-5-11 09:54
index   1              2              3             4             5             6              7 ...
谢谢epoh老师,您帮我看看这组数据运行出来,结果怎么那么规则?ZZmat都是取index=1.
matlabgdp.rar
大小:(4.69 KB)

 马上下载

本附件包括:

  • matlabgdp.xls




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 13:35:43
ywh19860616 发表于 2012-5-11 10:52
谢谢epoh老师,您帮我看看这组数据运行出来,结果怎么那么规则?ZZmat都是取index=1.
k=0.001:0.0001:0.01;

Indexmat =

    1.0000  274.6621    9.0000
    2.0000  271.1349   11.0000
    3.0000  282.2235   10.0000
    4.0000  294.7052   10.0000
    5.0000  301.2425   10.0000
    6.0000  311.9920   10.0000
    7.0000  313.2310   10.0000
    8.0000  314.0864   10.0000
    9.0000  316.2142   10.0000
   10.0000  320.7848   10.0000
   11.0000  323.7873   10.0000
   12.0000  327.2808   10.0000
   13.0000  330.9869   10.0000
   14.0000  336.4303   10.0000
   15.0000  341.2426   10.0000
   16.0000  347.1257   10.0000
   17.0000  348.0858   10.0000
   18.0000  346.6951    9.0000
   19.0000  343.6775    9.0000
   20.0000  341.8841    9.0000
   21.0000  337.0383    9.0000
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 14:08:30
epoh 发表于 2012-5-11 13:35
k=0.001:0.0001:0.01;

Indexmat =
恩,我试下了,的确会因为k取值点不同,结论出来很大不同。
哈哈,epoh老师,文献上说k取值是0 到 无穷大,这样的话,那运行就有困难了。尝试了几组,如果k小于1,一般运行都没有问题,但是k=0.01:0.01:2.01,就会出现错误:

Warning: Divide by zero.
> In Getis_revised at 68
  In epohone at 28


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 16:06:35
ywh19860616 发表于 2012-5-11 14:08
恩,我试下了,的确会因为k取值点不同,结论出来很大不同。
哈哈,epoh老师,文献上说k取值是0 到 无穷大 ...
这两天我仔细再看一下文献
的确感觉有点怪
程序我再对照文献一遍
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 15:47:35
ywh19860616 发表于 2012-5-11 14:08
恩,我试下了,的确会因为k取值点不同,结论出来很大不同。
哈哈,epoh老师,文献上说k取值是0 到 无穷大 ...
哈哈,14 楼你给的公式应该有误
dista = GeogDistance(yc,xc);
for nn=1:28
     Wij=exp(-nn*dista);
end

Spatial Filtering with EViews and MATLAB.pdf
PAGE 2/10,

Wij = exp(-k*d(ij))
      %where dij is FRACTIONAL distance with dij = 1
      %for the maximum pairwise distance
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 16:00:33
epoh 发表于 2012-5-12 15:47
哈哈,14 楼你给的公式应该有误
dista = GeogDistance(yc,xc);
for nn=1:28
epoh老师,两篇主要参考文献上传了,14楼公式我好想就是安装Badinger-Regional convergence in the European Union一文的
3.1 Spatial Filtering  公式(3.4)
Getis1里面计算公式主要来自第二篇文献The Analysis of Spatial Association by Use of Distance Statistics。
请您帮忙看看。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 16:19:01

epoh老师,已经上传文献。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 16:41:20
ywh19860616 发表于 2012-5-12 16:00
epoh老师,两篇主要参考文献上传了,14楼公式我好想就是安装Badinger-Regional convergence in the Europ ...
我刚试了,修改后
k=300,都没问题
只要改两行

dista = GeogDistance(yc,xc);
d=max(max(dista))

WWij(i,j)=exp((-k(s)/d)*dista(i,j));
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 20:25:11
epoh 发表于 2012-5-12 16:41
我刚试了,修改后
k=300,都没问题
只要改两行
epoh老师,恩,我理解您说的,可是,从40楼上传的文献,作者好像并未提到W需要那样的结构。
with dij denoting the geographical distance between the centres of the regions i and  j.
很多文章直接通过threshold distance d,来确定Wij(d),即在d范围内,Wij取1,在d范围外,Wij取0.
附件这篇文章即是,也是提出spatial filtering较原始的。里面提到了Getis1里面程序详细步骤。

spatial statistics.rar
大小:(1.12 MB)

 马上下载

本附件包括:

  • spatial statistics.pdf




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 21:33:01
ywh19860616 发表于 2012-5-12 20:25
epoh老师,恩,我理解您说的,可是,从40楼上传的文献,作者好像并未提到W需要那样的结构。
with dij ...
两个d是不同的
第一个 d :threshold distance d
在 distance_wm.m 就用上了
dista = GeogDistance(lat,long);      % Create pairwise distance matrix
temp1 = sort(dista);                 % Sort the distance matrix (1st row will be zeros)
temp2 = temp1(2:end,:);              % Grab the second through nth row
temp3 = min(temp2);                  % Find minimum values of all columns
d = max(temp3);                      % Find largest minimum value and use that as d
% d = user specified distance for cutoff
% e.g. d = 10 would indicate a 10 mile distance cutoff
dw = dista;
[n k] = size(dw);
for i = 1:n
    for j = 1:n
        if (dw(i,j)==0)
            dw(i,j)=0;
        elseif (dw(i,j)<=d);
            dw(i,j)=1;
        else
            dw(i,j)=0;
        end
    end
end
W = sparse(normw(dw));

第二个 d : d=max(max(dista))   %82.0487
主要是用来转换成FRACTIONAL distance matrix
with dij = 1 for the maximum pairwise distance
dista
dista =
         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
dista/d
ans =
         0    0.3217    0.5724    0.7896    0.7636    0.4475    0.5259    0.3770
    0.3217         0    0.2519    0.4679    0.4792    0.6110    0.3146    0.3560
    0.5724    0.2519         0    0.2198    0.3430    0.8248    0.3527    0.5296
    0.7896    0.4679    0.2198         0    0.2974    1.0000    0.4624    0.6913
    0.7636    0.4792    0.3430    0.2974         0    0.8328    0.2737    0.5277
    0.4475    0.6110    0.8248    1.0000    0.8328         0    0.5631    0.3114
    0.5259    0.3146    0.3527    0.4624    0.2737    0.5631         0    0.2546
    0.3770    0.3560    0.5296    0.6913    0.5277    0.3114    0.2546         0

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 22:06:55
epoh 发表于 2012-5-12 21:33
两个d是不同的
第一个 d :threshold distance d
在 distance_wm.m 就用上了
是的,epoh老师,我也觉得您现在提到的比较合理。哈哈,那我感觉40楼的文献叙述的有问题,的确提到了
dij denoting the geographical distance between the centres of the regions i and  j.
且没有说明要转换成转换成FRACTIONAL distance matrix

谢谢epoh老师,我再仔细看下原文,然后再请教您。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 22:23:43
ywh19860616 发表于 2012-5-12 22:06
是的,epoh老师,我也觉得您现在提到的比较合理。哈哈,那我感觉40楼的文献叙述的有问题,的确提到了
di ...
底下dist_wts.m
我觉得应该对你有帮助
dist_wts.rar
大小:(2.06 KB)

 马上下载

本附件包括:

  • dist_wts.m



exponential gravity-model form
    Wij = exp(-a d(ij))

power gravity-model form
    Wij = d(ij)^(-a)

double-power form
    Wij = [1 - (dij/b)^k]^k , dij <= b
                       = 0  ,  dij > b

      where b is a bandwidth for the function, and
      where k is a positive integer power (usually k = 2 or higher)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 23:23:22
是的,这个资料很全,谢谢epoh老师
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 08:50:53
epoh 发表于 2012-5-12 22:23
底下dist_wts.m
我觉得应该对你有帮助
epoh老师,想请教下您,您那里运行出来的结果indexmat如何?我这里还是非常规则。
k=0.001:0.001:0.01;

Indexmat =

    1.0000   22.9703   10.0000
    2.0000   22.4016   10.0000
    3.0000   23.1407   10.0000
    4.0000   24.0234   10.0000
    5.0000   24.4507   10.0000
    6.0000   25.4244   10.0000
    7.0000   25.7352   10.0000
    8.0000   25.7857   10.0000
    9.0000   25.9833   10.0000
   10.0000   26.3326   10.0000
   11.0000   26.4050   10.0000
   12.0000   26.6748   10.0000
   13.0000   27.0254   10.0000
   14.0000   27.4590   10.0000
   15.0000   27.9593   10.0000
   16.0000   28.4113   10.0000
   17.0000   28.4975   10.0000
   18.0000   28.5247   10.0000
   19.0000   28.3209   10.0000
   20.0000   28.4200   10.0000
   21.0000   28.0158   10.0000

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 09:43:17
就你的数据而言
落点在k=3:0.01:5;
Indexmat =

    1.0000  274.6959   92.0000
    2.0000  271.1351  146.0000
    3.0000  282.2302  119.0000
    4.0000  294.7071  121.0000
    5.0000  301.2764  132.0000
    6.0000  312.0266  132.0000
    7.0000  313.2366  119.0000
    8.0000  314.0910  120.0000
    9.0000  316.2186  120.0000
   10.0000  320.7879  120.0000
   11.0000  323.7873  123.0000
   12.0000  327.2818  124.0000
   13.0000  330.9873  124.0000
   14.0000  336.4309  124.0000
   15.0000  341.2427  123.0000
   16.0000  347.1262  124.0000
   17.0000  348.0859  124.0000
   18.0000  346.6988  103.0000
   19.0000  343.6780  102.0000
   20.0000  341.8913   97.0000
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 09:47:06
epoh 发表于 2012-5-13 09:43
就你的数据而言
落点在k=3:0.01:5;
Indexmat =
epoh老师,谢谢
您是如何试出来的?这里面有没有规律。
比如要求k属于0到无穷,我们运行不可能这样去设置,所以发现这个是很重要的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 11:24:20
ywh19860616 发表于 2012-5-13 09:47
epoh老师,谢谢
您是如何试出来的?这里面有没有规律。
比如要求k属于0到无穷,我们运行不可能这样去设 ...
这个很简单,先设
k=1:1:100
假设index都是1,表示下回试 0.1:0.01:1

假设index都是100,表示下回试 100:1:200

假设index在10附近,表示下回试 8:0.01:12

两三次之后,就可抓到最适点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 12:10:41
epoh 发表于 2012-5-13 11:24
这个很简单,先设
k=1:1:100
假设index都是1,表示下回试 0.1:0.01:1
谢谢,这个方法很好。
epoh老师,请您抽空再帮我看下一段类似功能的R 程序。这里的主要区别是矩阵生成机制不同,这里我想根据这样一个原则。给定一个门限值d,若d(i,j)>d,d(i,j)=1,若小于1,d(i,j)=0。而我给的不同的d,可以得到不同的权重矩阵。这里为什么选择用R,是因为R里面有一个moranI函数可以计算moran指数。我根据您编写的matlab修改,但是总不能出结果。

yc=as.numeric(t(c(40.16304,39.28829,39.53356,37.56977,44.08654,41.29838,43.6616,47.84179,31.16541,32.98073,29.16594,32.98073,26.07515,27.60815,36.32174,33.87427,30.96772,27.60539,23.35067,23.83548,19.19263,30.61157,26.8115,24.97481,35.20325,37.8208,35.74278,37.26806,41.11203)));
xc=as.numeric(t(c(116.38513,117.30503,116.08708,112.26255,113.89869,122.56549,126.14836,127.72512,121.39731,119.4195,120.02307,119.4195,117.96558,115.69939,118.10671,113.58064,112.23893,111.69403,113.40108,108.78058,109.74489,102.72802,106.87227,101.4963,108.85362,100.93231,96.02154,106.15805,85.20092)));
data<-read.csv('data1.csv')
p<-nrow(data)
LL<-cbind(xc,yc)
dista<-rdist.earth(LL)
d = seq(10,200,10)
s<-length(d)
dw<-dista
n<-ncol(dw)
WW<-matrix(0,n,n,s)
for (p in 1:s){
WW<-matrix(0,n,n)
for (i in 1:n){
    for (j in 1:n) {
        if (dw(i,j)==0)
            dw(i,j)<-0
        else if (dw(i,j)<=d(s))
            dw(i,j)<-1
        else
            dw(i,j)<-0}
}
WW(:,:,s)=dw
moranI(WW,data)   ##data为一列数据,每次计算出来的结果也只有一个数值
}
data1.rar
大小:(226 Bytes)

 马上下载

本附件包括:

  • data1.csv



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 13:25:12
epoh 发表于 2012-5-13 11:24
这个很简单,先设
k=1:1:100
假设index都是1,表示下回试 0.1:0.01:1
epoh老师,若在调用Getis1之前,先对Wij进行row-standardized,是不是修改为:
......
for i = 1:n
    for j = 1:m
     if (i~=j)
        WWij(i,j)=exp((-k(s)/d)*dista(i,j));  
     elseif (i==j)
        WWij(i,j)=0;
     end %end if
    end  %end j
      WWij=normw(WWij);
      WW(:,:,s)=WWij;

end %end i
   for p = 1:n1
     [GGI,ZZG,ZZ]=Getis_revised(WWij,Xij(p,:));
     ZZmat(p,s)=ZZ;
   end % end p
end %end s
ZZmat
......
哈哈,还有,如果是这样,这里调试不出最适合点,为啥,epoh老师?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 16:18:32
ywh19860616 发表于 2012-5-13 12:10
谢谢,这个方法很好。
epoh老师,请您抽空再帮我看下一段类似功能的R 程序。这里的主要区别是矩阵生成机 ...
library(ape)
library(fields)
yc=as.numeric(t(c(40.16304......)
xc=as.numeric(t(c(116.38513,....)
data<-read.csv('data1.csv')
data=data[,1]
p<-nrow(data)
LL<-cbind(xc,yc)
dista<-rdist.earth(LL)
d = seq(50,1000,50)
s<-length(d)
n<-ncol(dista)
WW= array(NA, dim = c(n,n,s))
moranImat=matrix(NA,s,1);
for (p in 1:s){
dw<-dista
for (i in 1:n){
     for (j in 1:n) {

         if (dw[i,j] <= d[p]) dw[i,j] =0  else
             dw[i,j] = 1
         }  #j
  } #i
WW[,,p]=dw
moranImat[p,1]=Moran.I(data,dw)$observed   ##data为一列数据,每次计算出来的结果也只有一个数值
} #p

WW
moranImat
             [,1]
[1,] -0.03562998
[2,] -0.03505226
[3,] -0.03505226
[4,] -0.03815054
[5,] -0.05173708
[6,] -0.05570482
[7,] -0.06194603
[8,] -0.05337594
[9,] -0.06442231
[10,] -0.05243863
[11,] -0.05588271
[12,] -0.06776555
[13,] -0.07897514
[14,] -0.07869158
[15,] -0.10539806
[16,] -0.12439059
[17,] -0.12607884
[18,] -0.13276167
[19,] -0.15463911
[20,] -0.19021641
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 16:42:39
epoh 发表于 2012-5-13 16:18
library(ape)
library(fields)
yc=as.numeric(t(c(40.16304......)
library(ape)
library(fields)
yc=as.numeric(t(c(40.16304......)
xc=as.numeric(t(c(116.38513,....)
data<-read.csv('data1.csv')
data=data[,1]
p<-nrow(data)
LL<-cbind(xc,yc)
dista<-rdist.earth(LL)
d = seq(50,1000,50)
s<-length(d)
n<-ncol(dista)
WW= array(NA, dim = c(n,n,s))
moranImat=matrix(NA,s,4);
for (p in 1:s){
dw<-dista
for (i in 1:n){
     for (j in 1:n) {

         if (dw[i,j] <= d[p]) dw[i,j] =0  else
             dw[i,j] = 1
         }  #j
  } #i
WW[,,p]=dw
moranImat[p,4]=Moran.I(data,dw)   ##data为一列数据,每次计算出来的结果也只有一个数值
} #p

epoh老师,我还想请教一下,这句命令data=data[,1]的作用是什么?我试了下,好像还是和原来data一样,只是排列形式变了。

还有,我想把Moran.I函数得到的4个值都输出,我对应改了几句,您看哪里错误?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 18:59:32
ywh19860616 发表于 2012-5-13 16:42
library(ape)
library(fields)
yc=as.numeric(t(c(40.16304......)
data<-read.csv('moran.csv')   # "data.frame"
data=data[,1]  #"numeric"
换成"numeric"是为了配合function Moran.I(x, weight)
x : a numeric vector.的要求

data<-read.csv('data1.csv')   # "data.frame"
data=data[,1]  #"numeric"
p<-nrow(data)
LL<-cbind(xc,yc)
dista<-rdist.earth(LL)
d = seq(50,1000,50)
s<-length(d)
n<-ncol(dista)
WW= array(NA, dim = c(n,n,s))
moranImat=matrix(NA,s,4);
for (p in 1:s){
dw<-dista
for (i in 1:n){
     for (j in 1:n) {

         if (dw[i,j] <= d[p]) dw[i,j] =0  else
             dw[i,j] = 1
         }  #j
  } #i
WW[,,p]=dw
moranImat[p,1]=Moran.I(data,dw)$observed  
moranImat[p,2]=Moran.I(data,dw)$expected   
moranImat[p,3]=Moran.I(data,dw)$sd
moranImat[p,4]=Moran.I(data,dw)$p.value   
} #p
colnames(moranImat) = c("observed","expected","sd", "p.value")
print(moranImat)

         observed    expected          sd    p.value
[1,] -0.03562998 -0.03571429 0.003497052 0.98076591
[2,] -0.03505226 -0.03571429 0.004949200 0.89358897
[3,] -0.03505226 -0.03571429 0.004949200 0.89358897
[4,] -0.03815054 -0.03571429 0.007036459 0.72916722
[5,] -0.05173708 -0.03571429 0.011300924 0.15624031
[6,] -0.05570482 -0.03571429 0.014758350 0.17556940
[7,] -0.06194603 -0.03571429 0.018383120 0.15359511
[8,] -0.05337594 -0.03571429 0.019858576 0.37380342
[9,] -0.06442231 -0.03571429 0.022407499 0.20013071
[10,] -0.05243863 -0.03571429 0.026124726 0.52206003
[11,] -0.05588271 -0.03571429 0.029924213 0.50032175
[12,] -0.06776555 -0.03571429 0.033569987 0.33969935
[13,] -0.07897514 -0.03571429 0.036233464 0.23249847
[14,] -0.07869158 -0.03571429 0.039075959 0.27140198
[15,] -0.10539806 -0.03571429 0.042226614 0.09889518
[16,] -0.12439059 -0.03571429 0.045660253 0.05212624
[17,] -0.12607884 -0.03571429 0.050839595 0.07549515
[18,] -0.13276167 -0.03571429 0.054816061 0.07665742
[19,] -0.15463911 -0.03571429 0.059795454 0.04671659
[20,] -0.19021641 -0.03571429 0.064245291 0.01617784
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 19:32:34
非常感谢您,现在明白了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-15 13:49:51
epoh 发表于 2012-5-11 09:54
index   1              2              3             4             5             6              7 ...
epoh老师,谢谢您的解答
我还有一个问题,现在已经运行得到:
Indexmat =

    1.0000  274.6958    3.9000   19.0000
    2.0000  271.1351    4.4500   30.0000
    3.0000  282.2281    4.2000   25.0000
    4.0000  294.7071    4.2000   25.0000
    5.0000  301.2758    4.3000   27.0000
    6.0000  312.0261    4.3000   27.0000
    7.0000  313.2352    4.2000   25.0000
    8.0000  314.0902    4.2000   25.0000
    9.0000  316.2178    4.2000   25.0000
   10.0000  320.7876    4.2000   25.0000
   11.0000  323.7853    4.2000   25.0000
   12.0000  327.2809    4.2500   26.0000
   13.0000  330.9854    4.2500   26.0000
   14.0000  336.4292    4.2500   26.0000
   15.0000  341.2405    4.2000   25.0000
   16.0000  347.1244    4.2500   26.0000
   17.0000  348.0834    4.2500   26.0000
   18.0000  346.6960    4.0000   21.0000
   19.0000  343.6778    4.0000   21.0000
   20.0000  341.8908    3.9500   20.0000
   21.0000  337.0468    3.9500   20.0000
如何根据Indexmat的第一列返回求WW?现在运行得到的WW为29*29*41,应该是最后一个变量的,那么根据WW(:,:19)(比如现在想取第一个19对应的)就会有问题。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-15 14:02:56
ywh19860616 发表于 2012-5-15 13:49
epoh老师,谢谢您的解答
我还有一个问题,现在已经运行得到:
Indexmat =
现在想取第一个19对应的 ??
不太清楚你的意思
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-15 14:10:41
epoh 发表于 2012-5-15 14:02
现在想取第一个19对应的 ??
不太清楚你的意思
嗯,epoh老师,上面indexmat的21行分别是对应数据文件的21个变量所得出的最优值,我现在想根据这里的最优值返回确定对应的WW矩阵。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-15 14:22:20
ywh19860616 发表于 2012-5-15 14:10
嗯,epoh老师,上面indexmat的21行分别是对应数据文件的21个变量所得出的最优值,我现在想根据这里的最优 ...
Indexmat =

    1.0000  274.6958    3.9000   19.0000
    2.0000  271.1351    4.4500   30.0000
    3.0000  282.2281    4.2000   25.0000
    4.0000  294.7071    4.2000   25.0000
    5.0000  301.2758    4.3000   27.0000
   .........

WW(:,:,19)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群