2013-07-09 32 views
0

我正在使用塊級人口普查數據來計算社交脆弱性指數(SoVI),遵循Cutter,2003的方法。 我通過PCA生成了4個主要組件分數,我想使用帕累託排名將塊組一系列的等級(根據Rygel等人2006:構建社會脆弱性指數的方法)。如何用R組織分數進入帕累託排名?

我很抱歉,問題不清楚。以下是我使用的示例數據集,表示塊組的行以及表示漏洞維度(PCA組件分數)的列。我想在一個新列中使用Pareto方法計算基於4個漏洞維度的排名。

sovi<-structure(list(deprivation = c(4.28, 4.91, 7.63, 
1.33,6.03,6.40,-0.21,6.72,-1.45,5.76), 
oldage = c(1.04,0.87,1.14,0.18,0.75,0.93,1.29,0.81,5.57,1.28), 
housing = c(1.57, 1.41, 2.27, 0.21,0.97,2.65,-0.33,1.68,-1.72,1.78), 
education = c(-3.65,-1.73,-3.57,-3.37,-3.20,-2.06,-0.59,-2.93,-0.40,-3.09)), 
.Names = c("deprivation", "oldage", "housing", "education"), 
row.names=c(NA,10L), class = "data.frame") 

從的Rygel「的帕累託評級方法背後的基本原理如下。我被認爲是一組n個成分得分的基礎上的每個情況下,{CI1,CI2,...,CIN}。 (......)假設任何單個組件上的較高分數表示更大的脆弱性,當比較兩個(...)塊組A和B時,情況A比情況B更脆弱,只有當A的評分爲至少等於所有組件的B,並且如果至少有一個組件的評分高於B「。

我搜索了R網站,但無法找到帕累託排名的軟件包。

非常感謝!

+0

你能更精確的...你想幹什麼? – dickoa

+0

我有一個2100行和4列的矩陣(我的主要組件,代表不同維度的漏洞)。變量的值從〜-10到〜10不等,分別表示低脆弱性和高脆弱性。我想用帕累託排序法將行分成一系列的行列。謝謝! –

回答

0

您引用的定義僅定義了部分訂單: 您擁有的零部件越多,可比較的組越少。

您可以使用雙循環或outer來比較所有可能的組對, 和igraph以繪製結果。

n <- nrow(sovi) 
a <- outer(1:n, 1:n, Vectorize(function(i,j) 
    all(sovi[i,] >= sovi[j,]) && 
    any(sovi[i,] > sovi[j,]) 
)) 
library(igraph) 
g <- graph.adjacency(a) 
plot(g) 

# Remove the edges that can be inferred by transitivity 
hasse <- function(g) { 
    # Inspired from: 
    # http://web.bahcesehir.edu.tr/atabey_kaygun/other/hasse-local.html 
    es <- get.edgelist(g) 
    for(e in 1:nrow(es)) { 
    i <- es[e,1] 
    j <- es[e,2] 
    g[i,j] <- FALSE 
    p <- get.shortest.paths(g,i,j) 
    if(length(p[[1]]) == 0) { 
     g[i,j] <- TRUE 
    } else { 
     cat("Removing edge ", i, "-", j, " because of ", paste(p[[1]],collapse="-"), "\n", sep="") 
    } 
    } 
    g 
} 
plot(hasse(g)) 

Graph of the partial order