R语言基于poLCA包进行潜类别分析

news2024/11/15 8:34:11

潜在类别分析是一种分析多元分类数据的统计技术。当观测数据以一系列分类响应的形式出现时- -例如,在民意调查、个人层面的投票数据、人与人之间可靠性的研究或消费者行为和决策中- -通常感兴趣的是调查观测变量之间的混淆来源,识别和表征相似案例的集群,并在许多感兴趣的变量中近似观测值的分布。潜在类别模型是实现这些目标的有用工具。
下面我们通过R语言poLCA包来演示一下,我们先导入R包和数据

library(poLCA)
election<-read.csv("E:/r/test/xuanju.csv",sep=',',header=TRUE)

在这里插入图片描述
这是一个调查问卷数据,调查数据来自2000年美国全国选举研究,公众号回复:选举数据,可以获得数据。两套共6个问题,每个问题4个答案,询问受访者对(道德性、关怀性、知识性、好领导、不诚实)描述总统候选人阿尔·戈尔和乔治· W ·布什的各种特质的看法。分为4个等级( 1 )极好;( 2 )相当好;( 3 )不太好;( 4 )一点也不好。该数据集还包括潜在的协变量VOTE3、被调查者的2000次投票选择(询问时);年龄,受访者年龄;EDUC,受访者的受教育程度;性别,受访者的性别;和第四部分,受访者的民主-共和两党认同。
poLCA包进行分析变量的formula(公司)基本格式为:

f <- cbind(Y1,Y2,Y3)~1

如果含有协变量的话格式为:

f <- cbind(Y1,Y2,Y3)~X1+X2*X3

Y1,Y2,Y3需要是等级变量,在本数据中就是这些问卷的条目,如果不指定协变量,就是

f <- cbind(MORALG,CARESG,KNOWG,LEADG,DISHONG,INTELG,
           MORALB,CARESB,KNOWB,LEADB,DISHONB,INTELB)~1

生成公式后就可以使用poLCA函数分析了,它的基本格式为

poLCA(formula, data, nclass=2, maxiter=1000, graphs=FALSE, tol=1e-10,
na.rm=TRUE, probs.start=NULL, nrep=1, verbose=TRUE, calc.se=TRUE)

data就是你的数据,nclass代表你要分成几个类型,maxiter表示算法最大迭代次数,默认1000次,graphs等于T的话会生成图形,tol:一个容差值用于判断何时达到收敛,一般默认值就可以了。nrep表示对模型估计的次数,nrep > 1可以自动搜索对数似然函数的全局最大值而不是局部最大值。poLCA只返回产生最大对数似然函数的模型对应的参数估计。
我们先分成一类看看

nes1 <- poLCA(f,election,nclass=1)  # log-likelihood: -18647.31

在这里插入图片描述
模型返回了很多数据,除了最大似然比还有AIC、bic、Estimated等,我们把它分成两类和三类看看

nes2 <- poLCA(f,election,nclass=2)  # log-likelihood: -17344.92

在这里插入图片描述

nes3 <- poLCA(f,election,nclass=3)  # log-likelihood: -16714.66

在这里插入图片描述
我们可以看到分成3类后最大似然比较前缩小,说明3类比前两类更加适合,模型还返回了每组变量的相应概率,图比较大,我截图一部分
在这里插入图片描述
这里表示先验和后验概率
在这里插入图片描述
如果把graphs=T,可以图示概率响应情况

nes3 <- poLCA(f,election,nclass=3,graphs=T)  # log-likelihood: -16714.66

在这里插入图片描述
参照别的博主做法,可以把数据提出来,使用ggplot绘图,这样美观一点

library(reshape2)
library(ggplot2)

dat1<- melt(nes3$probs, level = 3)

ggplot(dat1,aes(x = L3, y = value, fill = Var2)) +
  geom_bar(stat = 'identity', position = 'stack', width = 0.5) +
  facet_grid(Var1~.) +
  scale_fill_brewer(type = 'seq', palette = 'Greys') +
  theme_bw() +
  labs(x = '', fill = 'probabilities') +
  guides(fill = guide_legend(reverse = TRUE))

在这里插入图片描述
如果我们不知道这个数据应该分几类,可以写个循环来确定,最大似然比、AIC、bic都是很好的分类指标,我们可以写一个简单的小循环来确定

stat<-NULL
for(i in 2:10){
  out<- poLCA(f,election,nclass=i,graphs=F) 
  likelihood<-out[["aic"]]
  stat<-append(stat,likelihood)
}
stat
min(stat)

