混合线性模型如何检测固定因子和随机因子的显著性以及计算R2_混合效应模型怎么计算r2-程序员宅基地

技术标签: 混合线性模型  

很多朋友写信问我, 像要知道固定因子的显著性和随机因子的显著性如何计算,他们使用的是lme4这个R包, 但是这个包使用anova时没有P值,还要手动计算, 随机因子也需要自己计算loglikehood值, 然后使用LRT的卡方检验进行显著性检验, 其实lme4包有扩展的包可以非常友好的做这件事情.

1. 载入数据和软件包

###载入软件包和数据
library(lme4)
library(lmerTest)
library(sjstats)
library(learnasreml)
data(fm)

2. 软件包介绍

lme4

  • R语言中最流行的混合线性包
  • 结果不太友好, 所以才有下面两个包作为辅助
  • 安装方法
install.packages("lme4")

lmerTest

  • 主要是用于检测lme4对象的固定因子和随机因子,它有两个函数:
  • lmerTest::anova.lmerModLmerTest用于检测固定因子的显著性, 方差分析表采用III平方和的形式.
  • lmerTest::ranova用于检测随机因子的显著性, 使用的是LRT检验, 给出的是卡方结果.
  • 安装方法
install.packages("lmerTest")

sjstats

  • 可以计算R2
  • 可以提取方差组分
  • 安装方法
install.packages("lmerTest")

3. 使用lme4进行混合线性分析

模型介绍

  • 固定因子: Spacing + Rep
  • 随机因子: Fam

建模

### 固定因子: Spacing+Rep, 随机因子: Fam
fm1 <- lmer(h1 ~Spacing + Rep + (1|Fam), fm)

固定因子检验

anova(fm1) # 固定因子显著性检验
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Spacing 1775.888 1775.888 1 786.2359 34.98368 4.957481e-09
Rep 5339.632 1334.908 4 781.5386 26.29670 1.762292e-20

可以看到Spacing 和Rep都达到极显著

随机因子显著性检验

ranova(fm1) # 随机因子显著性检验,LRT
npar logLik AIC LRT Df Pr(>Chisq)
<none> 8 -2831.504 5679.008 NA NA NA
(1 | Fam) 7 -2876.161 5766.323 89.31466 1 3.367543e-21

可以看到Fam达到极显著

计算R2

r2(fm1) # 计算R2
R-Squared for Generalized Linear Mixed Model

