操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    “與君分享,愿君少走彎路。”--科白君

    "R實戰(zhàn)"專題·第7篇 編輯|科白維尼 1898字 | 4分鐘閱讀

    本期推送內(nèi)容相關性分析通常用來定量描述兩個變量之間的聯(lián)系,正相關?負相關?不存在相關?等。常見相關性指標:相關系數(shù)(參數(shù)檢驗),及(非參數(shù)檢驗)。本期與分享R語言相關分析時的小技巧:1)一個矩陣中等長度兩兩變量的相關性,常用到cor()函數(shù)和cor.test()函數(shù);2)一個矩陣中非等長度兩個變量的相關性,常用corr.test()函數(shù);3)兩個矩陣中變量對應的相關性,這里編了一個函數(shù)與大家分享。(本期不做偏相關分析的講解)

    簡單介紹:1)相關系數(shù)(積差相關系數(shù))通常用來表示相關性大小中最常用的指標。cor系數(shù)介于-1~1之間,越接近0相關性越弱,越接近-1 or 1則相關性越強,并存在對應的負正相關。

    2)等級相關系數(shù)(秩相關系數(shù))利用兩個變量的秩次大小進行比較,屬于非參數(shù)檢驗。

    3)等級相關系數(shù)(和諧系數(shù))也屬于一種非參數(shù)檢驗。

    開始R語言代碼講解:

    01

    單個矩陣中等長度兩變量的相關性

    等長度是兩個變量的樣本量相等。主要利用 cor()函數(shù)和 cor.test()函數(shù)對不同方法的講解。以一組滿足正態(tài)分布的連續(xù)變量和不滿足正態(tài)分布的有序變量進行對比。例子講解前,我們先用?cor()/help(cor)了解一下函數(shù)的用法和命令。

    knn算法 分類變量_分類變量和連續(xù)變量怎么做散點圖_用excel做散點圖形

    函數(shù)的基本命令:cor(x, use= , = )

    對應參數(shù)的描述:

    清楚了函數(shù)對應命令的參數(shù)后,進行例子的理解

    1 --滿足正態(tài)分布的連續(xù)變量利用str()檢查數(shù)據(jù)結構的結果,num表示數(shù)值型的連續(xù)變量。

    #1 構建一組符合正態(tài)分布的數(shù)據(jù)
    set.seed(1)
    a <- rnorm(n = 50, mean = 1, sd = 5)
    b <- rnorm(50, 2, 3)
    c <- rnorm(50, 3, 2)
    d <- rnorm(50, 0, 1)
    # 將上述構建的數(shù)據(jù)組合成數(shù)據(jù)框, 并檢查數(shù)據(jù)結構(num數(shù)值型)
    e <- data.frame(a, b, c, d);str(e)
    # pearson
    corr1 <- cor(e, method = "pearson");corr1
    # spearman
    corr2 <- cor(e, method = "spearman");corr2
    # kendall
    corr3 <- cor(e, method = "kendall");corr2

    輸出結果:當使用參數(shù)與非參數(shù)的方法對符合正態(tài)分布的連續(xù)變量進行相關性比較時,結果是存在差異的。為一個結果,而和為兩一個結果。

    2 --不滿足正態(tài)分布的有序變量

    用excel做散點圖形_分類變量和連續(xù)變量怎么做散點圖_knn算法 分類變量

    利用as.()將向量轉換成整數(shù)型的,使其變成有序變量,數(shù)據(jù)結構為int,表示整數(shù)型。

    #2 構建一組不滿足正態(tài)分布的數(shù)據(jù)
    set.seed(2)
    a1 <- as.integer(runif(n = 50, min = 1, max = 10))
    b1 <- as.integer(runif(n = 50, min = 0, max = 3))
    c1 <- as.integer(runif(n = 50, min = 1, max = 6))
    d1 <- data.frame(a1, b1, c1); str(d1)
    # pearson
    corr.1?<- cor(d1, method = "pearson");corr.1
    # spearman
    corr.2?<- cor(d1, method = "spearman");corr.2
    # kendall
    corr.3?<- cor(d1, method = "kendall");corr.2

    輸出結果:從結果也能發(fā)現(xiàn)不同方法進行的相關性分析確實存在差異,但是具體哪種更好,可能需要大家多做嘗試。

    接下來,利用cor.test()函數(shù)對上面例子做詳細展示,可以看得到對應的p值大小,有利于大家解讀和后續(xù)可視化。還是先咨詢下該函數(shù)的用法和對應參數(shù)。

    函數(shù)的基本命令:cor.test(x, y, = , = ,...)

    這里不做詳細介紹,有問題的話可以評論留言~但這里需要注意的是:不能直接用數(shù)據(jù)框進行分析,而是需要用兩兩向量,因此用$提取對應向量進行相關性分析。

    # cor.test
    aa <- cor.test(e$a,e$b);aa
    bb <- cor.test(d1$a1,d1$b1);bb

    分類變量和連續(xù)變量怎么做散點圖_用excel做散點圖形_knn算法 分類變量

    輸出結果:

    02

    單矩陣中非等長度兩變量的相關性

    當數(shù)據(jù)矩陣中存在大量缺失值時,可以利用corr.test()函數(shù)輕松化解難題。該函數(shù)可以直接對矩陣中的每兩兩變量進行相關性分析,同時能輸出對應cor系數(shù)和p值。另外,還可以對等長度的單矩陣進行相關性分析,因此相比上面cor()和cor.test()函數(shù),更加推薦corr.test()函數(shù)。但是大家一定要記住,該函數(shù)基于 psych R包,每次記得先(psych)。廢話不多說,進入例子學習:

    1 -- 單矩陣非等長度的相關性分析

    # 單矩陣非等長度的相關性分析
    ?corr.test()
    # corr.test
    library(psych)
    set.seed(3)
    df1 <- rnorm(50, 1, 2)
    df2 <- rnorm(100, 2, 3)
    df3 <- runif(200, 10, 20)
    df_all <- data.frame(df1, df2, df3);tail(df_all,20)
    df <- df_all
    # 需要將對應向量中非本身存在的數(shù)值替換成空值
    df[51:200, 1] <- NA
    df[101:200, 2] <- NA
    tail(df,100)
    str(df)
    corr.test(df, method = "pearson")

    先構建了一個沒有缺失的數(shù)據(jù)集分類變量和連續(xù)變量怎么做散點圖,這里需要強調(diào)的是,當多個向量之間的長度不同時,如果將其用data.frame構建成數(shù)據(jù)框,系統(tǒng)會默認將短向量按當前向量數(shù)值的順序補齊與其他向量長度保持一致。因此,如果我們要構建一個具有不等長的數(shù)據(jù)矩陣,需要對某列向量進行數(shù)值的缺失值替換,從而形成一個具有缺失值的數(shù)據(jù)框。

    分類變量和連續(xù)變量怎么做散點圖_用excel做散點圖形_knn算法 分類變量

    從結果來看,1)沒有報錯;2)也符合我們的預期,數(shù)據(jù)矩陣中每兩列之間都進行了相關性的比較;3)能看到樣本量的大小,對應的cor系數(shù)和p值大小。因此,該函數(shù)得到的結果可讀性比較高。

    -- 單矩陣等長度的相關性分析 (corr.test 函數(shù))

    這里就不寫太多代碼了,這個數(shù)據(jù)集在上個例子中就已經(jīng)展示了尾部5行,可以看到數(shù)據(jù)都是齊的,證明是等長度的數(shù)據(jù)矩陣。

    # 等長度的數(shù)據(jù)矩陣相關性分析
    str(df_all)
    corr.test(df_all, method = "pearson")

    輸出結果:首先看到樣本數(shù)量大小為200,這是等長的。其次,能夠詳細的看到對應輸出的結果,提高了整體的可讀性。

    進一步,對得到的結果進行繪圖

    這里介紹兩種專門繪制相關性矩陣分析的R包分類變量和連續(xù)變量怎么做散點圖,1);2)。

    # 繪圖
    #1 GGally 包
    ?ggcorr
    library(GGally)
    ggcorr(df,label=TRUE)

    #2 corrplot包
    ?corrplot
    library(corrplot)
    res1 <- cor.mtest(df, conf.level=0.95,use="complete.obs")
    N <- cor(df,use="complete.obs"?,method = "pearson") # use 是可以省略缺失值的相關性分析
    corrplot(N,
    ?????????p.mat=res1$p, # res1$p 中$表示提取符號 意為提取該數(shù)據(jù)的p列數(shù)據(jù),p為顯著性
    ?????????insig ="label_sig", # 如果“l(fā)abel_sig”,標記與pch顯著相關 用星號表示
    ?????????sig.level=c(0.001, 0.01, 0.05), # 0.001 表示3個星號 以此類推
    ?????????pch.col = "white",
    ?????????pch.cex = 1) # 數(shù)字,顏色標簽中的數(shù)字標簽的cex

    關于結果具體完善代碼就不細說了,有需要可以自行help然后查看描述及其例子。如果遇到問題,可以給推文評論或者私聊聯(lián)系~

    用excel做散點圖形_knn算法 分類變量_分類變量和連續(xù)變量怎么做散點圖

    03

    福利大贈送~自定義函數(shù)計算兩個矩陣等長度的相關性

    為什么說這是福利呢?因為從公司或者做實驗得到的同類型但不同的數(shù)據(jù)矩陣很多,也就是有多個數(shù)據(jù)集。如何直接對兩個數(shù)據(jù)矩陣之間做相關分析呢?目前好像沒有函數(shù)可以直接做到,于是我的好兄弟和同學--谷大俠。他自己自定義一個能夠計算兩個矩陣等長度的相關性,原本計劃是由他來寫這篇推送的,但他最近忙于畢業(yè),因此由我代勞。

    # 自定義函數(shù)--計算兩個矩陣之間的相關性
    cor_function<-function(x,y,method){
    ??library(reshape2)
    ??if?(is.null(y)) {
    ????r <- cor(x, method = method)
    ????sym <- TRUE
    ????n <- t(!is.na(x)) %*% (!is.na(x))
    ????t <- (r * sqrt(n - 2))/sqrt(1?- r^2)
    ????p <- -2?* expm1(pt(abs(t), (n - 2), log.p = TRUE))
    ????se <- sqrt((1?- r * r)/(n - 2))
    ????nvar <- ncol(r)
    ????p[p > 1] <- 1
    ????r_re<-reshape2::melt(r)
    ????r_re$value<-round(r_re$value,2)
    ????p_re<-reshape2::melt(p)
    ????Pz<-rep(1,nrow(p_re))
    ????Pz[p_re$value<=0.001]<-'***'
    ????Pz[p_re$value<=0.01&p_re$value>0.001]<-'**'
    ????Pz[p_re$value<0.05&p_re$value>0.01]<-'*'
    ????Pz[p_re$value>=0.05]<-NA
    ????p_re<-cbind(p_re,Pz)
    ????cor_data<-cbind(r_re,Pz)
    ??}
    ??
    ??else?{
    ????r <- cor(x, y, method = method)
    ????sym = FALSE
    ????n <- t(!is.na(x)) %*% (!is.na(y))
    ????t <- (r * sqrt(n - 2))/sqrt(1?- r^2)
    ????p <- -2?* expm1(pt(abs(t), (n - 2), log.p = TRUE))
    ????se <- sqrt((1?- r * r)/(n - 2))
    ????nvar <- ncol(r)
    ????p[p > 1] <- 1
    ????r_re<-reshape2::melt(r)
    ????r_re$value<-round(r_re$value,2)
    ????p_re<-reshape2::melt(p)
    ????Pz<-rep(1,nrow(p_re))
    ????Pz[p_re$value<=0.001]<-'***'
    ????Pz[p_re$value<0.01&p_re$value>0.001]<-'**'
    ????Pz[p_re$value<0.05&p_re$value>=0.01]<-'*'
    ????Pz[p_re$value>=0.05]<-NA
    ????p_re<-cbind(p_re,Pz)
    ????cor_data<-cbind(r_re,Pz)
    ??}
    ??result <- list(cor_data=cor_data,r = r_re, n = n, t = t, p = p_re, se = se)
    ??class(result) <- c("psych", "corr.test")
    ??return(result)
    }

    # 構建兩個矩陣
    dat1 <- mtcars[,3:7]
    dat2 <- iris[1:32,1:4]

    str(dat1)
    str(dat2)
    # 畫圖 ----------------------------------------------------------------------
    library(viridis)
    library(ggplot2)
    dat_cor <-cor_function(dat1,dat2,method='pearson')
    ggplot(data=dat_cor$cor_data)+ # $cor_data 提取相關性r值
    ??geom_tile(aes(x=Var1,y=Var2,fill=value))+ # x y 分別為dat_cor 中的Var1 Var2
    ??scale_fill_viridis(option="viridis",limits=c(-1,1))+
    ??theme(axis.text.x=element_text(hjust = 1,size=14),
    ????????axis.title.x=element_blank(),
    ????????axis.text.y=element_text(size=14),
    ????????axis.title.y=element_blank())+
    ??geom_text(data=dat_cor$cor_data,aes(x=Var1,y=Var2,label=value,hjust=0.5))

    關于函數(shù)定義的部分就不展開講解了,大家可以先copy進行使用。然后熟練掌握函數(shù)定義后就能理解了~

    結果輸出:

    往期推薦

網(wǎng)站首頁   |    關于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有