R语言学习笔记


文章目录

  • R语言学习笔记
  • probit回归
    • factor()和as.factor()
    • relevel()
  • 案例11.4复刻 glm函数
    • 整理变量
    • 回归:Logistic和Probit——glm()
      • family=binomial(link=logit)
      • family=binomial(link=probit)
    • 计算log likelihood
    • 结果输出
  • 比较probit和logistic

R语言中的数据类型之factor因子


probit回归

factor()和as.factor()

这两个没区别。

#MEPS DATA
Hexpend<-read.csv("HealthExpend.csv")  #导入数据# CHECK THE NAMES,DIMENSION IN THE FILE AND LIST THE FRIST
names(Hexpend)
dim(Hexpend)
Hexpend[1:8,]
attach(Hexpend)
n<-dim(Hexpend)[1]
POSEXP<-seq(0,0,length=n)
for(i in 1:n){if(EXPENDIP[i]!=0)POSEXP[i]=1}# ALTERNATIVE - FIT A GENERALIZED LINEAR MODEL;
PosExpglm = glm(POSEXP~GENDER,family=binomial(link=logit))
summary(PosExpglm)
logLik(PosExpglm)
summary(POSEXP)# FULL LOGIT MODEL
PosExpglmFull=glm(POSEXP~AGE+GENDER+factor(RACE)+factor(REGION)+factor(EDUC)+factor(PHSTAT)+factor(ANYLIMIT)+factor(INCOME)+factor(insure),family=binomial(link=logit))
summary(PosExpglmFull)
logLik(PosExpglmFull)Gender<-as.factor(GENDER)
PosExpglmFull=glm(POSEXP~AGE+C(Gender,base=1)+as.factor(RACE)+as.factor(REGION)+as.factor(EDUC)+as.factor(PHSTAT)+as.factor(ANYLIMIT)+as.factor(INCOME)+as.factor(insure),family=binomial(link=logit))
summary(PosExpglmFull)

relevel()

# CHANGE REFERANCE LEVELS TO AGREE WITH BOOK(DONE IN SAS)
RACE=relevel(factor(RACE),ref="WHITE")
REGION=relevel(factor(REGION),ref="WEST")
EDUC=relevel(factor(EDUC),ref="LHIGHSC")
PHSTAT=relevel(factor(PHSTAT),ref="EXCE")
INCOME=relevel(factor(INCOME),ref="POOR")

这里给的例子里没有factor,但不加会报错。
可以对比relevel前后的结果


案例11.4复刻 glm函数

Regression Modeling with Actuarial and Financial P315 案例11.4 Application: Medical Expenditures

下载数据HealthExpend.csv

HealthExpend<-read.csv("HealthExpend.csv")  #导入数据
str(HealthExpend)attach(HealthExpend)
n=2000 #共有2000个数据sink("result.txt")  #回归结果等储存在这里

整理变量

