r語言聚類演算法
㈠ 李東風r語言教程
李東風r語言教程是一份面向初學者的r語言學習教材,該教程共分為五個部分,包括入門篇、數據分析篇、數據清洗篇、數據可視化篇和高級應用篇,每個部分包含多個章節。
總之,李東風r語言教租運程是一份內容全面、易於理解的r語言學習教材,對於想要學習r語言的初學者具有較高的實用價值。
㈡ 懸賞R語言作業答案
# 一、R基本操作
# 1、將數據文件mydata1.txt按照以下要求整理成標准形式。
#(1)讀入數據文件mydata.txt命名為insurance。
insurance<-read.table("mydata1.txt")
head(insurance)
dim(insurance)#192個數據
#(2)將insurance轉換為3列的矩陣。
insurance<-matrix(insurance$V1,nrow = 64,ncol = 3)#nrow =192/3=64
insurance
#(3)將insurance轉換為數據框。
insurance<-as.data.frame(insurance)
class(insurance)
#(4)將列名命名為"District", "Holders"和"Claims"。
names(insurance)<-c("District", "Holders","Claims")
insurance
#(5)隨機無放回抽取50行數據。
sub<-insurance[sample(1:nrow(insurance),50),]#無放回不用設置replace
sub
#(6)將抽樣數據寫入result1.txt。
write.table(sub,"result1.txt",row.names = FALSE)
######################################################################
# 2、將數據文件mydata2.txt按照以下要求整理成標准形式。
#(1)讀入數據文件mydata2.txt命名為iris。
iris<-read.table("mydata2.txt")
head(iris)
dim(iris)#600個數據
#(2)將iris轉換為4列的矩陣。
iris<-matrix(iris$V1,nrow = 150,ncol = 4)#nrow =600/3=150
iris
#(3)將iris轉換為數據框。
iris<-as.data.frame(iris)
class(iris)
#(4)將列名命名為"Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"。
names(iris)<-c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
iris
#(5)隨機無放回抽取90行數搭弊據。
sub<-iris[sample(1:nrow(iris),90),]#無放回不用設置replace
sub
#(6)將抽樣數據寫入result2.txt。
write.table(sub,"result2.txt",row.names = FALSE)
######################################################################
# 3.將數據文件data.csv按照以下要求進行悔枝陵數據預處理。
#(1)讀入數據文件data.csv命名為nhanes2。
nhanes2<-read.csv("data.csv")
#(2) 載入缺失值處理所需要的包。
install.packages("lattice")
install.packages("MASS")
install.packages("nnet"碧戚)
library(lattice)
library(MASS)
library(nnet)
#(3) 判斷nhanes2是否存在缺失值。
sum(is.na(nhanes2))
#(4) 利用插補法處理chl變數的缺失值。
sub=which(is.na(nhanes2[,4])==TRUE)#在數據集中chl變數是第4列,返回nhanes2數據集中第4列為NA的行
dataTR<-nhanes2[-sub,]#將第4列不為NA的數存入數據集dataTR
dataTE<-nhanes2[sub,]#將第4列為NA的數存入數據集dataTE中
dataTE[,4]<-sample(dataTR[,4],length(dataTE[,4]),replace = T)#在非缺失值中簡單抽樣
dataTE
#(5) 將插補法處理後的數據寫入result3.txt。
write.table(dataTE,"result3.txt",row.names = FALSE)
######################################################################
######################################################################
#二、函數調用
#1、測得某班學術X(身高(cm))與Y(體重(kg))的數據如下,試畫出散點圖,建立線性回歸方程,並作進一步分析。
# (1) 建立數據集,並畫出散點圖,考察數據點的分布趨勢,看是否呈直線條狀分布。
x1<-c(171,175,159,155,152,158,154,164,168,166,159,164)#身高
y1<-c(57,64,41,38,35,44,41,51,57,49,47,46)#體重
#構建數據集
model <- data.frame(x1,y1)
#探索性分析-做散點圖查看數據的分布情況:
plot(x1,y1)
# (2)進行回歸分析,列出回歸方程,畫擬合線,並對結果進行解讀。
# 用lm()函數構建模型
lm.reg<-lm(y1~ x1)
# 添加回歸曲線查看擬合效果
abline(lm.reg)
#模型解讀
summary(lm.reg)
# (3)對回歸系數進行假設檢驗。
anova(lm.reg) # 回歸模型的方差分析
summary(lm.reg) #回歸系數t檢驗:提取模型計算結果,其中有t檢驗的結果
# (4)對回歸模型進行診斷。
#模型檢驗對方程進行進一步檢驗,以檢查回歸方程是否滿足模型的先驗條件及模型的穩健性。
par(mfrow=c(2,2))#畫布分面
plot(lm.reg)
#結果解讀:
#1.左上圖:殘差與擬合圖,理論上散點應該散亂的分布在橫線兩側;
#2.右上圖:正太Q-Q圖,用於檢驗因變數的正太分布性,若服從正太分布,則散點應分布在一條直線線
#3.左下圖:齊方差檢驗,若滿足其方差,則散點在水平線周圍隨機分布
#4.右下圖:獨立性檢驗,即一個樣本是否會影響另一個樣本
#################################################################
#2、研究某抗心律失常葯對電刺激狗右心室致顫闕的影響,實驗測得狗靜脈注射不同劑量的抗心律失常葯與右心室致顫闕的數據如下,試畫出散點圖,建立線性回歸方程,並作進一步分析。
# (1) 建立數據集,並畫出散點圖,考察數據點的分布趨勢,看是否呈直線條狀分布。
x <- c(1,3,5,7,9)
y <- c(8.03, 14.97, 19.23, 27.83, 36.23)
#構建數據集
model <- data.frame(x,y)
#探索性分析-做散點圖查看數據的分布情況:
plot(model)#畫散點圖
# (2)進行回歸分析,列出回歸方程,畫擬合線,並對結果進行解讀。
# 用lm()函數構建模型
fm <- lm(y ~ x)#建立回歸模型
fm
# 添加回歸曲線查看擬合效果
abline(fm)# 添加回歸曲線至散點圖
#模型解讀
summary(fm)
# (3)對回歸系數進行假設檢驗。
anova(fm) # 回歸模型的方差分析
summary(fm) # 提取模型計算結果,其中有t檢驗的結果
# (4)對回歸模型進行診斷。
#模型檢驗對方程進行進一步檢驗,以檢查回歸方程是否滿足模型的先驗條件及模型的穩健性。
par(mfrow=c(2,2))#畫布分面
plot(fm)
#結果解讀:
#1.左上圖:殘差與擬合圖,理論上散點應該散亂的分布在橫線兩側;
#2.右上圖:正太Q-Q圖,用於檢驗因變數的正太分布性,若服從正太分布,則散點應分布在一條直線線
#3.左下圖:齊方差檢驗,若滿足其方差,則散點在水平線周圍隨機分布
#4.右下圖:獨立性檢驗,即一個樣本是否會影響另一個樣本
##################################################################
# 3、countries數據集含有69個國家和地區的出生率與死亡率。
# (1) 請使用K-均值聚類將樣本點聚為3個類別。
countries=read.csv("countries.csv")
head(countries)#查看前6行
names(countries)=c("country","birth","death")#修改變數名稱
var=as.character(countries$country)#將變數country轉為字元型並賦值給var
for(i in 1:69) row.names(countries)[i]=var[i]#將數據集的行名命名為國家名稱
km1=kmeans(countries[,-1],center=3)#用kmeans演算法對countries數據集進行聚類
# (2) 輸出聚類結果及各類別的中心點坐標。
km1$cluster#獲取類別
km1$centers#獲取中心點坐標
# (3) 繪制聚類結果將中心點以星號標識。
#畫出聚為四類的類別圖,標注中心點。
plot(countries[,-1],pch=c(1,2,3))
#將中心點用星號標示出來
points(km1$centers,pch=8,col="red")
#對中心點添加標注
legend(km1$centers[1,1],km1$centers[1,2],"Center_1",bty="n",xjust=0.5,cex=0.8)
legend(km1$centers[2,1],km1$centers[2,2],"Center_2",bty="n",xjust=0.5,cex=0.8)
legend(km1$centers[3,1],km1$centers[3,2],"Center_3",bty="n",xjust=0.5,cex=0.8)
# (4) 判斷與中國大陸同屬於一個類別的國家和地區有哪些。
cluster_CHINA=km1$cluster[which(countries$country=="CHINA")]
which(km1$cluster==cluster_CHINA)
###############################################################
###############################################################
#三、數據分析
# 1、使用arules軟體包中的Groceries數據集,該數據集是某一食品雜貨店一個月的真實交易數據,使用R完成以下要求:(軟體包:arules;數據集:Groceries; 函數:apriori())
# (1)利用apriori()函數進行關聯分析,支持度為0.01,置信度為0.5。
install.packages("arules")
library(arules)
data("Groceries")
rules0<-apriori(Groceries,parameter=list(support=0.01,confidence=0.5))
inspect(rules0[1:10])
# (2)利用sort()函數按照支持度排序。
rules.sorted_sup<-sort(rules0,by="support")
inspect(rules.sorted_sup[1:5])
# (3)捆綁銷售:尋找蛋黃醬(mayonnaise)的捆綁商品。(supp=0.001,conf=0.1,minlen=2, maxlen=6)
rules1=apriori(Groceries,parameter=list(minlen=2,maxlen=6,supp=0.001,conf=0.1),appearance=list(rhs="mayonnaise",default="lhs"))
inspect(rules1)
# (4)查看銷量最高的商品。
itemsets_apr=apriori(Groceries,parameter=list(supp=0.001,target="frequent itemsets"),control=list(sort=-1))
inspect(itemsets_apr[1:5])
# (5)適合捆綁銷售的商品。(supp=0.001,minlen=2, maxlen=3)
itemsets_apr1=eclat(Groceries,parameter=list(supp=0.001,minlen=2,maxlen=3,target="frequent itemsets"),control=list(sort=-1))
inspect(itemsets_apr1[1:5])
# (6)關聯規則的可視化(support=0.001,con=0.5)
install.packages("arulesViz")
library(arulesViz)
rules5=apriori(Groceries,parameter=list(support=0.002,con=0.5))
rules5
plot(rules5)
#######################################################################
# 2、根據breast-cancer-wisconsin.csv威斯康星州乳腺癌數據集,通過對數據的分析,提取出關鍵特徵來判斷乳腺癌患病情況。(軟體包:rpart;函數:rpart()。)
# (1)屬性名依次設置為"編號","腫塊厚度","腫塊大小","腫塊形狀","邊緣黏附","單個表皮細胞大小","細胞核大小","染色質","細胞核常規","有絲分裂","類別"),並將類別為2的設為"良性",為4的設為"惡性"。
install.packages("rpart")
library(rpart)
install.packages("rpart.plot")
library(rpart.plot)
#############載入數據
breast.cancer<-read.csv('breast-cancer-wisconsin.csv',header=F)
head(breast.cancer)
#數據整理
names(breast.cancer)=c("編號","腫塊厚度","腫塊大小","腫塊形狀","邊緣黏附","單個表皮細胞大小","細胞核大小","染色質","細胞核常規","有絲分裂","類別")
breast.cancer$類別[breast.cancer$類別==2]="良性"
breast.cancer$類別[breast.cancer$類別==4]="惡性"
head(breast.cancer)
# (2)抽取訓練數據集為原數據的70%,測試數據集取30%。
#數據預處理(分層抽樣,劃分訓練集和測試集)
#分別計算良性和惡性組中應抽取測試集樣本數,記為a,b
a=round(0.3*sum(breast.cancer$類別=="良性"))
b=round(0.3*sum(breast.cancer$類別=="惡性"))
a;b #輸出a,b值
install.packages("sampling")
library(sampling)
#使用strata函數對數據集中的「分組油耗」變數進行分層抽樣
sub=strata(breast.cancer,stratanames="類別",size=c(b,a),method="srswor")
sub #所抽出的所有測試集樣本信息
#生成訓練集train1和測試集test1
train1=breast.cancer[-sub$ID_unit,]
test1=breast.cancer[sub$ID_unit,]
nrow(train1);nrow(test1) #顯示訓練集和測試集的行數,檢查兩者比例是否為7:3
# (3) minsplit=5,建立決策樹。
#CART建立分類樹
formula_cla=類別~腫塊厚度+腫塊大小+腫塊形狀+邊緣黏附+單個表皮細胞大小+細胞核大小+染色質+細胞核常規+有絲分裂
cla1=rpart(formula_cla,train1,method="class",minsplit=5)#
cla1
# (4)選擇cp=0.05來剪枝。
######修改cp的值
cla2=rpart(formula_cla,train1,method="class",minsplit=5,cp=0.05)
cla2
# (5)畫出type為2和4的樹圖。
rpart.plot(cla1,type=2)#修改type
rpart.plot(cla1,type=4)
# (6)測試數據進行預測,並輸出混淆矩陣,給出模型准確率為。
#預測
pre1=predict(cla1,test1,type="class")
pre1
table(test1$類別,pre1)#獲取混淆矩陣
#計算樣本錯誤率
error1<-sum(as.numeric(pre1!=test1$類別))/nrow(test1)
error1
###################################################################
# 3、美國科羅拉多州某加油站連續 57 天的OVERSHORTS序列「OVERSHORTS.csv」
# (1) 判斷該序列的平穩性與純隨機性。
# (時序圖檢驗、白雜訊檢驗)
install.packages("fUnitRoots")
install.packages("TSA")
install.packages("forecast")
install.packages("zoo")
library(fUnitRoots)
library(TSA)
library(forecast)
library(zoo)
#讀取數據
c<-read.csv("OVERSHORTS.csv")
#轉換為時間序列
overshort<-ts(c$overshort,start = 1)
#平穩性,純隨機(白雜訊檢驗)
## 繪制序列的時間序列圖
plot.ts(overshort, xlab = "time", ylab = "prop")
##對序列做單位根檢驗
unitrootTest(overshort)
##對序列做白雜訊檢驗
Box.test(overshort, lag = 1, type = "Ljung-Box")
# (2) 如果序列平穩且非白雜訊,選擇適當模型擬合該序列的發展。(10分)
# (模型的識別、參數估計(模型顯著性、模型參數的顯著性))
#模型識別
##觀察自相關,偏自相關圖,模型定階
par(mfrow=c(1,2))
acf(overshort)###衰減到零是突然的,所以自相關系數1階截尾
pacf(overshort)### 衰減到零不是突然的,所以偏相關系數托尾
# 推薦模型為 MA(1)
##或者對序列進行模型識別,自動定階
auto.arima(overshort)# 推薦模型為 MA(1)
#參數估計
###模型檢驗
x.fit<-arima(overshort,order=c(0,0,1),method="ML")
x.fit
##對殘差x.fit$resial進行白雜訊檢驗
for(i in 1:2) print(Box.test(x.fit$resial,lag=6*i))
##P>0.05,接受原假設,即殘差為白雜訊,所以擬合模型顯著有效
####參數檢驗
###模型參數的顯著性檢驗
t1<--0.8477/0.1206
pt(t1,df=56,lower.tail=T) ###p<0.05參數顯著非零
t0<--4.7942/1.0253
pt(t0,df=56,lower.tail=T) ###p<0.05參數顯著非零
# (3) 利用擬合模型,預測該加油站未來5天的OVERSHORTS。(10分)
# (模型預測、繪制預測圖)
####模型預測
c<-read.csv("OVERSHORTS.csv")
x<-ts(c$overshort,start=1)
x.fit<-arima(x,order=c(0,0,1))
x.fit
x.fore<-forecast(x.fit,h=5)#預測
x.fore
plot(x.fore)
##############################################################
#4、使用是survival軟體包中的「pbc」數據集,該數據集記錄的是肝硬化數據, 使用R完成一下要求:(軟體包:survival;數據集:pbc; 函數:Surv()、survfit()、survdiff()、coxph()、cox.zph(), 將答案保存在「姓名.doc」文件中。)
# (1)生成生存分析對象,擬合生存曲線模型。
install.packages("survival") #安裝survival包
library(survival) #載入survival包
#使用survival包自帶的「pbc」數據集為例(418*20)
data("pbc")
str(pbc)
head(pbc)
#生成生存分析對象
Sur_Obj<-Surv(pbc$time,pbc$status)
Sur_Obj
#擬合曲線模型
model<-survfit(Sur_Obj~1)
summary(model)
# (2)兩種方法繪制生存曲線。
plot(model,ylab = "生存率",xlab="天")
#用survminer進行漂亮的展示
install.packages("survminer")
library(survminer)
ggsurvplot(model, data = pbc)
# (3)進行單因素比較分析,並進行結果解釋。
#survdiff(formula)函數進行log-rank檢驗。
survdiff(Sur_Obj~pbc$trt) #trt是分組條件
# (4)考慮年齡,性別以及trt是否會影響肝硬化的生存時間,進行多因素分析Cox模型的建立,並進行結果解釋。
coxmodel<-coxph(Sur_Obj~pbc$age+pbc$sex+pbc$bili)
coxmodel
# (5)模型診斷——PH檢驗。
zphmodel<-cox.zph(coxmodel)
zphmodel
##############################################################
# 5、life.csv為50位急性淋巴細胞白血病病人的數據,包括:入院治療時取得外轅血中細胞數X1,淋巴結浸潤等級X2,出院後有無鞏固治療X3(1表示有鞏固治療,0表示無鞏固治療);隨訪後,變數Y=0表示生存期在1年以內,Y=1表示生存時間在1年以上,使用R完成一下要求:(函數:glm(),predict()。)
# (1)建立全變數logistic回歸,對模型結果進行解釋。
life<-read.csv("life.csv")
#建立全變數logistic回歸
glm.sol<-glm(Y~X1+X2+X3, family=binomial, data=life)
#回歸模型解讀
summary(glm.sol)
# (2)預測當X1=5,X2=2,X3=0時,y的概率是多少?
pre<-predict(glm.sol, data.frame(X1=5,X2=2,X3=0))
p<-exp(pre)/(1+exp(pre))
p
# (3)預測當X1=5,X2=2,X3=1時,y的概率是多少?(6分)
pre<-predict(glm.sol, data.frame(X1=5,X2=2,X3=1))
p<-exp(pre)/(1+exp(pre))
p
# (4)對回歸模型參數進行檢驗,用step()函數做變數篩選。
step(glm.sol)
glm.new<-glm(Y~X2+X3, family=binomial, data=life)
summary(glm.new)
# (5)對篩選後的變數進行建模,預測。
pre<-predict(glm.new, data.frame(X2=2,X3=0))
p<-exp(pre)/(1+exp(pre))
p
pre<-predict(glm.new, data.frame(X2=2,X3=1))
p<-exp(pre)/(1+exp(pre))
p
㈢ 網路數據的統計分析-R語言實戰
資料:《Statistical Analysis of Network Data with R》
語言R常見的網路分析包:
網路分析研究大部分是描述性的工作。
網路的可視化 即是一門藝術,也是一門科學。
三元閉包體現了社會網路的「傳遞性」(transitivity),枚舉所有節點三元組中構成三角形的比值來表徵。
網路的可視化和數值特徵化是網路分析的首要步驟之一。
網路可視化視圖將數據的多個重要反面整合在一個圖表中。
該節點在多大程度上會與同類型或者不同類型的其他節點進行匹配,可以通過一種相關性統計量(所謂的同配系數)進行量化。
將復雜系統中感興趣的問題與合適的網路概括性度量匹配起來,是網路特徵化方法起作用的關鍵所在。
網路中的頻繁子圖模式
網路聚類系數的分布,用來檢驗社會網路的聚集性上
sand安裝包
網路數據統計分析 statistical analysis of network data
在CRAN上
G=(V,E)
節點 :vertices 或者 nodes
邊:edges 或者 links
節點數量:圖的階數 order
邊的數量:圖的規模 size
同構圖 isomorphic
無向 undirected
有向 directed graph 或者 digraph
邊:有向邊 directed edges 或 弧 arcs
雙向 mutual
小的圖形用 formulate來創建
把mg轉化為wg2
Zachary 空手道俱樂部網路 (karate club network)
數據集合實際上只存在兩個社團,分別以教練為中心和以主管為中心。
Lazega律師網路可視化
srt() 不能用使用 upgrade_graph()d代替
DrL演算法,針對大型網路可視化設計的布局演算法。
節點的節點,即社區節點(主題節點)
即一個中心節點,一其直接相連的鄰居,以及這些節點至今的邊。
度值不同的節點以何種方式彼此連接
圖的密度
全局聚類系數
局部聚類系數
互惠性 reciprocity
二元組普查