歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

R語言相關分布函數、統計函數的使用

分布函數家族: *func()
r : 隨機分布函數
d : 概率密度函數
p : 累積分布函數
q : 分位數函數

 func()表示具體的名稱如下表:

例子

#r :  隨機分布函數
#d :  概率密度函數
#p :  累積分布函數
#q :  分位數函數

#生成符合二項分布的數據
#  二項分布
#  X~(N,P) 
str(rbinom)

x<-rbinom(5,1,0.5)  #做1次試驗,假設正面概率為0.5,進行5次觀察,每1次試驗中正面出現的次數為別為 0 0 1 1 0
x<-rbinom(5,10,0.5) #做10次試驗,假設正面概率為0.5,進行5次觀察,每10次試驗中正面出現的次數分別為 4 4 7 6 6

x
plot(x)


#概率密度函數
y<-dbinom(40,100,0.5) #做100次試驗,假設正面概率為0.5,正面出現的次數為50次的概率是 0.01084387
y<-dbinom(40:50,100,0.5) ##做100次試驗,假設正面概率為0.5,正面出現的次數分別為40到50的概率分別為: 0.01084387...

sum(y) #累計概率

y<-dbinom(0:100,100,0.5) 

plot(y) #概率密度曲線
plot(0:100,y,pch=16) #概率密度曲線


#累計概率
z<-pbinom(50,100,0.5)    #累計概率 小於等於50的概率為0.5397946
z<-dbinom(0:50,100,0.5)
sum(z)


plot(pbinom(0:100,100,0.5))


#分為點
q = qbinom(0.5,100,0.5)  #在0.5分為點的數值為
q 

單變量統計函數

均值:mean
中位數:median
分位數:quantile
方差:var
標准差:sd
頻數表:table

偏度: Sk=sum((x[!is.na(x)]-Av)^3/Sd^3)/N #偏度

    <0 左偏  >0 右偏

峰度: Ku=sum((x[!is.na(x)]-Av)^4/Sd^4)/N-3 #峰度

    <3 坡度緩 >3 坡度陡

#單變量的描述統計

str(airquality) #R自帶的空氣質量數據集 str 結構structure的縮寫

summary(airquality) #匯總數據包括 最小值、分位數、平均數、中位數、最大值、缺失值(NA's)

#平均值
mean(airquality$Ozone, na.rm = T) #na.rm=T 對缺失值進行刪除,存在缺失值,結果為NA
mean(airquality$Temp, na.rm = T, trim = .01) #trim=.01 按百分比去掉頭尾的數,刪除極值


#中位數
median(airquality$Ozone, na.rm = T) 


#加權平均數
temp100 <- rnorm(100,30,1)  #通過正態分布生成100個隨機數,平均值為30

w <- 1:100 #生成每個值的權重值

wmt = weighted.mean(temp100,w,na.rm = T) #進行加權平均計算
mt = mean(temp100,na.rm = T)


#幾何平均數
x<- c(.045, .021, .255, .019)

xm = mean(x)

xg = exp(mean(log(x)))#exp指數 log對數


#中位數
median(temp100,na.rm = T)

#分位數
quantile(airquality$Temp, na.rm = T) 
  #  0%  25%  50%  75% 100%     50%中位數  0%最小值 25%上四分位數
  #  56   72   79   85   97 

quantile(airquality$Temp, na.rm = T, probs = c(0,0.1,0.9,1)) #通過probs自定義分位點

#方差
var(temp100)

#標准差
ts <- sd(temp100)
ts^2 #標准差的平方等於方差



#峰度和偏度
mysummary = function(x,...){
  Av=mean(x,na.rm = T)
  Sd=sd(x,na.rm = T)
  N=length(x[!is.na(x)])
  Sk=sum((x[!is.na(x)]-Av)^3/Sd^3)/N #偏度
  Ku=sum((x[!is.na(x)]-Av)^4/Sd^4)/N-3 #峰度
  
  result=c(argv=Av, sd=Sd, skew=Sk, kurt=Ku)
  return (result)
}
mysummary(temp100)
#        argv           sd         skew         kurt 
#30.109613023  1.033804058 -0.008489863 -0.597720454 

#通過apply進行提交
apply(airquality[,c(-5,-6)],2,FUN=mysummary)
#Ozone     Solar.R       Wind       Temp
#argv 42.129310 185.9315068 9.95751634 77.8823529
#sd   32.987885  90.0584222 3.52300135  9.4652697
#skew  1.209866  -0.4192893 0.34102753 -0.3705073
#kurt  1.112243  -1.0040581 0.02886468 -0.4628929

非單封分布:

#非單峰分布不能簡單計算均值

x=rnorm(100,50,9)
y=rnorm(200,150,9)

z=c(x,y)

plot(density(z)) #使用密度曲線畫圖


abline(v=mean(z),col=3,lw=3)

雙變量函數

協方差:cov

相關系數:cor 通過相關系數計算相關性

缺失值處理:行刪除、配對刪除等

#協方差 
cov(airquality[,-5:-6],use = 'complete.obs')            #行刪除,處理缺失值
cov(airquality[,-5:-6],use = 'pairwise.complete.obs')   #配對刪除,處理缺失值

#相關系數
cor(airquality[,-5:-6],use = 'complete.obs')            #行刪除
cor(airquality[,-5:-6],use = 'pairwise.complete.obs')   #配對刪除
#結果為對稱矩陣

Copyright © Linux教程網 All Rights Reserved