## 整理变量
#Ethnicity即RACE或RACE1
ASIAN<-seq(0,0,length=n)    # 1 if Asian 4.3 4.7
BLACK<-seq(0,0,length=n)    # 1 if Black 14.8 10.5
NATIVE<-seq(0,0,length=n)   #1 if Native 1.1 13.6???这个的描述统计结果不符#WHITE Reference level 79.9 7.5???other怎么处理#Region即REGION或REGION1
NORTHEAST<-seq(0,0,length=n)    # 1 if Northeast 14.3 10.1
MIDWEST<-seq(0,0,length=n)  # 1 if Midwest 19.7 8.7
SOUTH<-seq(0,0,length=n)    #1 if South 38.2 8.4#WEST Reference level 27.9 5.4#Education 即EDUC
COLLEGE<-seq(0,0,length=n)  # 1 if college or higher degree 27.2 6.8
HIGHSCHOOL<-seq(0,0,length=n)   # 1 if high school degree 43.3 7.9#Reference level is lower than high school degree 29.5 8.8#Self-rated physical health 即PHSTAT和PHSTAT1
POOR<-seq(0,0,length=n) # 1 if poor 3.8 36.0
FAIR<-seq(0,0,length=n) # 1 if fair 9.9 8.1
GOOD<-seq(0,0,length=n) # 1 if good 29.9 8.2
VGOOD<-seq(0,0,length=n)    # 1 if very good 31.1 6.3#Reference level is excellent health 25.4 5.1#Income compared to poverty line 即INCOME和INCOME1
HINCOME<-seq(0,0,length=n)  # 1 if high income 31.6 5.4
MINCOME<-seq(0,0,length=n)  # 1 if middle income 29.9 7.0
LINCOME<-seq(0,0,length=n)  # 1 if low income 15.8 8.3
NPOOR<-seq(0,0,length=n)    # 1 if near poor 5.8 9.5#Reference level is poor/negative 17.0 13.0#Insurance coverage insurance in any month of 2003
INSURE=insure# 1 if covered by public/private health 77.8 9.2 0 if have no health insurance in 2003 22.3 3.1#因变量
Y<-seq(0,0,length=n)for(i in 1:n)
{if(RACE[i]=="ASIAN")   ASIAN[i]=1if(RACE[i]=="BLACK") BLACK[i]=1if(RACE[i]=="NATIV") NATIVE[i]=1if(REGION[i]=="NORTHEAST")  NORTHEAST[i]=1if(REGION[i]=="MIDWEST") MIDWEST[i]=1   if(REGION[i]=="SOUTH")  SOUTH[i]=1 if(EDUC[i]=="COLLEGE")  COLLEGE[i]=1   if(EDUC[i]=="HIGHSCH")  HIGHSCHOOL[i]=1if(PHSTAT[i]=="POOR")   POOR[i]=1  if(PHSTAT[i]=="FAIR")   FAIR[i]=1if(PHSTAT[i]=="GOOD") GOOD[i]=1if(PHSTAT[i]=="VGOO") VGOOD[i]=1if(INCOME[i]=="HINCOME") HINCOME[i]=1if(INCOME[i]=="MINCOME")   MINCOME[i]=1if(INCOME[i]=="LINCOME")   LINCOME[i]=1if(INCOME[i]=="NPOOR") NPOOR[i]=1if(EXPENDIP[i]!=0)  Y[i]=1
}data<-data.frame(Y,AGE,GENDER,ASIAN,BLACK,NATIVE,NORTHEAST,MIDWEST,SOUTH,COLLEGE,HIGHSCHOOL,POOR,FAIR,GOOD,VGOOD,MNHPOOR,ANYLIMIT,HINCOME,MINCOME,LINCOME,NPOOR,INSURE) #用于回归的数据集
detach(HealthExpend)
attach(data)
m<-length(data)  #变量数
summary(data)   #描述统计

回归:Logistic和Probit——glm()

family=binomial(link=logit)

Logistic.full<-glm(Y~.,data=data,family=binomial(link=logit))
print(summary(Logistic.full))Logistic.reduced<-glm(Y~.-AGE-MNHPOOR,data=data,family=binomial(link=logit))
print(summary(Logistic.reduced))

family=binomial(link=probit)

Probit.reduced<-glm(Y~.-AGE-MNHPOOR,data=data,family=binomial(link=probit))
print(summary(Probit.reduced))

计算log likelihood

这个可以直接用logLik函数计算,这里是自己手动写了个程序……
我也是对自己无语了哈哈哈

#计算log likelihood===============================
LogLikelihood<-c(0,0,0)
logit<-function(z){ 1/(1+exp(-z))
}
#Logistic.full-----------------------------------
result<-seq(0,0,length=2000)
z<-seq(0,0,length=2000)
pai<-seq(0,0,length=2000)for(i in 1:n){for(j in 1:(m-1)){z[i]<-coef(Logistic.full)[j+1]*data[i,j+1]+z[i]}z[i]=z[i]+coef(Logistic.full)[1]pai[i]=logit(z[i])result[i]=Y[i]*log(pai[i])+(1-Y[i])*log(1-pai[i])
}LogLikelihood[1]<-sum(result)#Logistic.reduced-----------------------------------
result<-seq(0,0,length=2000)
z<-seq(0,0,length=2000)
pai<-seq(0,0,length=2000)for(i in 1:n){for(j in 1:(m-3)){z[i]<-coef(Logistic.reduced)[j+1]*data[i,names(coef(Logistic.reduced)[j+1])]+z[i]}z[i]=z[i]+coef(Logistic.reduced)[1]pai[i]=logit(z[i])result[i]=Y[i]*log(pai[i])+(1-Y[i])*log(1-pai[i])
}LogLikelihood[2]<-sum(result)#Probit.reduced-----------------------------------
result<-seq(0,0,length=2000)
z<-seq(0,0,length=2000)
pai<-seq(0,0,length=2000)for(i in 1:n){for(j in 1:(m-3)){z[i]<-coef(Probit.reduced)[j+1]*data[i,names(coef(Probit.reduced)[j+1])]+z[i]}z[i]=z[i]+coef(Probit.reduced)[1]pai[i]=pnorm(z[i])result[i]=Y[i]*log(pai[i])+(1-Y[i])*log(1-pai[i])
}
LogLikelihood[3]<-sum(result)cat("LogLikelihood: ",LogLikelihood)sink()

