R语言入门第五集 实验四:数据分析

R语言入门第五集 实验四:数据分析



一、资源

【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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值