在这里插入图片描述
最后分成几类不能单看指标,还要它能不能解释,比如本例数据是个两个总统戈尔和布什的选举数据。一个合理的假设调查对象存在三个潜在类别:戈尔支持者、布什支持者和或多或少中立者。戈尔的支持者会倾向于对戈尔做出有利的反应,而对布什做出不利的反应,布什的支持者则相反。中立组的人不会对任何一个候选人有强烈的意见。民主党更倾向于支持戈尔,坚定的共和党更倾向于支持布什,而不太激烈的党派倾向于无动于衷。
本例数据中的PARTY为协变量,1是支持民族党,7支持共和党,3 - 4 – 5是属于中立,我们把PARTY加入模型中,并建立模型

f.party <- cbind(MORALG,CARESG,KNOWG,LEADG,DISHONG,INTELG,
                 MORALB,CARESB,KNOWB,LEADB,DISHONB,INTELB)~PARTY
nes2a <- poLCA(f2a,election,nclass=3,nrep=5)    # log-likelihood: -16222.32 graphs

这里我们把中立者参考对比对象

probs.start <- poLCA.reorder(nes.party$probs.start,
                             order(nes.party$P,decreasing=T))
nes.party <- poLCA(f.party,election,nclass=3,probs.start=probs.start)

在这里插入图片描述
我们可以看到模型把投票者分成了3个潜在人群,三个群体的分离,比例分别为27 %、34 %和39 %。
在模型输出结果列表中(下图),我们可以看到
在这里插入图片描述
因为模型的公式为
在这里插入图片描述
所以我们可以得知中立者和布什群体的对数比先验概率为ln ( p2i / p1i) = -3.82 + 0.79 × PARTY。同样中立者和戈尔群体的对数比先验概率为ln( p3i / p1i) = 1.16-0.57 × PARTY。
我们可以通过如下公式转换
在这里插入图片描述
R的操作为

pidmat <- cbind(1,c(1:7))
exb <- exp(pidmat %*% nes2a$coeff)

绘图

matplot(c(1:7),(cbind(1,exb)/(1+rowSums(exb))),ylim=c(0,1),type="l",
        main="Party ID as a predictor of candidate affinity class",
        xlab="Party ID: strong Democratic (1) to strong Republican (7)",
        ylab="Probability of latent class membership",lwd=2,col=1)
text(5.9,0.35,"Other")
text(5.4,0.7,"Bush affinity")
text(1.8,0.6,"Gore affinity")

在这里插入图片描述
亲民主党人有超过60 %的先验概率属于戈尔亲和集团,而亲共和党人有超过80 %的先验概率属于布什亲和集团。
假如我们想进一步了解年龄的影响是否会改变党派偏见对候选人的影响,可以进一步设立交互模型

f.3cov <- cbind(MORALG,CARESG,KNOWG,LEADG,DISHONG,INTELG,
                MORALB,CARESB,KNOWB,LEADB,DISHONB,INTELB)~PARTY*AGE
nes.3cov <- poLCA(f.3cov,election,nclass=3,verbose=F)

继续把中立者设为参考对象,可以看到多了一个交互选项值

probs.start <- poLCA.reorder(nes.3cov$probs.start,
                             order(nes.3cov$P,decreasing=T))
nes.3cov <- poLCA(f.3cov,election,nclass=3,probs.start=probs.start)

在这里插入图片描述
为了考察年龄对强势党派候选人亲和力的影响,设定协变量的假设值矩阵:民主党的strdems和共和党的strreps。然后计算并绘制每个假设值对应的潜在类别成员的预测先验概率。
民主党的先验概率

strdems <- cbind(1,1,c(18:80),(c(18:80)*1))
exb.strdems <- exp(strdems %*% nes.3cov$coeff)
matplot(c(18:80),(cbind(1,exb.strdems)/(1+rowSums(exb.strdems))),
          main="Age and candidate affinity for strong Democrats",
          xlab="Age",ylab="Probability of latent class membership",
          ylim=c(0,1),type="l",col=1,lwd=3)
text(50,0.6,"Gore affinity")
text(50,0.39,"Other")
text(50,0.1,"Bush affinity")

在这里插入图片描述
共和党的先验概率

strreps <- cbind(1,7,c(18:80),(c(18:80)*7))
exb.strreps <- exp(strreps %*% nes.3cov$coeff)
matplot(c(18:80),(cbind(1,exb.strreps)/(1+rowSums(exb.strreps))),
          main="Age and candidate affinity for strong Republicans",
          xlab="Age",ylab="Probability of latent class membership",
          ylim=c(0,1),type="l",col=1,lwd=3)
