pysal.explore.giddy.markov.
Spatial_Markov
(y, w, k=4, m=4, permutations=0, fixed=True, discrete=False, cutoffs=None, lag_cutoffs=None, variable_name=None)[源代码]¶马尔可夫跃迁的条件是空间滞后的值。
参数: |
|
---|
笔记
基于 [Rey01] .
应谨慎使用SHTEST和CHI2测试,因为它们基于假设随机过渡的经典理论。基于x2的测试更可取,因为它模拟了空值下的随机性。这是一个需要进一步分析的实验测试。
实例
>>> import pysal.lib
>>> from pysal.explore.giddy.markov import Spatial_Markov
>>> import numpy as np
>>> f = pysal.lib.io.open(pysal.lib.examples.get_path("usjoin.csv"))
>>> pci = np.array([f.by_col[str(y)] for y in range(1929,2010)])
>>> pci = pci.transpose()
>>> rpci = pci/(pci.mean(axis=0))
>>> w = pysal.lib.io.open(pysal.lib.examples.get_path("states48.gal")).read()
>>> w.transform = 'r'
现在我们创建一个 Spatial_Markov 例如,1929-2009年美国48个较低州的连续相对人均收入时间序列。当前的实施允许用户以更灵活的方式对持续收入进行分类。
(1)全球五分位数离散化收入数据(k=5),全球五分位数离散化收入空间滞后(m=5)。
>>> sm = Spatial_Markov(rpci, w, fixed=True, k=5, m=5, variable_name='rpci')
我们可以检查收入的截止值和空间滞后的截止值。
>>> sm.cutoffs
array([0.83999133, 0.94707545, 1.03242697, 1.14911154])
>>> sm.lag_cutoffs
array([0.88973386, 0.95891917, 1.01469758, 1.1183566 ])
显然,它们略有不同。
现在我们来看看估计的空间滞后条件转移概率矩阵。
>>> for p in sm.P:
... print(p)
[[0.96341463 0.0304878 0.00609756 0. 0. ]
[0.06040268 0.83221477 0.10738255 0. 0. ]
[0. 0.14 0.74 0.12 0. ]
[0. 0.03571429 0.32142857 0.57142857 0.07142857]
[0. 0. 0. 0.16666667 0.83333333]]
[[0.79831933 0.16806723 0.03361345 0. 0. ]
[0.0754717 0.88207547 0.04245283 0. 0. ]
[0.00537634 0.06989247 0.8655914 0.05913978 0. ]
[0. 0. 0.06372549 0.90196078 0.03431373]
[0. 0. 0. 0.19444444 0.80555556]]
[[0.84693878 0.15306122 0. 0. 0. ]
[0.08133971 0.78947368 0.1291866 0. 0. ]
[0.00518135 0.0984456 0.79274611 0.0984456 0.00518135]
[0. 0. 0.09411765 0.87058824 0.03529412]
[0. 0. 0. 0.10204082 0.89795918]]
[[0.8852459 0.09836066 0. 0.01639344 0. ]
[0.03875969 0.81395349 0.13953488 0. 0.00775194]
[0.0049505 0.09405941 0.77722772 0.11881188 0.0049505 ]
[0. 0.02339181 0.12865497 0.75438596 0.09356725]
[0. 0. 0. 0.09661836 0.90338164]]
[[0.33333333 0.66666667 0. 0. 0. ]
[0.0483871 0.77419355 0.16129032 0.01612903 0. ]
[0.01149425 0.16091954 0.74712644 0.08045977 0. ]
[0. 0.01036269 0.06217617 0.89637306 0.03108808]
[0. 0. 0. 0.02352941 0.97647059]]
如果一个贫穷国家的邻居在第1个五分位数中,则其继续贫穷的概率为0.963;如果其邻居在第2个五分位数中,则其继续贫穷的概率为0.798。富裕经济体保持富裕的概率是0.976,如果他们的邻居在五分之一,但如果他们的邻居在四分之一,这下降到0.903。
估计出全局转移概率矩阵:
>>> print(sm.p)
[[0.91461837 0.07503234 0.00905563 0.00129366 0. ]
[0.06570302 0.82654402 0.10512484 0.00131406 0.00131406]
[0.00520833 0.10286458 0.79427083 0.09505208 0.00260417]
[0. 0.00913838 0.09399478 0.84856397 0.04830287]
[0. 0. 0. 0.06217617 0.93782383]]
Q和似然比统计数据都是显著的,这表明在滞后类中动力学并不均匀:
>>> "%.3f"%sm.LR
'170.659'
>>> "%.3f"%sm.Q
'200.624'
>>> "%.3f"%sm.LR_p_value
'0.000'
>>> "%.3f"%sm.Q_p_value
'0.000'
>>> sm.dof_hom
60
贫穷(富裕)邻国的长期分布是:第一个五分位数为0.435(0.018),第二个五分位数为0.263(0.200),第三个五分位数为0.204(0.190),第四个五分位数为0.0684(0.255),第五个五分位数为0.029(0.337)。
>>> sm.S
array([[0.43509425, 0.2635327 , 0.20363044, 0.06841983, 0.02932278],
[0.13391287, 0.33993305, 0.25153036, 0.23343016, 0.04119356],
[0.12124869, 0.21137444, 0.2635101 , 0.29013417, 0.1137326 ],
[0.0776413 , 0.19748806, 0.25352636, 0.22480415, 0.24654013],
[0.01776781, 0.19964349, 0.19009833, 0.25524697, 0.3372434 ]])
收入在第一个五分位数的州与邻居在第一个五分位数的州在离开第一个五分位数后2.298年后回到第一个四分位数。他们平均在离开第一个五分位数80.810年后进入第四个五分位数。四分之一人口中的贫困国家平均在12.88年后恢复到五分之一人口,28.473年后将进入四分之一人口。
>>> for f in sm.F:
... print(f)
...
[[ 2.29835259 28.95614035 46.14285714 80.80952381 279.42857143]
[ 33.86549708 3.79459555 22.57142857 57.23809524 255.85714286]
[ 43.60233918 9.73684211 4.91085714 34.66666667 233.28571429]
[ 46.62865497 12.76315789 6.25714286 14.61564626 198.61904762]
[ 52.62865497 18.76315789 12.25714286 6. 34.1031746 ]]
[[ 7.46754205 9.70574606 25.76785714 74.53116883 194.23446197]
[ 27.76691978 2.94175577 24.97142857 73.73474026 193.4380334 ]
[ 53.57477715 28.48447637 3.97566318 48.76331169 168.46660482]
[ 72.03631562 46.94601483 18.46153846 4.28393653 119.70329314]
[ 77.17917276 52.08887197 23.6043956 5.14285714 24.27564033]]
[[ 8.24751154 6.53333333 18.38765432 40.70864198 112.76732026]
[ 47.35040872 4.73094099 11.85432099 34.17530864 106.23398693]
[ 69.42288828 24.76666667 3.794921 22.32098765 94.37966594]
[ 83.72288828 39.06666667 14.3 3.44668119 76.36702977]
[ 93.52288828 48.86666667 24.1 9.8 8.79255406]]
[[ 12.87974382 13.34847151 19.83446328 28.47257282 55.82395142]
[ 99.46114206 5.06359731 10.54545198 23.05133495 49.68944423]
[117.76777159 23.03735526 3.94436301 15.0843986 43.57927247]
[127.89752089 32.4393006 14.56853107 4.44831643 31.63099455]
[138.24752089 42.7893006 24.91853107 10.35 4.05613474]]
[[ 56.2815534 1.5 10.57236842 27.02173913 110.54347826]
[ 82.9223301 5.00892857 9.07236842 25.52173913 109.04347826]
[ 97.17718447 19.53125 5.26043557 21.42391304 104.94565217]
[127.1407767 48.74107143 33.29605263 3.91777427 83.52173913]
[169.6407767 91.24107143 75.79605263 42.5 2.96521739]]
(2)全球五分位数离散化收入数据(k=5),全球四分位数离散化收入空间滞后(m=4)。
>>> sm = Spatial_Markov(rpci, w, fixed=True, k=5, m=4, variable_name='rpci')
我们还可以检查收入的截止和空间滞后的截止:
>>> sm.cutoffs
array([0.83999133, 0.94707545, 1.03242697, 1.14911154])
>>> sm.lag_cutoffs
array([0.91440247, 0.98583079, 1.08698351])
现在我们来看看估计的空间滞后条件转移概率矩阵。
>>> for p in sm.P:
... print(p)
[[0.95708955 0.03544776 0.00746269 0. 0. ]
[0.05825243 0.83980583 0.10194175 0. 0. ]
[0. 0.1294964 0.76258993 0.10791367 0. ]
[0. 0.01538462 0.18461538 0.72307692 0.07692308]
[0. 0. 0. 0.14285714 0.85714286]]
[[0.7421875 0.234375 0.0234375 0. 0. ]
[0.08550186 0.85130112 0.06319703 0. 0. ]
[0.00865801 0.06926407 0.86147186 0.05627706 0.004329 ]
[0. 0. 0.05363985 0.92337165 0.02298851]
[0. 0. 0. 0.13432836 0.86567164]]
[[0.95145631 0.04854369 0. 0. 0. ]
[0.06 0.79 0.145 0. 0.005 ]
[0.00358423 0.10394265 0.7921147 0.09677419 0.00358423]
[0. 0.01630435 0.13586957 0.75543478 0.0923913 ]
[0. 0. 0. 0.10204082 0.89795918]]
[[0.16666667 0.66666667 0. 0.16666667 0. ]
[0.03488372 0.80232558 0.15116279 0.01162791 0. ]
[0.00840336 0.13445378 0.70588235 0.1512605 0. ]
[0. 0.01171875 0.08203125 0.87109375 0.03515625]
[0. 0. 0. 0.03434343 0.96565657]]
我们现在得到4个5*5的空间滞后条件转移概率矩阵,而不是案例(1)中的5个。
Q和似然比统计数据仍然是显著的。
>>> "%.3f"%sm.LR
'172.105'
>>> "%.3f"%sm.Q
'321.128'
>>> "%.3f"%sm.LR_p_value
'0.000'
>>> "%.3f"%sm.Q_p_value
'0.000'
>>> sm.dof_hom
45
(3)我们也可以手动设置相对收入和空间滞后的截止值。例如,我们希望定义的截止值为[0.8,0.9,1,1.2],这意味着相对收入:2.1小于0.8:0.8和0.9之间的0.2.2:0.9和1.0之间的1.2.3:1.0和1.0之间的2.4:1.0和1.2:3和2.5大于1.2:4级
>>> cc = np.array([0.8, 0.9, 1, 1.2])
>>> sm = Spatial_Markov(rpci, w, cutoffs=cc, lag_cutoffs=cc, variable_name='rpci')
>>> sm.cutoffs
array([0.8, 0.9, 1. , 1.2])
>>> sm.k
5
>>> sm.lag_cutoffs
array([0.8, 0.9, 1. , 1.2])
>>> sm.m
5
>>> for p in sm.P:
... print(p)
[[0.96703297 0.03296703 0. 0. 0. ]
[0.10638298 0.68085106 0.21276596 0. 0. ]
[0. 0.14285714 0.7755102 0.08163265 0. ]
[0. 0. 0.5 0.5 0. ]
[0. 0. 0. 0. 0. ]]
[[0.88636364 0.10606061 0.00757576 0. 0. ]
[0.04402516 0.89308176 0.06289308 0. 0. ]
[0. 0.05882353 0.8627451 0.07843137 0. ]
[0. 0. 0.13846154 0.86153846 0. ]
[0. 0. 0. 0. 1. ]]
[[0.78082192 0.17808219 0.02739726 0.01369863 0. ]
[0.03488372 0.90406977 0.05813953 0.00290698 0. ]
[0. 0.05919003 0.84735202 0.09034268 0.00311526]
[0. 0. 0.05811623 0.92985972 0.01202405]
[0. 0. 0. 0.14285714 0.85714286]]
[[0.82692308 0.15384615 0. 0.01923077 0. ]
[0.0703125 0.7890625 0.125 0.015625 0. ]
[0.00295858 0.06213018 0.82248521 0.10946746 0.00295858]
[0. 0.00185529 0.07606679 0.88497217 0.03710575]
[0. 0. 0. 0.07803468 0.92196532]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0.06666667 0.9 0.03333333 0. ]
[0. 0. 0.05660377 0.90566038 0.03773585]
[0. 0. 0. 0.03932584 0.96067416]]
(4)空间马尔可夫也接受离散时间序列,并计算分类空间滞后,其中几个转移概率矩阵是条件。我们还是用美国州收入时间序列来演示一下。我们首先将它们离散成类别,然后将它们传递给空间马尔可夫。
>>> import pysal.viz.mapclassify as mc
>>> y = mc.Quantiles(rpci.flatten(), k=5).yb.reshape(rpci.shape)
>>> np.random.seed(5)
>>> sm = Spatial_Markov(y, w, discrete=True, variable_name='discretized rpci')
>>> sm.k
5
>>> sm.m
5
>>> for p in sm.P:
... print(p)
[[0.94787645 0.04440154 0.00772201 0. 0. ]
[0.08333333 0.81060606 0.10606061 0. 0. ]
[0. 0.12765957 0.79787234 0.07446809 0. ]
[0. 0.02777778 0.22222222 0.66666667 0.08333333]
[0. 0. 0. 0.33333333 0.66666667]]
[[0.888 0.096 0.016 0. 0. ]
[0.06049822 0.84341637 0.09608541 0. 0. ]
[0.00666667 0.10666667 0.81333333 0.07333333 0. ]
[0. 0. 0.08527132 0.86821705 0.04651163]
[0. 0. 0. 0.10204082 0.89795918]]
[[0.65217391 0.32608696 0.02173913 0. 0. ]
[0.07446809 0.80851064 0.11170213 0. 0.00531915]
[0.01071429 0.1 0.76428571 0.11785714 0.00714286]
[0. 0.00552486 0.09392265 0.86187845 0.03867403]
[0. 0. 0. 0.13157895 0.86842105]]
[[0.91935484 0.06451613 0. 0.01612903 0. ]
[0.06796117 0.90291262 0.02912621 0. 0. ]
[0. 0.05755396 0.87769784 0.0647482 0. ]
[0. 0.02150538 0.10752688 0.80107527 0.06989247]
[0. 0. 0. 0.08064516 0.91935484]]
[[0.81818182 0.18181818 0. 0. 0. ]
[0.01754386 0.70175439 0.26315789 0.01754386 0. ]
[0. 0.14285714 0.73333333 0.12380952 0. ]
[0. 0.0042735 0.06837607 0.89316239 0.03418803]
[0. 0. 0. 0.03891051 0.96108949]]
属性: |
|
---|
方法
summary \([文件名]) |
用马尔可夫同质性检验方法检验时间滞后的空间依赖性。 |
__init__
(y, w, k=4, m=4, permutations=0, fixed=True, discrete=False, cutoffs=None, lag_cutoffs=None, variable_name=None)[源代码]¶初始化自身。请参阅帮助(键入(self))以获得准确的签名。
方法
__init__ \(Y、W、K、M、排列、固定、固定) |
初始化自身。 |
summary \([文件名]) |
用马尔可夫同质性检验方法检验时间滞后的空间依赖性。 |
属性
F |
|
LR |
|
LR_p_value |
|
Q |
|
Q_p_value |
|
S |
|
chi2 |
|
dof_hom |
|
ht |
|
s |
|
shtest |
|
x2 |
|
x2_dof |
|
x2_pvalue |