pysal.explore.giddy.markov.LISA_Markov

class pysal.explore.giddy.markov.LISA_Markov(y, w, permutations=0, significance_level=0.05, geoda_quads=False)[源代码]

空间关联局部指标的马尔可夫

参数:
y : 数组

(n,t),n在t时间段内观察到的横截面单位。

w : W

空间权重对象。

permutations : 可选的

用于确定Lisa重要性的排列数(默认值为0)。

significance_level : 可选浮动

在转换中过滤重要的Lisa端点的显著性级别(双面)(默认值为0.05)。

geoda_quads : 布尔

如果真的使用geoda方案:hh=1,ll=2,lh=3,hl=4。如果错误,使用Pysal方案:hh=1,lh=2,ll=3,hl=4。(默认值为假)。

实例

>>> import pysal.lib
>>> import numpy as np
>>> from pysal.explore.giddy.markov import LISA_Markov
>>> f = pysal.lib.io.open(pysal.lib.examples.get_path("usjoin.csv"))
>>> years = list(range(1929, 2010))
>>> pci = np.array([f.by_col[str(y)] for y in years]).transpose()
>>> w = pysal.lib.io.open(pysal.lib.examples.get_path("states48.gal")).read()
>>> lm = LISA_Markov(pci,w)
>>> lm.classes
array([1, 2, 3, 4])
>>> lm.steady_state
array([0.28561505, 0.14190226, 0.40493672, 0.16754598])
>>> lm.transitions
array([[1.087e+03, 4.400e+01, 4.000e+00, 3.400e+01],
       [4.100e+01, 4.700e+02, 3.600e+01, 1.000e+00],
       [5.000e+00, 3.400e+01, 1.422e+03, 3.900e+01],
       [3.000e+01, 1.000e+00, 4.000e+01, 5.520e+02]])
>>> lm.p
array([[0.92985458, 0.03763901, 0.00342173, 0.02908469],
       [0.07481752, 0.85766423, 0.06569343, 0.00182482],
       [0.00333333, 0.02266667, 0.948     , 0.026     ],
       [0.04815409, 0.00160514, 0.06420546, 0.88603531]])
>>> lm.move_types[0,:3]
array([11, 11, 11])
>>> lm.move_types[0,-3:]
array([11, 11, 11])

现在只考虑一个或两个Lisa端点具有重要意义的移动

>>> np.random.seed(10)
>>> lm_random = LISA_Markov(pci, w, permutations=99)
>>> lm_random.significant_moves[0, :3]
array([11, 11, 11])
>>> lm_random.significant_moves[0,-3:]
array([59, 43, 27])

任何小于49的值表示至少有一个Lisa端点是显著的。例如,第一个空间单元在前三个和最后一个树间隔(根据lm.move_类型)期间经历了类型11(ll,ll)的转换,但是,这些转换中的最后三个在每个转换的开始和结束年份都涉及到不明显的Lisa。

测试Y的移动是否独立于WY的移动

>>> "Chi2: %8.3f, p: %5.2f, dof: %d" % lm.chi_2
'Chi2: 1058.208, p:  0.00, dof: 9'

Lisa的实际转换

>>> lm.transitions
array([[1.087e+03, 4.400e+01, 4.000e+00, 3.400e+01],
       [4.100e+01, 4.700e+02, 3.600e+01, 1.000e+00],
       [5.000e+00, 3.400e+01, 1.422e+03, 3.900e+01],
       [3.000e+01, 1.000e+00, 4.000e+01, 5.520e+02]])

空y和wy下Lisa的预期转换正在相互独立地移动。

>>> lm.expected_t
array([[1.12328098e+03, 1.15377356e+01, 3.47522158e-01, 3.38337644e+01],
       [3.50272664e+00, 5.28473882e+02, 1.59178880e+01, 1.05503814e-01],
       [1.53878082e-01, 2.32163556e+01, 1.46690710e+03, 9.72266513e+00],
       [9.60775143e+00, 9.86856346e-02, 6.23537392e+00, 6.07058189e+02]])

如果要根据geoda定义lisa类,则 geoda_quad 选项必须设置为true

>>> lm.q[0:5,0]
array([3, 2, 3, 1, 4])
>>> lm = LISA_Markov(pci,w, geoda_quads=True)
>>> lm.q[0:5,0]
array([2, 3, 2, 1, 4])
属性:
chi_2 : 元组

(3个元素)(卡方检验统计量、p值、自由度)用于检验y的动力学独立于wy的动力学。

classes : 数组

(4,1)1=hh,2=lh,3=ll,4=hl(own,lag)1=hh,2=ll,3=lh,4=hl(own,lag)(如果geoda ou quads=true)

expected_t : 数组

(4,4),Y的动力学独立于WY的动力学,在空值下的预期跃迁数。

move_types : 矩阵

(n,t-1),整数值,指示发生的Lisa转换类型(q1是第1阶段的象限,q2是第2阶段的象限)。

Q1 Q2 move_type
1 1 1
1 2 2
1 3 3
1 4 4
2 1 5
2 2 6
2 3 7
2 4 8
3 1 9
3 2 10
3 3 11
3 4 12
4 1 13
4 2 14
4 3 15
4 4 16
p : 数组

(k,k),转移概率矩阵。

p_values : 矩阵

(n,t),每个端点的lisa p值(如果排列>0)。

significant_moves : 矩阵

(n,t-1),表示Lisa转换类型和重要性的整数值。如果t期内显著,则st=1,否则st=0(如果排列>0)。

(s1、s2) move_type
(1,1) 〔1, 16〕
(1,0) 〔17, 32〕
(0,1) 〔33, 48〕
(0,0) 〔49, 64〕
Q1 Q2 S1 S2级 move_type
1 1 1 1 1
1 2 1 1 2
1 3 1 1 3
1 4 1 1 4
2 1 1 1 5
2 2 1 1 6
2 3 1 1 7
2 4 1 1 8
3 1 1 1 9
3 2 1 1 10
3 3 1 1 11
3 4 1 1 12
4 1 1 1 13
4 2 1 1 14
4 3 1 1 15
4 4 1 1 16
1 1 1 0 17
1 2 1 0 18
. . . . .
. . . . .
4 3 1 0 31
4 4 1 0 32
1 1 0 1 33
1 2 0 1 34
. . . . .
. . . . .
4 3 0 1 47
4 4 0 1 48
1 1 0 0 49
1 2 0 0 50
. . . . .
. . . . .
4 3 0 0 63
4 4 0 0 64
steady_state : 数组

(K,)遍历分布。

transitions : 数组

(4,4),每个状态i和j之间的转换计数。

spillover : 数组

在Lisa Markov中检测扩散的溢出位置。

方法

spillover \([象限,邻居在]) 在Lisa Markov中检测扩散的溢出位置。
__init__(y, w, permutations=0, significance_level=0.05, geoda_quads=False)[源代码]

初始化自身。请参阅帮助(键入(self))以获得准确的签名。

方法

__init__ \(Y,W[,排列,…]) 初始化自身。
spillover \([象限,邻居在]) 在Lisa Markov中检测扩散的溢出位置。

属性

steady_state