原文链接:http://tecdat.cn/?p=10204

原文出处:拓端数据部落公众号


用于分析序数数据的最常见模型是 逻辑模型 。本质上,您将结果视为连续潜在变量的分类表现。此结果的预测变量仅以一种方式对其产生影响,因此 为每个预测变量获得一个回归系数。但是该模型有几个截距,它们代表将变量切分以创建观察到的分类表现的点。

就像在普通回归模型中一样,每个预测变量都会以一种方式影响结果,这就是比例赔率假设或约束。或者,可以让每个预测变量在每个切入点对结果产生不同的影响。

如何使用单变量GLM软件对此建模?UCLA idre页面上有关于多元随机系数模型的文章。在这里很重要,因为他们使用nlme(单变量线性混合模型软件)对多元结果进行建模。基本思想是将数据堆叠起来,使其成为一种重复测量,但是找到一种向软件发出信号的信号,即结果是不同的,从而对预测变量要求不同的截距和斜率。

因此,我们要做的是将数据从宽转换为长,将其建模为常规二项式,但是我们需要告诉模型为每个级别估计不同的截距。为此,我使用具有unstructured工作相关性结构的通用估计方程(GEE)。3

示范

library(ordinal) # For ordinal regression to check our results
library(geepack) # For GEE with binary data

数据集。

soup <- ordinal::soup
soup$ID <- 1:nrow(soup) # Create a person ID variable
str(soup)'data.frame':    1847 obs. of  13 variables:$ RESP    : Factor w/ 185 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...$ PROD    : Factor w/ 2 levels "Ref","Test": 1 2 1 2 1 2 2 2 2 1 ...$ PRODID  : Factor w/ 6 levels "1","2","3","4",..: 1 2 1 3 1 6 2 4 5 1 ...$ SURENESS: Ord.factor w/ 6 levels "1"<"2"<"3"<"4"<..: 6 5 5 6 5 5 2 5 5 2 ...$ DAY     : Factor w/ 2 levels "1","2": 1 1 1 1 2 2 2 2 2 2 ...$ SOUPTYPE: Factor w/ 3 levels "Self-made","Canned",..: 2 2 2 2 2 2 2 2 2 2 ...$ SOUPFREQ: Factor w/ 3 levels ">1/week","1-4/month",..: 1 1 1 1 1 1 1 1 1 1 ...$ COLD    : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...$ EASY    : Factor w/ 10 levels "1","2","3","4",..: 7 7 7 7 7 7 7 7 7 7 ...$ GENDER  : Factor w/ 2 levels "Male","Female": 2 2 2 2 2 2 2 2 2 2 ...$ AGEGROUP: Factor w/ 4 levels "18-30","31-40",..: 4 4 4 4 4 4 4 4 4 4 ...$ LOCATION: Factor w/ 3 levels "Region 1","Region 2",..: 1 1 1 1 1 1 1 1 1 1 ...$ ID      : int  1 2 3 4 5 6 7 8 9 10 ...

我使用SURENESS变量。它有6个级别。使用DAYGENDER变量对其进行建模。

# Select variables to work with
soup <- dplyr::select(soup, ID, SURENESS, DAY, GENDER)
# I like dummy variables with recognizable names
soup$girl <- ifelse(soup$GENDER == "Female", 1, 0) # Make male reference group
soup$day2 <- ifelse(soup$DAY == "2", 1, 0) # Make day 1 reference group

下一步是将顺序结果转换为代表每个阈值的5个结果


完成此操作后,我们准备对这5个新的结果变量进行转换。


head(soup.long) # Let's look at the dataID SURENESS DAY GENDER girl day2 SURE VAL SURE.f
1     1        6   1 Female    1    0    2   1      2
1848  1        6   1 Female    1    0    3   1      3
3695  1        6   1 Female    1    0    4   1      4
5542  1        6   1 Female    1    0    5   1      5
7389  1        6   1 Female    1    0    6   1      6
2     2        5   1 Female    1    0    2   1      2