text(50,0.8,"Gore affinity")
text(50,0.2,"Other")
text(50,0.05,"Bush affinity")

在这里插入图片描述
由下两图可以得出民族党无论年龄大小,都不会亲布什,共和党人也不会倾向戈尔。,第一张图看到,共和党的成员在30岁一下更多属于中立派。
在这里插入图片描述
参考文献:

  1. poLCA包说明
  2. 张洁婷, 焦璨, 张敏强. 潜在类别分析技术在心理学研究中的应用[J]. 心理科学进展, 2010(12):8.
  3. 房立艳, 张大均, 武丽丽,等. 中学生心理素质的类别特征:基于个体中心的潜在类别分析[J]. 心理与行为研究, 2017, 15(1):6.
  4. Mirza S S , Wolters F J , Swanson S A , et al. 10-year trajectories of depressive symptoms and risk of dementia: a population-based study[J]. Lancet Psychiatry, 2016:628-635.
  5. https://mp.weixin.qq.com/s/Bvob1r2g6vr7gcavMOydAA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初步了解高性能队列——Disruptor(Java)

高性能队列——Disruptor ① 概述 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内部的内存队列的延迟问题&#xff0c;而不是分布式队列。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&#xff0c…

DevOps利器之二(Git,Gitlab)

一、背景Git&#xff0c;Gitlab在DevOps中主要解决持续集成源码管控部分&#xff0c;本文主要从基本概念&#xff0c;实施部署两部分介绍。二、git概述https://git-scm.com/book/zh/v2 --推荐官方电子书 Git - 它是一个源代码分布式版本控制系统&#xff0c;可让开发人员在本地…

行业分享:锂电池4大生产难题,视觉检测即可有效解决

导语&#xff1a;机器视觉检测已在锂电池生产的各个环节中&#xff0c;为产品产量与质量提供可靠保障。维视智造作为锂电池视觉检测系统提供商&#xff0c;为企业提供专业、系统、稳定的锂电行业解决方案&#xff0c;可保证0漏检&#xff0c;确保安全生产&#xff0c;全面提升生…

Java总结(运算符)

1.算数运算符short s12;s1s12; &#xff08;编译不能运行)short s12;s1 2 ; (编译能运行&#xff0c;不改变变量本身的数据类型)2.逻辑运算符区分&和&&相同点&#xff1a;运算结果相同&#xff1b;当符号左边是true时&#xff0c;两者都会执行符号右边的运算不同点…

医疗数据安全实力派 | 美创科技品牌案例入选《2022年医疗行业网络安全报告》

近日&#xff0c;网络安全产业机构“数说安全”正式发布《2022年医疗行业网络安全报告》&#xff08;以下简称“报告”&#xff09;。报告对我国医疗行业信息化现状和政策、医疗行业市场发展、医疗行业需求侧及供给侧进行深度剖析。美创科技作为专业数据安全代表厂商入选医疗网…

你应该知道的机器学习模型部署细节和实施步骤

