R|广义线性模型知识点归纳

article/2025/8/19 18:07:18

本文分为两个部分: (1)广义线性模型的分类及其运用场景; (2) 相关R代码。需要说明的是,参考资料是上课课件,根据本人理解整理,如果有不对的地方,欢迎探讨!

目录

引言

1. 广义线性模型

(1)二分变量

(2)类型变量

(3)计数型变量

①泊松对数线性模型

②零膨胀计数模型

2. 相关R代码


引言

        在经典线性模型中,y是连续的,同时服从正态分布。但是很多情况下y是离散的,比如y表示是否贷款(0/1变量),或者优/良/差(类型变量),或者医院病人数(计数型变量)。所以引入了广义线性模型来进行回归拟合。

1. 广义线性模型

图1

(1)二分变量

当y为0/1二分变量的时候,可以用logistic模型进行回归拟合,模型设定如下:

设 y_i 服从参数为 p_i 的二项分布,则 \mu_i = E(y_i)=p_i ,采用逻辑连接函数,即:

g(\mu_i) = logit(p_i) = log\frac{p_i}{1-p_i} = X^{T}\beta

也可以用probit模型进行回归拟合,模型设定如下:

 设 y_i 服从参数为 p_i 的二项分布,则 \mu_i = E(y_i)=p_i ,采用逻辑连接函数,即:

g(\mu)=probit(p)=\Phi ^{-1}(p)=X\beta

在得到回归结果 y = \beta_0+\beta_1 x_1+...+\beta_i x_i 之后,两个模型的区别在于

logistic模型中P(y=1)=\frac{exp(\hat{y})}{1+exp(\hat{y})}

probit模型中P(y=1) = \Phi(\hat{y})

(2)类型变量

当y有多个类型,比如优/良/差的时候,可以用多项logit模型,模型设定如下:

假如对于第i个观测值,因变量 y_i 有M个取值,自变量为 x_i ,则多项logit回归模型为

P(y_i = k) = \frac{exp(x_i\beta_i)}{1+\sum_{j=2}^{M}(exp(x_i\beta_i))}

P(y_i = 1) = 1-\sum_{j=2}^{M}P(y_i=j) = \frac{1}{1+\sum_{j=2}^{M} {exp(x_i\beta_j)}}

同时,\sum_{k=1}^{M}{P(y_i = k)}=1

 最终得到的结论是第 i 个样本为 y_k 的概率

(3)计数型变量

        ①泊松对数线性模型

        当y服从泊松分布的时候,可以用此模型,模型设定如下:

设y服从参数为λ的泊松分布,则\mu = E(y)=\lambda

采用对数连接函数,即

g(\mu) = ln(\lambda) = \beta_0+\beta_1x_1+...+\beta_px_p

最终得到

 lny = \beta_0 + \beta_1x_1 +...+\beta_px_p

为了更加方便解释y,上式可以变形为:

=> y = exp(\beta_0 + \beta_1x_1 +...+\beta_px_p)

=>y = e^{\beta_0}*e^{\beta_1x_1}*...*e^{\beta_px_p}