让我们看看没有选择最高响应类别的人:

ID SURENESS DAY GENDER girl day2 SURE VAL SURE.f
22   22        4   1 Female    1    0    2   1      2
1869 22        4   1 Female    1    0    3   1      3
3716 22        4   1 Female    1    0    4   1      4
5563 22        4   1 Female    1    0    5   0      5
7410 22        4   1 Female    1    0    6   0      6

这个人选择了SURENESSVAL中的a 。她的前三个分数是1,她的最后两个分数是0,因为4小于4-5阈值和5-6阈值。

下一步是为阈值创建虚拟变量。这些变量将用于表示模型中的截距。


请注意,我将虚拟变量乘以-1。在序数回归中,这样做使解释更容易。总之,它确保正系数增加了从较低类别(例如3)移至较高类别(4)或对较高响应类别做出响应的几率。

现在,我们准备运行模型。我们使用GEE。相关结构为unstructured


接下来,我使用标准序数回归估算模型:

让我们比较系数和标准误差:
Estimate Estimate.1 Std.err Std. Error     Wald  z value Pr(>|W|) Pr(>|z|)
SURE.f2 -2.13244   -2.13155 0.10454    0.10450 416.0946 -20.3971   0.0000   0.0000
SURE.f3 -1.19345   -1.19259 0.09142    0.09232 170.4284 -12.9179   0.0000   0.0000
SURE.f4 -0.89164   -0.89079 0.08979    0.09011  98.5995  -9.8857   0.0000   0.0000
SURE.f5 -0.65782   -0.65697 0.08945    0.08898  54.0791  -7.3833   0.0000   0.0000
SURE.f6 -0.04558   -0.04477 0.08801    0.08789   0.2682  -0.5093   0.6046   0.6105
girl    -0.04932   -0.04917 0.09036    0.09074   0.2980  -0.5419   0.5851   0.5879
day2    -0.26172   -0.26037 0.08584    0.08579   9.2954  -3.0351   0.0023   0.0024

可以看到结果非常接近。

但是,使用估计glm()不能建立一个人的结果之间的依存关系的估计会产生不同的结果。

Estimate Std. Error z value Pr(>|z|)
SURE.f2 -2.15144    0.08255 -26.062   0.0000
SURE.f3 -1.21271    0.06736 -18.004   0.0000
SURE.f4 -0.91149    0.06472 -14.084   0.0000
SURE.f5 -0.67782    0.06327 -10.713   0.0000
SURE.f6 -0.06523    0.06178  -1.056   0.2911
girl    -0.07326    0.04961  -1.477   0.1398
day2    -0.26898    0.04653  -5.780   0.0000

估计值和标准误均不足。

我们可以轻松地放宽pom.bin模型中的比例赔率约束。让我们通过放宽对预测变量的约束来运行某些人所说的偏比例赔率模型day2。我们通过估计阈值虚拟变量和day2预测变量之间的相互作用来做到这一点。


我还使用名义参数运行了相同的模型进行比较day2

Estimate Estimate.1 Std.err Std. Error     Wald  z value Pr(>|W|) Pr(>|z|)
SURE.f2      -2.02982   -2.03106 0.11800    0.11834 295.8986 -17.1630  0.00000  0.00000
SURE.f3      -1.22087   -1.22213 0.09829    0.09857 154.2801 -12.3980  0.00000  0.00000
SURE.f4      -0.92773   -0.92899 0.09458    0.09443  96.2112  -9.8375  0.00000  0.00000
SURE.f5      -0.65744   -0.65870 0.09246    0.09188  50.5554  -7.1693  0.00000  0.00000
SURE.f6      -0.04733   -0.04859 0.08955    0.08965   0.2793  -0.5420  0.59714  0.58784
SURE.f2:day2  0.07359    0.07360 0.14148    0.14155   0.2705   0.5199  0.60298  0.60312
SURE.f3:day2  0.31691    0.31697 0.10607    0.10613   8.9270   2.9867  0.00281  0.00282
SURE.f4:day2  0.33301    0.33308 0.09970    0.09973  11.1551   3.3398  0.00084  0.00084
SURE.f5:day2  0.26330    0.26339 0.09618    0.09616   7.4938   2.7391  0.00619  0.00616
SURE.f6:day2  0.26741    0.26748 0.09347    0.09345   8.1842   2.8622  0.00423  0.00421
girl         -0.04809   -0.04994 0.09048    0.09077   0.2825  -0.5502  0.59507  0.58221