结果输出

#系数
write.csv(summary(Logistic.full)$coef,file="Logistic_full.csv")
write.csv(summary(Logistic.reduced)$coef,file="Logistic_reduced.csv")
write.csv(summary(Probit.reduced)$coef,file="Probit_reduced.csv")#描述统计
col.name<-c("min","max","median","mean","sd")
describe<-matrix(data = NA, nrow = m, ncol = 5, byrow = FALSE,dimnames =list(names(data),col.name))for(i in 1:m){describe[i,1]=min(data[,i])describe[i,2]=max(data[,i])describe[i,3]=median(data[,i])describe[i,4]=mean(data[,i])describe[i,5]=sd(data[,i])
}write.csv(data.frame(describe),file="summary.csv")

比较probit和logistic

#Probit模型
curve(exp(x)/(1+exp(x)),xlim=c(-4,4),col="red",ylab="Distribution Function")
text(2.3,.75,"Logit Case",cex=1.2,col="red")
arrows(2.3,.79,1.88,.84,length=0.1,angle=20,col="red")#Logit模型
curve(pnorm(x),xlim=c(-4,4),col="blue",add=T,ylab="Distribution Function")
text(0,.95,"Probit Case",cex=1.2,col="blue")
arrows(-.1,0.9,.6,.8,length=0.1,angle=20,col="blue")

R语言学习笔记 07 Probit、Logistic回归相关推荐

  1. R语言学习笔记 06 岭回归、lasso回归

    R语言学习笔记 文章目录 R语言学习笔记 比较lm.ridge和glmnet函数 画岭迹图 图6-4 <统计学习导论 基于R语言的应用>P182 图6-6<统计学习导论 基于R语言的 ...

  2. R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

    R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...

  3. R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集、非线性:基函数展开和样条分析、你简单分析的不重要特征,可能只是线性不显著、而非线性是显著的

    R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集.非线性:基函数展开和样条分析.你简单分析的不重要特征,可能只是线性不显著.而非线性是显著的 目录

  4. R语言学习笔记(1~3)

    R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...

  5. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  6. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

  7. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  8. R语言学习笔记(八)--读写文件与网络爬虫

    R语言学习笔记(八) 1 工作路径 2 保存R对象 3 Scan函数 3-1 从控制台读取数据 3-2 从txt文件读取数据 3-3 从url读取数据 4 按行读写文本文件 5 读取文本文件(txt. ...

  9. R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示

    文章目录 写在前面 独立性检验 χ2\chi^2χ2独立性检验 Fisher独立性检验 Cochran-Mantel-Haenszel χ2\chi^2χ2独立性检验 相关性分析 相关性检验 相关性检 ...

最新文章

  1. 1.字母异位词分组(LeetCode第49题)
  2. oracle client server那点事
  3. Javascript中“==”与“===”的区别
  4. leetcode 796. 旋转字符串(Rotate String)
  5. (转)python的range()函数用法
  6. 跟随我在oracle学习php(27)
  7. linux自动分区shell,SHELL脚本实现分区
  8. 【TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
  9. android xml红心圆,Android自定义View圆形图片控件代码详解
  10. matlab编辑器风格定制,怎么使用135编辑器编辑出文艺清新的风格排版(附文艺排版素材)?...
  11. nodejs 牛刀小试
  12. 2009中文菜谱网站排行之十大兵器
  13. 87个电影调色PR预设包
  14. 19. 卫健委官网医院查询爬虫+验证码识别(云打码)综合案例
  15. h2o机器学习算法框架学习总结
  16. DNS域名服务之:排查DNS的故障
  17. JAVA pinyin4j 中文多音字转拼音转字母大写
  18. Codepen 每周精选:22个页面特效(2018-5-2)
  19. mac电脑听歌下歌那个好?试试lx music desktop!
  20. expdp导出时候遇到的ORA-39373问题

热门文章

  1. 考toeic心得。。。。
  2. [书摘]金玉良缘(摘自:幽默大师林语堂 作者:朱艳丽)
  3. 3万多条对联春联门联ACCESS数据库
  4. 畅谈元宇宙的十大商业模式
  5. 【java使用ffmpeg进行视频压缩】
  6. [上海线下活动] AI+教育 专场 -- 沪江技术沙龙
  7. 剑指offer-day3
  8. RTMP视频推流功能组件EasyRTMP-HIK DEMO版本运行报错0xc000007b问题排查分析
  9. 电脑公司特别版XP系统 版本及MD5说明
  10. 电子商务编程C语言考试,计算机络级计算机的络与电子商务专业《c语言程序设计》试卷.doc...