【R语言】R语言函数练习——东北大学大数据班R实训第四次作业
R语言:常用apply函数(apply,tapply,sapply,lapply)用法介绍
R语言aggregate函数
R语言学习笔记(六)——apply函数系列与相关函数(by,aggregate,cut,factor)
prop.table函数
R语言table()函数
列联表
R语言学习笔记 —— table 函数的应用
margin.table()函数:
R语言-频数统计函数
卡方检验的R语言实现
卡方独立性检验chisq.test()
克莱姆V(克莱姆相关系数、克莱姆关联系数、独立系数)的MATLAB计算
列联相关系数
R语言入门之相关性
R语言安装包出现的问题及解决方案
Pearson、Spearman、Polyserial相关系数简介及R计算
协方差矩阵和相关系数矩阵(R语言)
R语言警告:Cannot compute exact p-value with ties的处理方法
R语言进行的变量相关性显著性检验
原答案中的第一、三题并无更新,但是缺少了第二题的全部内容,第二题题目及答案见下方,不在此处另作篇幅叙述。
实验四 数据分析
题目1:
1.1通过读取“hospital-data.csv”将数据保存到df中,获取该数据的条数;查看数据中的前5条数据。
df<-read.csv("hospital-data.csv")
nrow(df)
head(df,n=5)
1.2查看数据概况;求得邮编的范围。
summary(df)
range(df$ZIP.Code)
1.3我们默认电话号码是个数值,没有实际意义;应用sapply函数,通过调用用户自定义函数,返回电话号码的最大值,最小值,均值,中位数,标准差和方差。
getSummary<-function(x,na.omit=FALSE){
if(na.omit)
x<-x[!is.na(x)]
getMax<-max(x)
getMin<-min(x)
getMean<-mean(x)
getMedian<-median(x)
getSd<-sd(x)
getVar<-var(x)
return(c(max=getMax,min=getMin,mean=getMean,median=getMedian,sd=getSd,var=getVar))
}
sapply(df["Phone.Number"], getSummary,na.omit=TRUE)
1.4利用aggregate求取各州的电话号码的中位数。
aggregate(df["Phone.Number"],by=list(State=df$State),median)
1.5利用by求取各城市的电话号码的最大值和最小值;显示结果的前3条数据。
getMax_Min<-function(x,na.omit=FALSE){
if(na.omit){
x<-na.omit(x)
}
getMax<-max(x)
getMin<-min(x)
return(c(max=getMax,min=getMin))
}
head(by(df["Phone.Number"],df$City,getMax_Min,na.omit=TRUE),n=3)
1.6对所属州生成简单的频数统计表;并将这个频数表转化为比例值。
mytable <- table(df$State)
mytable
mytable<-prop.table(mytable)
mytable
1.7建立所属州和医院类型的二维列联表,命名为mycontable;按列生成边际和。
mycontable<-table(df$State,df$Hospital.Type)
head(mycontable)
margin.table(mycontable, 2)
1.8利用 CrossTable建立所属乡镇和是否提供急救服务字段的二维列联表,命名
为mycrosstable。(注:安装gmodels 包)
library(gmodels)
mycrosstable <- CrossTable(df$County,df$Emergency.Services)
题目2:
2.1通过读取文件death rate.csv获取数据保存到death中,通过卡方检验来检验年龄与男性生存人口数(二级列联表)之间是否独立。
library(vcd)death<-read.csv("death rate.csv")death<-na.omit(death)deathTable<-table(death$Age,death$Male_Exp)chisq.test(deathTable)
答:从结果显示,p-value为1,可认为是Age,Male_Exp不独立,即年龄与男性生存人口数之间不独立,存在某种相关关系。
2.2通过assocstats函数来度量年龄与男性的死亡率(二级列联表)之间的相关性。
deathTable2<-table(death$Age,death$q_male)assocstats(deathTable2)
答:通过assocstats函数可以看到,列联系数(coefficient_of_contingency)的值接近1,克莱姆相关系数(Cramer’s_V)的值接近1,表明年龄与男性的死亡率之间具有很强的相关性。
2.3计算年龄与男性的死亡率之间的Pearson和Spearman相关系数;和death中所有变量的协方差。
death3<-death[c("Age","q_male")]death3 <- scale(death3)cor_pearson <- cor(death3, method = 'pearson')print("Pearson相关系数矩阵为:")cor_pearsonprint("Spearman相关系数矩阵为:")cor_spearman <- cor(death3, method = 'spearman')cor_spearmanprint("协方差为:")cov(death)
2.4检验女性生存人口数和男性生存人口数之间的相关性的显著性。
print("检验Pearson相关性的显著性为:")cor.test(death$Female_Exp,death$Male_Exp,alternative="two.sided",method="pearson")print("检验Spearman相关性的显著性为:")cor.test(death$Female_Exp,death$Male_Exp,alternative="two.sided",method="spearman",exact=FALSE)
题目3:
3.1通过读取文件outcome-of-care-measures.csv获取数据保存到care_df中,通过写一个名为best的函数,找到一个州中最好的医院,函数有两个参数,一个是有两个字母缩写的州名称,另一个是结果名称,包括(heart attack,heart failure,pneumonia),函数的返回结果为30天死亡率最低的医院名称。在处理排名的时候,如果出现死亡率相等的情况,将医院按照字母表顺序排序,取第一家医院。注意检查读入数据的类型,以免排序的时候出现问题!!
函数模板如下
best <-function(state, outcome) {
##code
}
函数要检查输入变量的有效性,如果输入一个无效的州名,函数应该停止程序,并提示”invalid state”,同样当输入的outcome参数有误时,应提示”invalid outcome”。
函数检验:
best(“TX”, “heart failure”)
best(“MD”, “heart attack”)
best(“MD”, “pneumonia”)
best(“BB”, “heart attack”)
best(“NY”, “hert attack”)
care_df <- read.csv("outcome-of-care-measures.csv")best <- function(state, outcome) { if (!state %in% care_df$State) return("invalid state") if (!outcome %in% c("heart attack", "heart failure", "pneumonia")) return("invalid outcome") a <- care_df[care_df$State == state,] if (outcome == "heart attack") { a <-a[a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack != "Not Available",] a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack<-as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) b <-a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack), ] } else if (outcome == "heart failure") { a <-a[a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure != "Not Available",] a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure<-as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure) b <-a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure), ] } else{ a <-a[a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia != "Not Available",] a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia<-as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia) b <-a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia), ] } return(hospital = b[1,]["Hospital.Name"])}
进行函数检验:
hospital=best("TX", "heart failure")hospital
hospital=best("MD", "heart attack")hospital
hospital=best("MD", "pneumonia")hospital
hospital=best("BB", "heart attack")hospital
hospital=best("NY", "hert attack")hospital