结果是可比较的。

现在,我们可以将比例比例赔率二进制模型与比例赔率二进制模型进行比较,以测试day2变量的约束条件。geepack允许anova()对两种模型进行Wald测试:


Analysis of 'Wald statistic' TableModel 1 VAL ~ 0 + SURE.f2 + SURE.f3 + SURE.f4 + SURE.f5 + SURE.f6 + girl + SURE.f2:day2 + SURE.f3:day2 + SURE.f4:day2 + SURE.f5:day2 + SURE.f6:day2
Model 2 VAL ~ 0 + SURE.f2 + SURE.f3 + SURE.f4 + SURE.f5 + SURE.f6 + girl + day2Df   X2 P(>|Chi|)
1  4 6.94      0.14

两种模型之间的差异在统计上均不显着,表明day2变量的比例约束已足够。

我们可以使用或使用函数ordinal进行比较pom.ordnpom.ord建模anova(),从而进行相同的测试nomimal_test()。两者都是似然比检验,比上述GEE的Wald检验更充分。

Likelihood ratio tests of cumulative link models:formula:               nominal: link: threshold:
pom.ord  SURENESS ~ girl + day2 ~1       logit flexible
npom.ord SURENESS ~ girl        ~day2    logit flexible  no.par  AIC logLik LR.stat df Pr(>Chisq)
pom.ord       7 5554  -2770
npom.ord     11 5555  -2766    6.91  4       0.14nominal_test(pom.ord)Tests of nominal effectsformula: SURENESS ~ girl + day2Df logLik  AIC  LRT Pr(>Chi)
<none>     -2770 5554
girl    4  -2766 5554 8.02    0.091 .
day2    4  -2766 5555 6.91    0.141
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

这两个测试收敛到相同的结果,并且在比较GEE模型的Wald测试中也给出了相同的p值。然而,Wald- χ 2χ2 测试统计数据略高。


完成此操作后,使用序数数据包当然要容易得多。但是,将模型视为二进制可能会有一些好处,但是所有这些都是出于好奇而非必要。由于某种原因,我仍未弄清楚,当一个人尝试使用fitted()函数从模型中获得预测的概率时,它仅返回一组拟合的概率。理想情况下,它应该为每个阈值返回拟合概率。使用geepack,可以直接获得每个级别的预测概率。但是,这种优势是微不足道的。


而且,如果熟悉最大似然估计,则可以简单地对似然函数进行编程。

上面的例子在比例赔率情况下的语法为:


coef(summary(res))Estimate Std. Error
a1 -2.13155603 0.10450286
a2 -1.19259266 0.09232077
a3 -0.89079068 0.09010891
a4 -0.65697671 0.08898063
a5 -0.04477565 0.08788869
bg -0.04917604 0.09073602
bd -0.26037369 0.08578617coef(summary(pom.ord))Estimate Std. Error     z value     Pr(>|z|)
1|2  -2.13155281 0.10450291 -20.3970663 1.775532e-92
2|3  -1.19259171 0.09232091 -12.9178937 3.567748e-38
3|4  -0.89078590 0.09010896  -9.8856524 4.804418e-23
4|5  -0.65697465 0.08898068  -7.3833401 1.543671e-13
5|6  -0.04476553 0.08788871  -0.5093434 6.105115e-01
girl -0.04917245 0.09073601  -0.5419287 5.878676e-01
day2 -0.26037360 0.08578617  -3.0351465 2.404188e-03

