2016-11-12 22 views
0

我其中我試圖只母豬10% 我想此使用corrr使用corrr

予取的相關性,然後繪製上述的相關性的相關性的數據幀繪製之前指定的相關性強度我的數據集的,然後過濾到絕對值> 0.1,但它在網絡曲線段失敗在UseMethod(「network_plot」)

錯誤: 關於「network_plot」不適用方法施加到對象類「c('tbl_df','tbl','data.frame')」

library(tidyverse) 
library(corrr) 

# Create the Dataframe 
mydf <- data.frame(a=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        b=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        c=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        d=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        e=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        f=sample(rnorm(n = 100,sd = 15),replace=TRUE)) 


test <- mydf %>% 
    correlate(method = "spearman") %>% 
    gather("n", "corr", 2:7, na.rm = TRUE) %>% 
    filter(abs(corr) > 0.1) %>% 
    spread(rowname,corr) %>% 
    network_plot(legend = TRUE) 

我看到documentation的,你可以指定要可視化相關的包,但似乎仍然打印標籤,即使我已要求他們不要被列入這就是爲什麼我去下來收集/傳播途徑

network_plot(min_cor = .2, legend = TRUE) 

謝謝您的時間

+0

你的地方了'correlate'通話和'network_plot'之間失去了'cor_df'類安裝corrr的最新開發版本。所以'test = mydf%>%...%>%spread(rowname,corr)',然後'class(test)= c(「cor_df」,class(test))',然後做'network_plot(test, legend = TRUE)'。 – MichaelChirico

+0

你應該也可以強制調用'network_plot.cor_df':'test = mydf%>%...%>%corrr ::: network_plot.cor_df(legend = TRUE)' – MichaelChirico

+0

也可以考慮把它作爲[問題](https://github.com/drsimonj/corrr/issues)在'corrr' GitHub頁面上,因爲應該有一個'network_plot.default'方法,它出現在那裏沒有。 – MichaelChirico

回答

2

感謝提醒我通過電子郵件這個問題(我將分別回答時,我有更多的時間)。我現在就放下一個快速解決方案。

這是一個有趣的問題。從我能收集到的信息來看,你想完全排除任何與絕對量級之間不相關的變量。

如您所述,指定min_cor將停止繪製路徑,但不會停止變量本身。

我可能會在GitHub頁面上添加一個問題,並嘗試在將來解決它。現在,這裏有一個解決方法,從purrr軟件包獲得一些幫助。

library(corrr) 
library(purrr) 

mydf <- data.frame(a=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        b=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        c=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        d=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        e=sample(rnorm(n = 100,sd = 15),replace=TRUE), 
        f=sample(rnorm(n = 100,sd = 15),replace=TRUE)) 

# Create the correlation data frame 
rdf <- mydf %>% correlate(method = "spearman") 

# Identify which variables to keep 
to_keep <- map_lgl(rdf, ~ !is.numeric(.) || any(abs(.) > .1)) 
to_keep <- names(to_keep)[!is.na(to_keep)] 

# Create the network plot 
rdf %>% 
    focus_(.dots = to_keep, mirror = TRUE) %>% 
    network_plot(legend = TRUE, min_cor = .1) 

如果這不起作用,你可能需要通過devtools::install_github("drsimonj/corrr")

+0

嗨@Simon傑克遜。感謝您的迴應。當我運行這段代碼時,它會在圖表上繪製rownames a-f,但它似乎並沒有繪製出相關性 - 標籤之間的界限代表了關係 –

+0

@JohnSmith我認爲這可能是兩件事之一。 (1)鑑於相關性接近零(.1),無論如何它們可能幾乎不可見。 (2)有時您需要縮放(即,如果使用RStudio,請單擊繪圖面板上的縮放按鈕)以顯示路徑。 –

+0

嗨@Simon傑克遜。對不起,遲到回到你身邊。這正是我想要完成的。你是對的。看起來相關性太低而無法在圖表中看到。非常感謝你的時間 –