应用统计分析作业四:数据框中因子型数据的处理

library(foreign)
df<-read.spss("meph.sav ",to.data.frame=TRUE)
###1. 将white与others合并为一个变量
attach(df)

contrasts(df$RACE1)# 语句只能用于factor(因子型)
levels(df$RACE1) <- list("WHITE"=c("others","white"),"BLACK"="Black","NATIVE"="Native","ASIAN"="Asian")
contrasts(df$RACE1)

2. 挑出因子变量合并为一个数据集

names(df)
df1 <- subset(df,select=c(GENDER,RACE1,REGION1,EDUC1,PHSTAT1,MNHPOOR,ANYLIMIT,INCOME1,insure,poisexp))

3. 查看各变量的因子赋值

detach(df)
attach(df1)

box <- list(0)
for (i in 1:ncol(df1)){
  box[[i]]<-contrasts(df1[,i]) # 这句语句只能用于factor(因子型)
}
box

4. 调整GENDER和RACE1的参考值

contrasts(df1$GENDER)
contrasts(df1$RACE1)
df1$GENDER <- relevel(df1$GENDER,ref="male") # ref=虚拟变量都取0的那个值,relevel重新确定因子型变量的基准
df1$RACE1 <- relevel(df1$RACE1,ref="ASIAN")

5. 计算percentage of data

prop.table(table(df1$RACE1))
box1 <- list(0)
for (i in 1:ncol(df1)){
  box1[[i]]<-prop.table(table(df1[,i])) # 这句语句只能用于factor(因子型)
}
box1

6. 计算在每一个level上正的有多少

PPE <-function(it){
  name <- levels(it) # level的值
  level <- nlevels(it) # 有几个level
  m <- matrix(0,nrow=2,ncol=level) # 两行n列
  for(i in 1:level){
     prob <- sum(it==name[i]&df1$poisexp=="health expenditure is positive")/sum(it==name[i])
     m[,i] <- rbind(name[i],prob)
  }
  return(m)
}
for (i in 1:length(df1)){
  print(PPE(df1[,i]))
}

7. 导出数据

write.csv(df1,"meph.csv")

8. 比较两个模型的适用性

fit1 <- glm()
fit1 <- glm(poisexp~ GENDER + RACE1 + REGION1 + EDUC1 + PHSTAT1 + MNHPOOR + ANYLIMIT + INCOME1 + insure,  
            family=binomial(link="logit"), data=df1)
fit2 <- glm(poisexp~GENDER+RACE1+REGION1+EDUC1+PHSTAT1+ANYLIMIT+INCOME1+insure,  
                               family=binomial(link="logit"), data=df1)
anova(fit1,fit2) # 根据结果,应使用fit.reduced

9. 预测正确率

df1$prob <- predict(fit2,newdata=df1,type="response")
contrasts(df1$poisexp)
df1$ppE <- ifelse(df1$prob>0.5,"health expenditure is positive","otherwise")
df1$Right <- ifelse(df1$ppE==df1$poisexp,1,0)
prop.table(table(df1$Right))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值