[34mFamily : gaussian (identity)
Formula: h1 ~ Spacing + Rep + (1 | Fam)

[39m   Marginal R2: 0.116
Conditional R2: 0.277

计算固定因子每个水平的P值


p_value(fm1) # 计算每个水平的显著性

term p.value std.error
(Intercept) 1.535094e-127 0.7915991
Spacing3 4.957481e-09 0.5463546
Rep2 2.886600e-01 0.8082299
Rep3 7.443430e-08 0.8218056
Rep4 1.720753e-10 0.7995633
Rep5 4.635631e-01 0.7663026

提取方差组分

re_var(fm1) # 计算方差组分
_sigma_2
50.7633345854535
Fam_tau.00
11.3168413429073

4. 使用asreml进行对照

建模

library(asreml)
fm2 = asreml(h1 ~ Spacing + Rep, random = ~ Fam, data=fm,trace=F)

固定因子检验

anova(fm2) # 固定因子显著性检验, 这里anova 是anova.asreml
Df Sum of Sq Wald statistic Pr(Chisq)
(Intercept) 1 253059.46646 4985.08358 0.000000e+00
Spacing 1 1164.71720 22.94406 1.667844e-06
Rep 4 5339.63197 105.18678 0.000000e+00
residual (MS) NA 50.76333 NA NA

随机因子显著性检验

这里首先构建一个空模型, 然后使用LRT检验

fm_Null = asreml(h1 ~ Spacing + Rep, data=fm,trace=F)

lrt.asreml(fm2,fm_Null) # 随机因子显著性检验LRT
Df LR statistic Pr(Chisq)
fm2/fm_Null 1 89.31466 0
summary(fm2)$varcomp[,1:2] # 方差组分
gamma component
Fam!Fam.var 0.2229334 11.31684
R!variance 1.0000000 50.76333

5. 关于混合线性模型计算R2

还有一个包叫MuMIn,也可以计算R2

library(MuMIn)
r.squaredLR(fm1)#计算R2

0.217233511687581

6. 完整代码分享

# 混合线性模型, 如何检测固定因子和随机因子

###载入数据
library(lme4)
library(lmerTest)
library(sjstats)
library(learnasreml)
data(fm)
str(fm)

### 固定因子: Spacing+Rep, 随机因子: Fam
fm1 <- lmer(h1 ~Spacing + Rep + (1|Fam), fm)
summary(fm1)

anova(fm1) # 固定因子显著性检验
ranova(fm1) # 随机因子显著性检验,LRT

r2(fm1) # 计算R2

p_value(fm1) # 计算每个水平的显著性

re_var(fm1) # 计算方差组分


### 对比asreml
fm2 = asreml(h1 ~ Spacing + Rep, random = ~ Fam, data=fm)
anova(fm2) # 固定因子显著性检验, 这里anova 是anova.asreml
fm_Null = asreml(h1 ~ Spacing + Rep, data=fm)
lrt.asreml(fm2,fm_Null) # 随机因子显著性检验LRT
summary(fm2)$varcomp[,1:2] # 方差组分


library(MuMIn)
r.squaredLR(fm1)#计算R2

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yijiaobani/article/details/90045837

智能推荐

有感而发:程序员到底要不要阅读框架源码?_学编程 需要看开源代码吗知乎-程序员宅基地

文章浏览阅读1.4k次,点赞12次,收藏20次。最近正在写【高并发专题】的文章,其中,在【高并发专题】中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读框架源码?!_学编程 需要看开源代码吗知乎

Java基础之int和Integer有什么区别-程序员宅基地

文章浏览阅读10w+次,点赞291次,收藏869次。1 int与Integer的基本使用对比(1)Integer是int的包装类;int是基本数据类型; (2)Integer变量必须实例化后才能使用;int变量不需要; (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; (4)Integer的默认值是null;int的默认值是0。2 int与Integer的深入对比(1)由于In..._int和integer

XML与JSON比较,并用AJAX传输XML/JSON数据_传参用xml和json-程序员宅基地

文章浏览阅读1.5k次。为实现数据与逻辑代码的分离,可以把数据单独存放,一般用xml 和json格式来存储数据。XML介绍 XML 指可扩展标记语言(EXtensible Markup Language),很类似 HTML。XML 的设计宗旨是传输数据,而非显示数据。 来个xml示例: 张信哲<_传参用xml和json

2021 年 5 月程序员工资排行:Go的工资满意吗?-程序员宅基地

文章浏览阅读455次。以下数据来自网络,不清楚怎么统计的,也不知道准确性,供参考!2021年5月全国招收程序员429056人。2021年5月全国程序员平均工资14926元,工资中位数13000元,其中96%的人..._go薪资

Facebook 360度音频编码与渲染-程序员宅基地

文章浏览阅读1.3k次。从360度视频到Oculus,通过Facebook 360音频编码与渲染都可实现身临其境的感受,并且使用的声道更少,小于0.5毫秒的渲染延迟。Facebook技术团队撰文对此进行了解读,LiveVideoStack对文章进行了编译。文 / Hans Fugal, Varun Nair译 / 郭俊翔审校 / 包研• 全新的360度空间音频编码和渲染技术,使得空间化的音频在从编辑者到用户的整个处理过程

VS 无法打开预编译头文件:“*.pch”的错误_无法打开预编译头文件 pch-程序员宅基地

文章浏览阅读2.5w次,点赞10次,收藏34次。stdafx.h在使用过Visual Studio,VC++的时候,我们新建工程的时候往往在每个.cpp文件的最前面都有一个#include "stdafx.h"。这个文件有他的作用,下面介绍其原理和使用过程中会遇到的一些问题。简介stdafx,全称Standard Application Framework Extensions,标准引用框架扩展。 其实就是头文件预编译,我们知道C..._无法打开预编译头文件 pch

随便推点

推荐开源项目:GCR Cleaner - 管理你的Google Cloud Registry高效又省心-程序员宅基地

文章浏览阅读302次,点赞3次,收藏10次。推荐开源项目:GCR Cleaner - 管理你的Google Cloud Registry高效又省心项目地址:https://gitcode.com/GoogleCloudPlatform/gcr-cleaner项目简介GCR Cleaner 是一个由 Google Cloud Platform 团队开发的工具,用于自动化清理 Google Cloud Registry (GCR) 中无用...

【机器视觉运动控制一体机小课堂】三分钟实现中值滤波去除噪点_labview中值滤波-程序员宅基地

文章浏览阅读1.7k次。背景在实际的机器视觉项目应用当中图像质量效果是视觉处理方案能否准确和稳定运行的关键因素。在遇到存在噪点的图像时,最常用的图像预处理方法就是进行中值滤波。中值滤波去除图像上存在孤立的噪声点有很好的应用效果,它能提高图像的平滑度。 它在去除噪点时,能够保护图像的边缘,使之不被模糊,保留大部分边缘信息。_labview中值滤波

emwin使用自定义字库显示字母及汉字特殊字符_emwin自带字库吗-程序员宅基地

文章浏览阅读6.1k次。基于Segger的emwin进行液晶屏上的图形开发,减低了很多工作量,也非常的好移植,ST系列的单片机上可以免授权使用。 emwin自带了很多字体,有各种大小的数字的字体,可以在GUI.h里面看到定义了的字体。emwin工程里自带了匹配该版本的图片和字体的生成工具。字体的生成工具FontCvtST。 为了节省内存空间,我们只需要关注自己要用到的字符。_emwin自带字库吗

Qt5开发及实例V2.0-第十一章-Qt事件处理及实例-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏3次。处理鼠标事件、键盘事件及实例,单击“OK”按钮,此时项目目录树右区资源文件下新增了一个“/new/prefix1”子目录项,单击该区下方“添加”按钮上的 ,选“添加文件”,按照如图11.6所示的步骤操作,在弹出的对话框中选择“image/image.png”文件,单击“打开”按钮,将该图片添加到项目中。② 在弹出的对话框中选择资源要存放的路径,如图11.4所示,在“名称”栏中填写资源名称“keyevent”。_qt5开发及实例v2.0-第十一章-qt事件处理及实例

vue中使用百度地图_vue使用百度地图-程序员宅基地

文章浏览阅读2.7k次。/enableMapClick:false 表示禁止地图内景点信息点击// 设置地图允许的最大最小级别// 开启鼠标滚轮缩放// 设置中心点坐标和地图级别// 创建自定义标记 参数:自定义图片路径 大小 偏移量)// 根据坐标批量生成自定义图标点// 创建点// 创建标注// 将标注添加到地图中// 给标记点添加点击事件执行想进行的操作(经个人测试在此处注册点击事件效果最佳,该有的数据项都可以获取)})})},// 创建一个新图标)_vue使用百度地图

php implode 源码,PHP源码阅读笔记一:explode和implode函数-程序员宅基地

文章浏览阅读67次。PHP源码阅读笔记一一、explode和implode函数array explode ( string separator, string string [, int limit] )此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含..._implode(): argument must be an array

推荐文章

热门文章

相关标签