2016-02-03 2 views
0

Я отвечаю на старый вопрос без ответа (https://stackoverflow.com/questions/31653029/r-thresholding-networks-with-inputted-p-values-in-q-graph). Я пытаюсь оценить отношения между моими переменными. Для этого я использовал корреляционную сетевую карту. Как только я это сделал, я хотел бы реализовать компонент порога значимости. Например, я хочу показывать результаты только с p-значениями < 0.05. Любая идея о том, как я могу реализовать свой код?Как включить p-значения <0,05 в q-графах?

набор данных: https://www.dropbox.com/s/xntc3i4eqmlcnsj/d100_partition_all3.csv?dl=0

Мой код:

library(qgraph) 
cor_d100_partition_all3<-cor(d100_partition_all3) 
qgraph(cor_d100_partition_all3, layout="spring", 
    label.cex=0.9, labels=names(d100_partition_all3), 
    label.scale=FALSE, details = TRUE) 

Выход: enter image description here

Кроме того, у меня есть этот маленький кусочек кода, преобразования значения R2 в p.values:

Код:

cor.mtest <- function(mat, ...) { 
mat <- as.matrix(mat) 
n <- ncol(mat) 
p.mat<- matrix(NA, n, n) 
diag(p.mat) <- 0 
for (i in 1:(n - 1)) { 
    for (j in (i + 1):n) { 
    tmp <- cor.test(mat[, i], mat[, j], ...) 
    p.mat[i, j] <- p.mat[j, i] <- tmp$p.value 
} 
} 
colnames(p.mat) <- rownames(p.mat) <- colnames(mat) 
p.mat 
} 
p.mat <- cor.mtest(d100_partition_all3) 

Cheers

ответ

1

Существует несколько способов только рассказать о значительных корреляциях. Во-первых, вы можете передать дополнительные аргументы функции qgraph(). Более подробную информацию вы можете найти в документации. Вызов функции, приведенный ниже, должен иметь значения, близкие к тому, что необходимо.

qgraph(cor_d100_partition_all3 
     , layout="spring" 
     , label.cex=0.9 
     , labels=names(d100_partition_all3) 
     , label.scale=FALSE 
     , details = TRUE 
     , minimum='sig' # minimum based on statistical significance 
     ,alpha=0.05 # significance criteria 
     ,bonf=F # should Bonferroni correction be used 
     ,sampleSize=6 # number of observations 
) 

enter image description here

Второй вариант заключается в создании модифицированной корреляционной матрицы. Когда корреляции не являются статистически значимыми на основе вашей функции cor.mtest(), значение устанавливается в NA в модифицированной корреляционной матрице. Эта модифицированная матрица нанесена на график. Основной визуальной разницей между первым и вторым решениями является относительная линейная масса.

# initializing modified correlation matrix 
cor_d100_partition_all3_mod <- cor_d100_partition_all3 

# looping through all elements and setting values to NA when p-values is greater than 0.05 
for(i in 1:nrow(cor_d100_partition_all3)){ 
    for(j in 1:nrow(cor_d100_partition_all3)){ 
    if(p.mat[i,j] > 0.05){ 
     cor_d100_partition_all3_mod[i,j] <- NA 
    } 
    } 
} 

# plotting result 
qgraph(cor_d100_partition_all3_mod 
     ,layout="spring" 
     ,label.cex=0.7 
     ,labels=names(d100_partition_all3) 
     ,label.scale=FALSE 
     ,details = F 
     ) 

enter image description here

+0

Великий ответ, хорошая работа! – eFF

+0

Привет, Кальвин, мне интересно, может ли qgraph визуализировать метки границ за пределами реального края? Я пытаюсь вставить метки границ вне границ или возможности чтения. Мне особенно не нравится вариант включения белого bg под меткой, он закручивает край. Согласно руководству, можно отрегулировать положение метки края только вдоль линии, но не сбоку. Можно ли обойти эту проблему? – eFF

+1

Возможно, вам стоит задать новый вопрос, чтобы больше людей могли отвечать и делиться цифрами кода и примера. У меня есть начальное решение, но я не могу показать пример в комментарии. –

Смежные вопросы