结果非常相似,对于比较模型的更确定的方式,我们总是可以比较对数似然:

logLik(res)
'log Lik.' -2769.784 (df=7)logLik(pom.ord)
'log Lik.' -2769.784 (df=7)

  1. Agresti,A。(2013)。分类数据分析。Wiley-Interscience。 ↩

拓端tecdat|R语言使用二元回归将序数数据建模为多元GLM相关推荐

  1. R语言使用二元回归将序数数据建模为多元GLM

    用于分析序数数据的最常见模型是 逻辑模型 . 最近我们被客户要求撰写关于GLM的研究报告,包括一些图形和统计输出.本质上,您将结果视为连续潜在变量的分类表现.此结果的预测变量仅以一种方式对其产生影响, ...

  2. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  3. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  4. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  5. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  6. R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

    最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...

  7. R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据...

    原文链接:http://tecdat.cn/?p=24152 什么是PCR?(PCR = PCA + MLR)(点击文末"阅读原文"获取完整代码数据). • PCR是处理许多 x ...

  8. 手把手教你使用R语言做LASSO 回归

    LASSO 回归也叫套索回归,是通过生成一个惩罚函数是回归模型中的变量系数进行压缩,达到防止过度拟合,解决严重共线性的问题,LASSO 回归最先由英国人Robert Tibshirani提出,目前在预 ...

  9. R语言使用逻辑回归分类算法

    R语言使用逻辑回归分类算法 逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测.在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率.通过调用glm函数 ...

  10. R语言构建logistic回归模型:构建模型公式、拟合logistic回归模型、模型评估,通过混淆矩阵计算precision、enrichment、recall指标

    R语言构建logistic回归模型:构建模型公式.拟合logistic回归模型.模型评估,通过混淆矩阵计算precision.enrichment.recall指标 目录

最新文章

  1. 机器学习中导数最优化方法(基础篇)
  2. Zabbix 安装agent
  3. 业务单号自动增长的处理办法
  4. jQuery图表开源软件
  5. C# WinForm中的Label换行方法
  6. 如何构建尽可能小的容器镜像?
  7. Android JNI 学习(十):String Operations Api Other Apis
  8. 品质主管每日工作需要做哪些_游戏配音需要做哪些工作?
  9. linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题
  10. 基于Ruby的Watir-WebDriver自动化测试框架
  11. python基础代码大全-python基础代码大全
  12. 第二篇:浅谈自定义头文件可能导致的重定义问题
  13. django基础入门(3)django中模板
  14. 【C语言】如何用C语言画一个哆啦A梦(附源代码)
  15. Spark SQL操作JSON字段小Tips
  16. linux高速串口收发程序,Linux的DMA高速串口驱动的设计
  17. access 分组序号_二级Access数据库备考笔记之报表排序和分组
  18. Shopee开店不懂英语怎么办?
  19. c++QT笔记,windows毛玻璃窗口实现封装
  20. 在国内如何使用gmail_如何在Gmail中更快地键入电子邮件

热门文章

  1. 入口函数ufusr()与ufsta()的区别
  2. 企业级 SpringBoot 教程 (十三)springboot集成spring cache
  3. CrateDB 3.2.4 发布,大规模可伸缩的数据存储系统
  4. electron入门笔记(三)- 引入bootstrap
  5. ATOM使用的一点心得与技巧——在一个窗口打开多个项目
  6. @EnableWebMVC注解理解
  7. Kubernetes Job Controller源码分析
  8. CodeForces 621C 数学概率期望计算
  9. 字符串部分函数的实现
  10. SharePoint 2013 添加Ribbon菜单