【问题标题】:How can I show simultaneously all QAP correlation coefficients and QAP p-values between my independent and all dependent matrices with sna in R?如何在 R 中同时显示我的独立矩阵和所有相关矩阵之间的所有 QAP 相关系数和 QAP p 值?
【发布时间】:2022-01-19 00:32:21
【问题描述】:

我正在运行二次分配程序 (QAP) 以使用 sna 包查找依赖网络矩阵与 R 中四个独立单子节点协变量矩阵的相关性。

我正在使用以下代码:

cor2<-sna::gcor(list(bilateralaid_network, GDP_capita_receiver, 
                  GDP_capita_sender,
                  HDI_receiver,HDI_sender))
p2<-qaptest(list(bilateralaid_network, GDP_capita_receiver, 
                 GDP_capita_sender,
                 HDI_receiver,HDI_sender), gcor, g1=1, g2=2, reps=1000)
p2<-qaptest(list(bilateralaid_network, GDP_capita_receiver, 
                 GDP_capita_sender,
                 HDI_receiver,HDI_sender), gcor, g1=1, g2=3, reps=1000)
#etc

但是我不想像 question 中所示的那样为每个因变量单独运行 qaptest。

有没有办法在 R 中以表格或矩阵格式返回所有相关系数和 p 值?

我了解到使用 UCINET 软件可以实现,但我个人无权访问它。

UCINET 能够提供如下截图所示的结果。我想在 R 中产生类似的输出。

【问题讨论】:

  • qap 是定义上的二元分析。所以,你不能两两地运行它。也就是说,编写一个运行所有网络组合并将 qaptest 应用于它们然后将其作为矩阵输出的小函数将很简单。编写一个更有效地执行此操作的函数也相当容易,只需生成一次排列向量,然后将其应用于每个成对分析。它可能会快一点,因为您不必为每个 qap 运行单独绘制这些排列。

标签: r correlation social-networking network-analysis sna


【解决方案1】:

一个非常简单的解决方案如下。这可以通过多种方式进行优化,但这非常简单,利用 sna 包中的功能。

# some random networks
g <- array(dim = c(3, 10, 10))
g[1, , ] <- sna::rgraph(10)
g[2, , ] <- sna::rgraph(10, tprob = g[1, , ]*0.8)
g[3, , ] <- 1
g[3, 1, 2] <- 0

socmat <- network::as.sociomatrix(g)
reps = 1000
testval <- sna::gcor(g)
out <- array(dim = c(dim(g)[1], dim(g)[1], reps))

for (i in 1:reps) {
  out[, , i] <- sna::gcor(sna::rmperm(socmat)) - testval
}

(pgreq <- rowMeans(out > 0, dims = 2))
(pleeq <- rowMeans(out <= 0, dims = 2))
testval

这里,pgreq 是相关性的 p 值大于观察到的相关性,pleeq 包含相关性小于或等于观察到的相关性的 p 值,testval 包含相关性在观察到的网络之间。

> pgreq
      [,1]  [,2]  [,3]
[1,] 0.000 0.000 0.436
[2,] 0.000 0.000 0.619
[3,] 0.436 0.619 0.000

> pleeq
      [,1]  [,2]  [,3]
[1,] 1.000 1.000 0.564
[2,] 1.000 1.000 0.381
[3,] 0.564 0.381 1.000

> testval
            1          2           3
1  1.00000000  0.7135061 -0.09480909
2  0.71350607  1.0000000 -0.13287777
3 -0.09480909 -0.1328778  1.00000000

您可以轻松地将其打包成一个函数并使其更高效。但是,在许多情况下,这段代码可能已经足够了。

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2019-07-15
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多