R_Studio(學生成績)對數據缺失值md.pattern()、異常值分析(箱線圖)


 

 

  我們發現這張Gary.csv表格存在學生成績不完全的(五十三名學生,三名學生存在成績不完整、共四個不完整成績)

    79號大學語文、高等數學

    96號中國近代史綱要

    65號大學體育

 

  

 

   

 

(1)NA表示數據集中的該數據遺失、不存在。在針對具有NA的數據集進行函數操作的時候,該NA不會被直接剔除。如x<-c(1,2,3,NA,4),取mean(x),則結果為NA,如果想去除NA的影響,需要顯式告知mean方法,如 mean(x,na.rm=T);NA是沒有自己的mode的,在vector中,它會“追隨”其他數據的類型,比如剛剛的x,mode(x)為numeric,mode(x[4])亦然。

(2) NULL表示未知的狀態。它不會在計算之中,如x<-c(1,2,3,NULL,4),取mean(x),結果為2.5。NULL是不算數的,length(c(NULL))為0,而length(c(NA))為1。可見NA“占着”位置,它存在着,而NULL沒有“占着”位置,或者說,“不知道”有沒有真正的數據。

    在R語言中缺失值通常以NA表示,判斷是否缺失值的函數是is.na。
    另一個常用到的函數是complete.cases,它對數據框進行分析,判斷某一觀測樣本是否完整。
NA與NULL的區別

 

setwd('D:\\data')                                #設置工作目錄
list.files()                                    #列出工作目錄下的文件
dat=read.csv(file="Gary.csv",header=TRUE)        #打開Gary.csv文件


is.na(dat)                                       #對數據進行判空,空值返回TRUE
complete.cases(dat)                              #對數據行進行判空,存在空值的行返回TRUE

sum(complete.cases(dat))                         #統計未缺失數
sum(!complete.cases(dat))                        #統計缺失數
mean(!complete.cases(dat))                       #統計缺失比例
dat[!complete.cases(dat),]                       #返回存在空值行數據

library(mice)                                   
md.pattern(dat)                                  #針對復雜的數據集值進行處理


#異常值檢測箱線圖
sp<-boxplot(dat$"大學語文",boxwex=0.7,norch=FALSE)
title("大學語文")
xi=1.1
sd.s=sd(dat[complete.cases(dat),]$"大學語文")   #標准差
mn.s=mean(dat[complete.cases(dat),]$"大學語文")  #均值
points(xi,mn.s,col="red",pch=18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1)

text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)],
     sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red")

plot(saledata[,1],saledata[,2])
lines(saledata[,2])
Gary.R

 

 

對成績數據進行缺失值分析,並表述分析過程

 

 

處理方法

  對數據進行判空,空值返回TRUE

    is.na(dat) 

  對數據行進行判空,存在空值的行返回TRUE
    complete.cases(dat) 

 

  統計未缺失數

    sum(complete.cases(dat)) 

  統計缺失數
    sum(!complete.cases(dat)) 

  統計缺失比例
    mean(!complete.cases(dat)) 

  返回存在空值行數據
    dat[!complete.cases(dat),] 

 

  依賴包mice

  md.pattern(dat) #針對復雜的數據集值進行處理

 

 

 

   md.pattern()

    依賴包mice

       生成一個以矩陣或數據框形式展示缺失值模式的表格

 

 

 

  0表示變量的列中沒有缺失,1則表示有缺失值

   第一行第一個數據:完整成績人數

         第二個數據至倒數第二個數據:列出全部學生考試科目

              最后一個數據:缺少考試科目數量(爭對復雜數據,這里象對數據簡單)

   第二行至倒數第二行:缺少考試成績學生信息

      第二行表示存在一個學生缺少 中國近代史綱要成績 缺少成績科目數量為1

         第三行表示存在一個學生缺少 大學語文和高等數學 缺少成績科目數量為2

      第四行表示存在一個學生缺少 大學體育 缺少成績科目數量為1

  最后一行:給出了每個科目的缺失值數目(中國近代史綱要成績、大學語文和高等數學、大學體育)

      最后一個數據:缺少科目學生人數(3人)

 

 

對成績數據進行異常值分析,並表述分析過程

 

  箱線圖  傳送門

  箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數據中的五個統計量:最小值、第一四分位數、中位數、第三四分位數與最大值來描述數據的一種方法,它也可以粗略地看出數據是否具有有對稱性,分布的分散程度等信息,特別可以用於對幾個樣本的比較。  

 

  

 

 

 

 

#異常值檢測箱線圖
sp<-boxplot(dat$"大學語文",boxwex=0.7,norch=FALSE)
title("大學語文")
xi=1.1
sd.s=sd(dat[complete.cases(dat),]$"大學語文")   #標准差
mn.s=mean(dat[complete.cases(dat),]$"大學語文")  #均值
points(xi,mn.s,col="red",pch=18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1)

text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)],
     sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red")

plot(saledata[,1],saledata[,2])
lines(saledata[,2])

 

 

   提示錯誤:Error in text.default(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)),  : 'labels'長度不能設成零

 

  測試科目 大學語文 時盡然無恥的報錯了 Σ(= = !)...

 

  sp$out:結果中會自帶異常值,就是下面代碼中的sp$out,這個是做箱型圖,按照上下邊界之外為異常值進行判定的

 
   異常值可能對統計結果(均值)參數不對稱的影響,因此導致誤導性解釋

  對數據進行規范化目的:規范化目的是使結構更合理,消除存儲異常,使數據冗余盡量小,便於插入,刪除,和跟新

 

   測試高等數學

 

 

  成功畫出箱線圖!!

 

   測試 高級語言程序設計 

 

   成功畫出箱線圖!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM