R语言:线性混合效应模型及R语言实现

1.A very basic tutorial for performing linear mixed effects analyses(入门极品)

Tutorial 1: http://www.bodowinter.com/tutorial/bw_LME_tutorial1.pdf

Tutorial 2: http://www.bodowinter.com/tutorial/bw_LME_tutorial.pdf

<http://www.bodowinter.com/tutorial/bw_LME_tutorial.pdf>

nlme (Non-Linear Mixed Effects), lme4 (Linear Mixed Effects) and asreml

(average spatial real)


2.其它资料(Google搜索即有)

Mixed-Eects Models in R (较好)

An Appendix to An R Companion to Applied Regression, Second Edition


John Fox & Sanford Weisberg

Linear Mixed-Effects Models Using R(一本教材,进阶选用)


A Step-by-Step Approach


Andrzej Ga?ecki ? Tomasz Burzykowski


3.R中的线性混合模型介绍(简单了解不同的包)

http://blog.sciencenet.cn/blog-2577109-949820.html

https://www.r-bloggers.com/linear-mixed-models-in-r/


3.语法备忘


* 三种模型:

* AOD固定斜率,DAY随机截距:LMM.model = lmer(PM25 ~ AOD + (1|Day) , data=LMMexcdata)

* AOD随机斜率,DAY固定截距:LMM.model3 = lmer(PM25 ~ AOD + (0 + AOD|Day) ,

data=LMMexcdata)

* AOD随机斜率,DAY随机截距:LMM.model2 = lmer(PM25 ~ AOD + (1 + AOD|Day) ,

data=LMMexcdata)


* 师姐发来的查看斜率和截距的程序:

sslopef=as.numeric(as.matrix(lme4::fixef(fm1)[2]))

sloper=as.numeric(LMM.model(lme4::ranef(fm1)$Day[,2]))

intersf= as.numeric(LMM.model(lme4::fixef(fm1)[1]))

intersr=as.numeric(LMM.model(lme4::ranef(fm1)$Day[,1]))


lme4::fixef(yourmodle)读取固定截距和斜率

lme4::fixef(yourmodle)读取随机截距和斜率


文档中示例(A very basic tutorial for performing linear mixed effects analyses):

-----------------------------------------

#load data into R

politeness=read.csv("http://www.bodowinter.com/tutorial/politeness_data.csv")

#================view the dataset======================

#show the head of politeness

head(politeness)

#show the tail of politeness

tail(politeness)

# other commands you may use

summary(politeness)

str(politeness)

colnames(politeness)

#================check for missing values======================

which(!complete.cases(politeness))

#======look at the relationship between politeness and pitch by means of a

boxplot==========

boxplot(frequency ~ attitude*gender,

        col=c("white","lightgray"),politeness)

#================A random intercept model======================

library(Matrix)

library(lme4)

lmer(frequency ~ attitude, data=politeness)

politeness.model = lmer(frequency ~ attitude +

                          gender + (1|subject) +

                          (1|scenario), data=politeness)

summary(politeness.model)

#Statistical significance test

politeness.null = lmer(frequency ~ gender +

                         (1|subject) + (1|scenario), data=politeness,

                       REML=FALSE)

politeness.model = lmer(frequency ~ attitude +

                          gender + (1|subject) + (1|scenario),

                        data=politeness, REML=FALSE)

anova(politeness.null,politeness.model)

#look at the coefficients of the model by subject and by item

coef(politeness.model)

#================A random slope model======================

politeness.model = lmer(frequency ~ attitude +

                          gender + (1+attitude|subject) +

                          (1+attitude|scenario),

                        data=politeness,

                        REML=FALSE)

coef(politeness.model)

#Statistical significance test (try to obtain a p-value)

#construct the null model

politeness.null = lmer(frequency ~ gender +

                         (1+attitude|subject) + (1+attitude|scenario),

                       data=politeness, REML=FALSE)

#do the likelihood ratio test

anova(politeness.null,politeness.model)

-----------------------------------------------------

结果分析

1.使用数据:subject(F1,F2,F3,M3,M4,M7),gender(M,F),scenario 语境

(1~7),attitude(inf,pol),frequency(e.g.200Hz)


2.随机截距模型:

2.1 代码

politeness.model = lmer(frequency ~ attitude + gender + (1|subject) +

(1|scenario), data=politeness, REML=FALSE)

其中:

Fix effect: attitude, gender(固定斜率)

Random intercepts: subject, scenario (随机截距)

*we’ve told the model with “(1|subject)” and “(1|scenario)” to take by-subject

and by-item variability into account.

2.2 输出系数分析:(注:这个系数是总系数,固定系数和随机系数已加和)

--------------------

PS. 若想分别查看固定系数和随机系数,使用以下命令

#输出固定效应系数

print(lme4::fixef(yourmodel))

#输出随机效应系数

print(lme4::ranef(yourmodel))

------------------

对于随机截距模型:

Random intercepts:

scenario1~7:各自具有不同的随机截距

subject(F1,F2,F3,M3,M4,M7):各自具有不同的随机截距

Fix effect:

对于所有项都是相同的:attitudepol :attitudepol的pol斜率

                                        genderM:geder的M斜率 


3.随机截距模型+随机截距模型

3.1 代码

politeness.model = lmer(frequency ~ attitude + gender + (1+attitude|subject)

+ (1+attitude|scenario), data=politeness, REML=FALSE)

其中:

> Fix effect: 

gender为固定斜率,

> Radom effect:

让attitude随机斜率,

subject,scenario为随机截距

*The notation “(1+attitude|subject)” means that you tell the model to expect

differing baseline-levels of frequency (the intercept, represented by 1)


3.2 输出系数分析:(注:这个系数是总系数,固定系数和随机系数已加和)


> Fix effect:

genderM:geder的M斜率,固定斜率

> Random intercepts:

scenario1~7:各自具有不同的随机截距

subject(F1,F2,F3,M3,M4,M7):各自具有不同的随机截距

attitudepol :attitudepol的pol斜率,随机斜率


--------------------------------------------

自己写的程序:

(读取nc文件并合并,做混合效应模型+系数验证)

#========Set the working directory (on a Mac) and load the data========

##setwd("/Users/Gewanru/Documents/mix effect/")

#=======Read Data from a folder(循环读入多个txt文件)==========

##a = list.files("input")

##dir = paste("./input/",a,sep="")            

##n = length(dir)     

##LMMexcdata = read.table(file = dir[1],header=TRUE,dec = ".")

##for (i in 2:n){

##  new.data = read.table(file = dir[i], header=TRUE, dec = ".")

##  LMMexcdata = rbind(LMMexcdata,new.data)

##}

#read a single table

##LMMexcdata <- read.table(file = "merge.txt", header = TRUE, dec = ".")

#========view the data set(查看数据结构)=============

#see the variable names of the data 

##names(LMMexcdata)

#show the head of the data

##head(LMMexcdata)

#show the data structure

##str(LMMexcdata)

#check for missing values(misiing value:"NA")

##which(!complete.cases(LMMexcdata))

#show the tail of the data

##tail(LMMexcdata)

# other commands may use

##summary(LMMexcdata)

##colnames(LMMexcdata)

#==========Read nc files(读取气象nc文件,若不用则用上一个读取方式)===============

setwd("/Users/Gewanru/Documents/mix effect/2015/Resultsnc")

library(ncdf4)

ncname <- "0101"

ncfname <- paste(ncname, ".nc", sep = "")

dname <- "PM25"

#===open a NetCDF file==

ncin <- nc_open(ncfname)

print(ncin) #Obtain some basic information of the nc file

#===Read the data from a variable in the file==

PM25data <- ncvar_get(ncin)

nc_close(ncin)

dim(PM25data)#show the the size of the array

print(PM25)

#=======Drawing some plots=============

#Scatter plot(散点图)

##x <- LMMexcdata$AOD #define x lab

##y <- LMMexcdata$PM25 #define y lab

##plot(x, y, main = "Title", xlab = "PM2.5", ylab = "AOD") # "" : mian title &

Title of x(y)lab

#Box plot(箱线图)

#

#====================Correlation(求相关)=========================

#(Here we need to use all of the data)

#correlation

x <- LMMexcdata[,c("PM25","AOD")]

y <- LMMexcdata[,c("PM25","AOD")]

cor(x,y)

#correlation & Significance test(问题1:怎么让输出的数据位数更多一点?)

library(mnormt)

library(psych)

x <- LMMexcdata[,c("PM25","AOD")]

y <- LMMexcdata[,c("PM25","AOD")]

corr.test(x,y,use = "complete")

#===================== Linear Modle (线性回归模型)=====================

#The simplest modle(without temporal and spatial variations)

LMsimplest.model = lm(PM25 ~ AOD , data=LMMexcdata)

summary(LMsimplest.model)

coef(LMsimplest.model)

#Get the coefficient of the Linear Modle

#c1 <- LMsimplest.model$coefficient

#===========Linear Mixed effects model (混合效应模型)===================

#1.(Without site effect)

library(Matrix)

library(lme4)

LMM.model = lmer(PM25 ~ AOD + (1 + AOD|Day) , data=LMMexcdata)

summary(LMM.model)

coef(LMM.model)

print(lme4::fixef(LMM.model))

print(lme4::ranef(LMM.model))


#2.(With site effect)

##LMMsite.model = lmer(PM25 ~ AOD + (1 + AOD|Day) + (1|Site) , data=LMMexcdata)

##summary(LMMsite.model)

##coef(LMMsite.model)

#输出固定效应系数

##print(lme4::fixef(LMMsite.model))

#输出随机效应系数

##print(lme4::ranef(LMMsite.model))


#============Significance test of the model(混合效应模型显著性检验)============

LMM.null1 = lmer(PM25 ~ AOD + (0 + AOD|Day) , data=LMMexcdata, REML=FALSE)

LMM.null2 = lmer(PM25 ~ AOD + (1|Day) , data=LMMexcdata, REML=FALSE)

LMM.model = lmer(PM25 ~ AOD + (1 + AOD|Day) , data=LMMexcdata,REML=FALSE)

anova(LMM.null1,LMM.model)

anova(LMM.null2,LMM.model)

#============ Output (如果需要把系数输出成文本 ,自己完善下代码) ================

#Linear Mixed effects modle

#Get the coefficient of LLM

# coefficient (fixed)

AODslopefix=as.numeric((lme4::fixef(LMM.model)[2]))

interceptfix=as.numeric(as.matrix(lme4::fixef(LMM.model)[1]))

# coefficient (radom)

AODsloperad=as.numeric(as.matrix(lme4::ranef(LMM.model)$Day[,2]))

interceptsrad=as.numeric(as.matrix(lme4::ranef(LMM.model)$Day[,1]))


print(AODslopefix)

print(interceptfix)

print(AODsloperad)

print(interceptsrad)

#==============================================================

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容