机器学习操作 (MLOps&#xff0c;Machine Learning Operations ) 是“机器学习”和“工程”的组合&#xff0c;涵盖了与生产 ML 生命周期管理有关的所有内容。 ML模型生命周期可大致分为三个阶段 文章目录技术交流设计模型开发操作步骤1&#xff1a;确定部署环境命令行终端Cond…

Arduino开发ESP8266网页服务器控制LED灯

根据板卡原理RGB三色LED对应引脚&#xff1a;int LEDR12、int LEDG14、int LEDB13;设置串口波特率为115200Serial.begin(115200);源代码如下所示&#xff1a;3.1添加头文件#include <ESP8266WiFi.h> // 提供 Wi-Fi 功能的库#include <ESP8266WebServer.h> // 提供网…

Solidity 中的数学(第 3 部分:百分比和比例)

本文是关于在 Solidity 中进行数学运算的系列文章中的第三篇 。 这次的主题是&#xff1a;百分比和比例。 介绍 金融数学从百分比开始。y的x百分比是多少&#xff1f;y占x的多少百分比&#xff1f;我们都知道答案&#xff1a;y的x百分比是x y 100&#xff0c;y是y 10…

GPIO 应用

应用层如何控制 GPIO&#xff0c; 譬如控制 GPIO 输出高电平、或输出低电平。应用层如何操控 GPIO与 LED 设备一样&#xff0c; GPIO 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/gpio 目录下。可以看到该目录下包含两个文件 export、 unexport 以及 5 个 gp…

面试 | 百度测试开发岗位面试题目回顾

一面题目 二面题目 面试经历详情 在招聘网站投递简历后&#xff0c;收到面试通知信息&#xff08;如下图&#xff0c;为保护个人隐私&#xff0c;面试岗位、地点、时间等隐去&#xff09;。虽然写的是高级测试开发工程师&#xff0c;但是面试官说他们部门的测试不一定都要写框架…

【年更分享】带你看看前端生态圈的技术趋势 state-of-css 2022 state-of-js 2022详细解读

各位前端开发者们大家好&#xff0c;我又来给大家解读最新一年的 state-of-css & state-of-js 技术调查了&#xff01; 往年的 state-of-css 和 state-of-js 的解读&#xff1a; state-of-js 2020 详细解读 state-of-js 2021 详细解读 state-of-css 2021 详细解读 一、写…

php 断点调试 PHPStorm Xdebug helper

安装与使用php的xdebug扩展 浏览器访问只包含<?php phpinfo();的php文件&#xff0c;查看php详情。页面搜索是否安装了xdebug扩展。 如未安装&#xff0c;则访问&#xff1a;xdebug安装向导&#xff0c;将phpinfo()的输出页面复制到此文本框中&#xff0c;点击页面下方的“…

Ubuntu18.04安装Anaconda

Ubuntu18.04安装Anaconda 文章目录Ubuntu18.04安装Anaconda1 下载Anaconda2 安装annaconda3 创建新环境conda环境配置指令pip环境&#xff0c;阿里源切换虚拟环境pytorch 安装不成功pycharm切换python版本4 国内conda源5 卸载anacondaReference1 下载Anaconda 下载Anaconda3-2…

Zerotier免费的虚拟局域网

Zerotier介绍 Zerotier是一款用于构建异地虚拟局域网的工具。 通过网页后台创建虚拟网络并进行管理。 通过电脑上的Zerotier客户端连接各个异地电脑到虚拟局域网&#xff0c;从而实现组网。 由后台分配虚拟ip&#xff0c;并且各个异地电脑可以通过虚拟IP对同一虚拟局域网下的其…

零基础学SQL(九、分组 GROUP BY)

目录 前置建表 ​编辑 一、分组的概念 二、分组案例 三、分组的过滤HAVING子句 前置建表 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT 主键,code varchar(255) NOT NULL COMMENT 学号,name varchar(255) DEFAULT NULL COMMENT 姓名,sex enum(男,女) DEF…

HTML知识梳理

文本格式化标签 标签语义加粗 <strong></strong>或者<b></b>更推荐使用<strong>标签加粗语义更强烈倾斜 <em></em>或者<i></i>更推荐使用<em>标签倾斜语义更强烈删除线 <del></del>或者<s><…

MySQL8源代码安装(CentOS8版本)

目标 在CentOS8上面源代码编译安装MySQL8. 下载源代码 打开MySQL下载页面&#xff1a; https://www.mysql.com/downloads/ 找到MySQL社区版本页面&#xff1a; 选择下载MySQL社区版服务器进行下载&#xff1a; 最后选择&#xff0c;MySQL源代码进行下载&#xff0c;如下图…

以element ui为例分析前端各种弹窗和对话框的使用场景与区别

文章目录摘要Dialog 对话框Drawer 抽屉Notice 通知MessageBox 弹框Popconfirm 气泡确认框Message 消息提示Notification 通知Dialog 对话框与Drawer 抽屉的区别MessageBox和Dialog的区别Message消息提示与Notification通知的区别摘要 本文研究分析element ui 中的各种弹窗和对…

【机器学习 吴恩达】2022课程笔记(持续更新)

一、机器学习 1.1 机器学习定义 计算机程序从经验E中学习&#xff0c;解决某一任务T&#xff0c;进行某一性能P&#xff0c;通过P测定在T上的表现因经验E而提高 eg&#xff1a;跳棋程序 E&#xff1a; 程序自身下的上万盘棋局 T&#xff1a; 下跳棋 P&#xff1a; 与新对手下…

Python离线下载whl文件,xxx.wh1 is not a supported wheel on this platform

0、问题 今天在安装 whl 文件的时候&#xff0c;由于电脑处于没有网络的情况&#xff0c;只能在有网络的电脑上下载好 whl 文件&#xff0c;导入之后进行离线安装 但是由于版本不匹配的问题。导致报如下的错误&#xff1a; ERROR&#xff1a;xxx.wh1 is not a supported whe…