我的数据集由大约30个独立变量组成,这些变量在整个〜 550个人口普查区(矢量几何)。
我知道这是一个充满挑战的问题。但是,当我进行搜索时,似乎没有任何解决方案。我遇到的是一些数学方程式,它们解释了GWPCA(和GWR)的基本组成。从某种意义上讲,我所追求的是更多的应用,我正在寻找从原始数据到GWPCA结果所需要完成的主要步骤。
我想扩展一下首先,由于以下收到的评论,因此进行了编辑。
我想在Paul ...
上发表我对GWPCA的兴趣,基于以下论文:
CD的劳埃德(2010)。使用地理加权主成分分析法分析人口特征:以2001年北爱尔兰为例。计算机,环境与城市系统,第34卷第5期,第389-399页。
可以访问文献,我随附了解释以下数学原理的特定部分的屏幕截图: />在不进行详细说明(机密性)的情况下,我们尝试将特征值大于1的30个变量(虽然是全球性的)减少为特征值大于1的一组分量。通过计算地理加权分量,我们试图了解这些组件所解释的局部方差。
我认为我们的主要目标将是证明GWPCA的概念,即证明我们数据的空间明确性,并且我们不能认为所有自变量在全球范围内都是可解释的。相反,每个组成部分将确定的局部规模(社区)将帮助我们理解数据的多维本质(如何将变量相互组合以解释研究区域中的某些社区)。
我们希望映射每个组件所占差异的百分比(分别),以了解所讨论组件所解释的邻域范围(帮助我们了解组件的局部空间)。也许还有其他一些映射示例,但现在还没有想到。
另外:
GWPCA背后的数学超出了我的理解,因为我具有地理分析和社会背景统计。数学的应用是最重要的,也就是说,我该如何插入这些变量/公式。
#1 楼
“地理位置加权的PCA”非常具有描述性:在R
中,该程序实际上编写了自己。 (与实际的代码行相比,它需要更多的注释行。)让我们从权重开始,因为这是PCA本身在地理上加权的PCA零件公司的所在地。术语“地理”是指权重取决于基点和数据位置之间的距离。标准-绝不是唯一-加权是高斯函数;也就是说,指数衰减与平方距离成正比。用户需要指定衰减率,或者更直观地说,是要在其上发生固定衰减量的特征距离。qA12078q或相关矩阵(从协方差派生)。那么,这里是一个以数值稳定方式计算加权协方差的函数。
distance.weight <- function(x, xy, tau) {
# x is a vector location
# xy is an array of locations, one per row
# tau is the bandwidth
# Returns a vector of weights
apply(xy, 1, function(z) exp(-(z-x) %*% (z-x) / (2 * tau^2)))
}
相关性是通过通常的方式得出的,即使用每个变量的计量单位:
covariance <- function(y, weights) {
# y is an m by n matrix
# weights is length m
# Returns the weighted covariance matrix of y (by columns).
if (missing(weights)) return (cov(y))
w <- zapsmall(weights / sum(weights)) # Standardize the weights
y.bar <- apply(y * w, 2, sum) # Compute column means
z <- t(y) - y.bar # Remove the means
z %*% (w * t(z))
}
现在我们可以执行PCA:
correlation <- function(y, weights) {
z <- covariance(y, weights)
sigma <- sqrt(diag(z)) # Standard deviations
z / (sigma %o% sigma)
}
(到目前为止,总共有10行可执行代码。下面,在我们描述要执行分析的网格之后,仅需要一行。)
让我们用一些随机示例进行说明与问题中描述的数据可比的数据:550个位置的30个变量。
gw.pca <- function(x, xy, y, tau) {
# x is a vector denoting a location
# xy is a set of locations as row vectors
# y is an array of attributes, also as rows
# tau is a bandwidth
# Returns a `princomp` object for the geographically weighted PCA
# ..of y relative to the point x.
w <- distance.weight(x, xy, tau)
princomp(covmat=correlation(y, w))
}
地理加权计算通常是在选定的一组位置上执行的,例如沿着横断面或在常规网格的点处。让我们使用一个粗略的网格对结果进行一些透视;稍后-一旦我们确信一切正常,就可以得到想要的-我们可以优化网格。
set.seed(17)
n.data <- 550
n.vars <- 30
xy <- matrix(rnorm(n.data * 2), ncol=2)
y <- matrix(rnorm(n.data * n.vars), ncol=n.vars)
我们希望从每个PCA中保留哪些信息,这是一个问题。通常,用于n个变量的PCA返回n个特征值的排序列表,并以各种形式返回n个向量的相应列表,每个向量的长度为n。要映射的是n *(n + 1)个数字!从问题中得到一些提示,让我们映射特征值。这些是通过
gw.pca
属性从$sdev
的输出中提取的,该属性是按降序值排列的特征值列表。 。请注意,在对gw.pca
的调用中使用了特征距离(或“带宽”)1。剩下的就是擦了擦。让我们使用
raster
库映射结果。 (相反,可以将结果以网格格式写出,以便使用GIS进行后期处理。)# Create a grid for the GWPCA, sweeping in rows
# from top to bottom.
xmin <- min(xy[,1]); xmax <- max(xy[,1]); n.cols <- 30
ymin <- min(xy[,2]); ymax <- max(xy[,2]); n.rows <- 20
dx <- seq(from=xmin, to=xmax, length.out=n.cols)
dy <- seq(from=ymin, to=ymax, length.out=n.rows)
points <- cbind(rep(dx, length(dy)),
as.vector(sapply(rev(dy), function(u) rep(u, length(dx)))))
30张地图的前四张,显示了四个最大的特征值。 (不要对它们的大小感到兴奋,每个地方的大小都超过1。回想一下,这些数据是完全随机生成的,因此,如果它们完全具有任何相关结构,则这些图中的特征值似乎表明了这一点-这完全是出于偶然,并不反映任何解释数据生成过程的“真实”信息。)更改带宽很有启发性。如果太小,该软件将抱怨奇异之处。 (我没有在此基本实现中进行任何错误检查。)但是将其从1减少到1/4(并使用与以前相同的数据)确实会得到有趣的结果:
请注意,边界周围的点趋向于给出异常大的主特征值(显示在左上图的绿色位置),而所有其他特征值都被压低以进行补偿(在其他三个图中显示为浅粉红色) 。在人们希望可靠地解释PCA的地理加权版本之前,需要先了解这一现象以及PCA和地理加权的许多其他细微之处。然后还有其他30 * 30 = 900个特征向量(或“载荷”)要考虑...。
评论
与往常一样@whuber非常感谢,非常感谢!
– Michael Markieta
2012年10月24日,3:24
只是想让您知道,在to.raster函数中,您需要具有matrix(u,nrow = n.rows,byrow = TRUE)而不是matrix(u,nrow = n.cols)。
–user12782
2012年11月14日19:07
@cqh感谢您如此仔细地查看此代码!您指出了合理的关注;我记得必须处理这个问题。但是,我认为代码是正确的。如果我混淆了行/列的顺序,那么插图将被完全(而且显然)搞砸了。 (这就是为什么我用不同的行数和列数进行测试的原因。)我为不幸的表达式nrow = n.cols道歉,但这就是它的工作原理(基于创建点的方式),我不想返回并重命名一切。
– hu
2012年11月14日21:04
#2 楼
更新:CRAN-GWmodel上现在有一个专用的R包,其中包括地理加权PCA以及其他工具。来自作者的网站:
我们用于地理加权建模的新R包GWmodel最近被上传到CRAN。 GWmodel在单个程序包中提供了地理上的加权数据分析方法,这些方法包括描述性统计,相关性,回归,一般线性模型和主成分分析。回归模型包括具有高斯,逻辑和泊松结构的各种数据,以及用于处理相关预测变量的岭回归。该软件包的新功能是提供每种技术的强健的
版本-这些版本可以抵抗
异常值的影响。
建模位置可以在投影中坐标
系统,或使用地理坐标指定。距离度量标准
包括欧几里得,出租车(曼哈顿)和明可夫斯基,以及由纬度/经度
坐标指定的位置的大
圆距离。还提供了各种自动校准方法,
,并且有一些有用的模型构建工具可用来帮助
从替代的预测变量中进行选择。
还提供了示例数据集,并将其用于在
随附文档中说明了各种
技术的用法。
在即将发表的论文预览中有更多详细信息。
我怀疑是否存在“易于使用,插入数据”的解决方案。
但是我非常希望能被证明是错误的,因为我很想用自己的一些数据来测试这种方法。
要考虑的一些选项: >
Marí-Dell'Olmo及其同事使用贝叶斯因子分析来计算西班牙小区域的贫困指数:
贝叶斯因子分析以计算剥夺指数及其不确定性。
Marí-Dell'OlmoM,Martínez-BeneitoMA,Borrell C,Zurriaga O,Nolasco
A,Domínguez-BerjónMF。
流行病学。 2011年5月; 22(3):356-64。
在本文中,他们提供了从R执行的WinBUGS模型的规范,可能会帮助您入门。
adegenet R软件包实现了
spca
功能。尽管它着重于遗传数据,但它可能也尽可能地接近您的问题的解决方案。直接使用此程序包/功能或修改其代码。这个问题上有一个小插图,应该可以让您正常运行。 战略研究小组的研究人员似乎正在积极研究该主题。尤其是Paul Harris和Chris Brunsdon(我偶然发现的演示文稿)。保罗和乌尔斯卡(Paul and Urska)的最新出版物(全文)可能也是有用的资源:
DemšarU,Harris P,Brunsdon C,Fotheringham AS,McLoone S(2012)
主要组成部分空间数据分析:概述。
美国地理学家协会纪事
为什么不尝试与他们联系并询问他们到底使用了什么解决方案?他们可能愿意分享他们的工作或为您指明正确的方向。
Cheng,Q.(2006)空间和空间加权主成分
分析用于图像处理。 IGARSS 2006:972-975
论文提到使用GeoDAS GIS系统。可能会成为另一个线索。
评论
+1 Brunsdon的演讲强调使用PCA作为探索性工具来查找局部多元离群值。 (spca小插图中也有此用法。)这是GWPCA的强大而合法的用法。 (但是,如果将PCA替换为更可靠的过程,则可以大大改进此方法,并且更具有探索性空间数据分析的精神。)
– hu
2012年10月25日上午10:19
似乎可以选择使用内核PCA。 tribesandclimatechange.org/docs/tribes_450.pdf
–杰弗里·埃文斯(Jeffrey Evans)
2012年12月5日在4:45
感谢您提供更新的信息-GWmodel看起来像一个值得购买的软件包。
– hu
13年7月19日在15:44
评论
我不知道R中有一个开箱即用的解决方案,但这应该不太困难。如果您希望获得比“ R可能会做到的更多”的反馈更多的信息,请发布相关的数学。您在寻找什么样的结果?最大的特征值?主成分估计数量?主要步骤应该足够清楚-一点上,选择权重,计算加权协方差(或相关性)矩阵,并从该矩阵的SVD获得PCA。重复一堆点。您是否在寻找任何这些步骤的详细信息?
我很高兴,呜咽。说明我的观点。 n.rows = 20 n.cols = 30 sq = seq(1,600)rast = raster(matrix(sq,nrow = n.rows,byrow = T))rast2 = raster(matrix(sq,nrow = n.cols)) rast2被翻转。如果您查看地图,就会发现实际上有20列而不是30列(x轴上的宽单元格只有20列)。只是想帮忙。
您可能想知道即将推出的R的GW方法新改进包,包括GW PCA,它在上个月的GISRUK 2013上展出。
基于OP对所需分析的扩展描述,我强烈建议您调查有关“相邻矩阵的主坐标”(AKA,Moran的特征向量)的文献。该方法最初是在'Borcard D.,&P.Legendre(2002)通过邻域矩阵的主坐标对生态数据进行全尺度空间分析中提出的。生态模型153:51-68',并且它对于跨多个空间尺度域的数据评估非常强大,而GWPCA不会这样做。该方法在spaceMaker和PCNM R库的库中实现。