=>y=\beta_0^{'}*(\beta_1^{'})^{x_1}*...*(\beta_p^{'})^{x_p}

表示的意思是,每当 x_p 上升一个单位,就有 y^{'}=y*(\beta_p^{'}) ,则说明y变动了(\beta_p^{'}-1)*100%

        ②零膨胀计数模型

当y含有非常多0,分布右偏的时候,用泊松对数线性模型可能产生偏差,可以用零膨胀计数模型,模型设定如下:

        设y服从参数为λ的泊松分布,则有\mu = E(y) = \lambda ,但是P(y=0)可能比较大,这种分布的数据叫做 “零膨胀数据”,需要用零膨胀计数模型进行拟合,模型可以分为两个部分:

(i) 零点处:用 logistic模型或者probit模型进行拟合

假设零点的点密度为\pi,那么此处logistic模型的设定为ln\frac{\pi}{1-\pi} = X^{T}\beta

或者此处的probit模型的设定为\pi = \Phi(X\beta)

(ii) 非零点处:用泊松分布模型进行拟合

则非零处的 \mu = E(y) = \lambda ,此处的泊松对数线性模型设定为 ln(\lambda) = Z^{T}\alpha

        综上,零膨胀密度为:

f(y)=\pi I_{(0)}(y) + (1-\pi)f_c(y)

        其中,\pi 为零点的点密度,I_{(0)}(y) 为(i)中的模型设定,f_c(y) 为(ii)中的模型设定;

        进一步地,整个模型的均值为:

\mu = \pi*0+(1-\pi)\lambda=(1-\pi)\lambda

2. 相关R代码

# 数据介绍:被解释变量为y,解释变量为x1,x2,x3,
# 其中x1是连续数值变量;x2是0/1变量,x3是分类变量(即取值为1,2,3)#1 读入数据
setwd("C:/...")
dat <- read.csv("file.csv", header = T)#2 数据检查 ##1) 检查一下响应变量分布情况
barplot(table(dat$y))##2) 解释变量是分类变量的时候,需要进行因子化
dat_x3 <- as.factor(dat$x3)#3 选择模型回归并查看结果##1) logistic模型
glm_logit <- glm(y~x1+x2+x3, family=binomial(link=logit), data=dat)
summary(glm_logit) #输出结果
y1<-predict(glm_logit, data.frame(x1=20,x2=1,x3=1))
p1<-exp(y1)/(1+exp(y1)) #估计x1=20,x2=1,x3=1时y=1的概率##2) probit模型
glm_probit<- glm(y~x1+x2+x3, family=binomial(link=probit), data=dat)
summary(glm_probit) #输出结果
#估计满足条件时y=1的概率y2 <- predict(glm_probit, data.frame(x1=20,x2=1,x3=1),type="response") ##3) 多项probit模型
mlog<-multinom(y~x1+x2+x3,data=dat) #建立模型
summary(mlog)
predict(mlog,data.frame(x1=20,x2=1,x3=1),type="p") #估计y=1,2,...,M的概率##4) 泊松对数线性模型
glm_ln<-glm(y~x1+x2+x3,family=poisson(link=log),data=dat)
summary(glm_ln)
exp(coef(glm_ln)) # 计算因变量为y而不是lny时变量的系数##5) 零膨胀计数模型
#[|]前是非零设定模型,后面是零值时设定的模型
glm_zero <- zeroinfl(y~x1+x2+x3|y~x1+x2+x3,data=dat) 
summary(glm_zero )#备注:优化模型
#如果出现某个变量不太显著的问题,可以用逐步回归优化,假设之前回归结果为 fx1
fx1_step <- step(fx1)

如果你看到这里了,可以给个赞吗,辛苦码字2小时耶!


http://chatgpt.dhexx.cn/article/I61LtFLC.shtml

相关文章

IOS CoreData 多表查询(上)

在网上搜索了下&#xff0c;发现只有部分讲解CoreData关系的&#xff0c;但对多表之间的查询并没有相应的介绍。 因此操作自己写了个。 先创建几个表。 1、部门表&#xff1a;department dp_id Integer primary key dp_deptname varchar(20) //使用coredata实体创建时用…

iOS CoreData详解(五)多线程

原创blog&#xff0c;转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏&#xff0c;这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言&#xff1a;很多小的App只需要一个ManagedContext在主线程就可以了&…

CoreData在Xcode 8 中的使用

如需转载&#xff0c;请注明出处 在Xode8之前&#xff0c;CoreData的使用是非常方便的&#xff0c;先创建一个DataModel , ,然后创建NSManagedObject SubClass,都是一个界面上操作&#xff0c;非常方便&#xff0c;但是更新过Xcode 8后&#xff0c;CoreData的创建需要进行一…

CoreData

Core Data数据持久化是对SQLite的一个升级&#xff0c;它是ios集成的&#xff0c;在说Core Data之前&#xff0c;我们先说说在CoreData中使用的几个类。&#xff08;1&#xff09;NSManagedObjectModel(被管理的对象模型) 相当于实体&#xff0c;不过它包含 了实体间的关系(2)N…

Core Data详解

转载于&#xff1a;程序媛与程序猿 7.1. 什么是Core Data Core Data是一个Cocoa框架&#xff0c;用于为管理对象图提供基础实现&#xff0c;以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销&#xff08;undo&#xff09;和重做&#xff08;redo&#xff…

Coredata的版本升级

在开发的后期&#xff0c;可能因为完善和修复功能&#xff0c;需要对Coredata数据库表进行修改&#xff0c;这样就需要对CoreData进行版本升级。 比如你修改了DB字段以后&#xff0c;用户在旧版本上升级为新版本时会crash. 因为升级只升级了应用app,没有升级目录下的数据据db文…

在建好的项目中加入CoreData

这几天在做一个ios的小项目&#xff0c;项目中需要对数据进行基本的增删改查操作。于是就想用一把CoreData。但在创建项目初期&#xff0c;没有包含进CoreData。于是就在已建好的项目中加入CoreData。由于第一次用CoreData&#xff0c;各方面还不是很熟悉&#xff0c;在网上爬文…

CoreData的简单使用

简介 Core Data是iOS5之后才出现的一个框架&#xff0c;它提供了对象-关系映射(ORM)的功能&#xff0c;即能够将OC对象转化成数据&#xff0c;保存在SQLite数据库文件中&#xff0c;也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间&#xff0c;我们不需要编写任何…

数据持久化(五)之CoreData

简单的说,Core Data就是可以存储到磁盘的对象图,[...]Core Data可以帮我们做很多任务作.它可以作为软件的整个模型层。它不仅仅在磁盘上存储数据&#xff0c;也把我们需要的数据对象读取到内存中。 ——Marcus Zarra, Core Data Core Data是Mac OS X中Cocoa API的一部分&#…

coredata 详解

原文&#xff1a;Core Data Overview&#xff0c;感谢CocoaChina翻译组帮忙校对。 Core Data可能是OS X和iOS里面最容易被误解的框架之一了&#xff0c;为了帮助大家理解&#xff0c;我们将快速的研究Core Data&#xff0c;让大家对它有一个初步的了解&#xff0c;对于想要正确…

Core Data 详解

Core Data是一个Cocoa框架&#xff0c;用于为管理对象图提供基础实现&#xff0c;以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销&#xff08;undo&#xff09;和重做&#xff08;redo&#xff09;、有效性检查、以及保证对象关系的完整性等。对象的持久化意…

Core Data概述

昨晚熬夜看发布会(本以为屌丝终于能买得起苹果了&#xff0c;谁知道。。。)&#xff0c;因为看不了视频直播&#xff0c;所以就正好有空就把www.objc.io最新的一篇文章翻译了一下&#xff0c;同时感谢CocoaChina翻译组提供校对&#xff0c;以下为正文&#xff1a; Core Data可能…

CoreData 的使用

CoreData其实就是Apple为开发者提供的便捷数据存储方式&#xff0c;本质是对sqlite数据库的操作&#xff0c;操作的数据量为中到大量。 操作数据库&#xff0c;还有FMDB第三方库&#xff0c;相比于FMDB&#xff0c;CoreData要更简单&#xff0c;更方便。 集成CoreData: 1,创…

Core Data的使用

初步看了一下Core Data这个东西&#xff0c;本想早一点写这篇东西的&#xff0c;不过各种俗事缠身&#xff0c;又觉得自己对于Core Data机制了解的还不够深&#xff0c;动笔就慢了几天。不过今天盘点一下&#xff0c;觉得可以说一点东西出来就先说一点吧。 Core Data到底是个什…

CoreData简单使用

苹果的CoreData框架&#xff08;不限于&#xff09;提供了一种数据持久化解决方案&#xff0c;它基于如下结构&#xff08;图片来源苹果官网&#xff09;&#xff1a; 其中涉及了几个概念&#xff1a; NSManagedObject: 数据库中一条记录在内存的实例。 NSManagedObjectConte…

ios中的coredata的使用

Core Data数据持久化是对SQLite的一个升级&#xff0c;它是ios集成的&#xff0c;在说Core Data之前&#xff0c;我们先说说在CoreData中使用的几个类。 &#xff08;1&#xff09;NSManagedObjectModel(被管理的对象模型) 相当于实体&#xff0c;不过它包含 了实体间的关系 (2…

CoreData使用

一、CoreData的简单使用 1.什么是CoreData 先认识一下这几个类 (1)NSManagedObjectContext&#xff08;被管理的数据上下文&#xff09; 作用&#xff1a;用来管理所有表的操作&#xff0c;对表的实体对应的数据库中的表的操作&#xff08;插入&#xff0c;查询&#xff0c;修改…

iOS CoreData的使用

CoreData是一个专门管理数据服务的框架&#xff0c;把OC对象和存储在SQLite文件中的数据进行互相转换&#xff0c;极大地方便了开发者在数据服务方面的开发。 1. 创建CoreData 在文件创建区下&#xff0c;选择【Core Data】下的【Data Model】 输入CoreData的文件名Model.x…

Core Data 概述

Core Data 概述 转载自&#xff1a; http://www.cocoachina.com/newbie/basic/2013/0911/6981.html Core Data可能是OS X和iOS里面最容易被误解的框架之一了&#xff0c;为了帮助大家理解&#xff0c;我们将快速的研究Core Data&#xff0c;让大家对它有一个初步的了解&#x…

CoreData相关01 基础及运用:添加、查询、过滤、排序、分页

CoreData CoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。 CoreData和iOS中的模型对象相联系在一起&#xff0c;只需要操作模型对象的增删改查就可以完成数据的增删改查&#xff0c;不用写SQL语句。 CoreData的存储方式 SQLite NSSQLiteStoreType XML NSXML…