2015-03-31 44 views
0

这是我试图运行帐户GLM保存一些运营商服用一种以上测量的随机效应的一个子集的数据集:随机效应GLM

data<-data.frame(c("AA","AB","AC","AD","AE","AF","AG","AB","AE","AH","AI","AJ","AK","AL","AM","AD","AN","AO","AP","AQ","AR","AS","AT","AU","AJ","AM","AI","AD","AV","AW","AE","AA","AY","AP","AM","AZ","BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BF","BL","AI","AD","BM","BN","BO","AU","AM","AE","AI","AC","BP","BQ","BR","BS","AB","BT","BU","BV","LEH","AD","AZ","BW","BL","BX","BY","BZ","BR","AL","BU","AJ","CA","CB","BO","BU","BO","CC","CD","BU","CE","CF","CG","CH","BO","AX","AJ","CI","AN","CJ","BO","AJ","CK","AY","CL","CM","CL","CN","AV","CO","BP","CP","CK","BP","BF","CQ")) 
colnames(data)[1]<-"op" 
data$resp<-c(1,NA,1,1,1,0,1,1,1,0,NA,0,1,1,0,NA,0,0,0,1,NA,1,0,0,1,0,NA,NA,0,0,1,0,1,0,1,NA,0,NA,NA,NA,1,0,0,1,0,1,0,1,NA,1,1,1,1,0,1,0,NA,1,1,NA,1,NA,1,0,0,0,1,NA,NA,1,1,1,NA,1,NA,NA,NA,NA,0,1,NA,0,1,0,1,NA,1,0,1,0,0,0,0,1,0,NA,1,0,NA,1,0,1,1,0,NA,1,1,1,0,0,0,1,1) 
data$var1<-c(NA,NA,0,1,NA,NA,NA,1,NA,NA,NA,NA,NA,1,0,NA,NA,NA,0,NA,NA,NA,NA,0,1,0,NA,NA,NA,NA,NA,0,1,0,0,NA,NA,NA,NA,NA,NA,NA,0,NA,NA,1,0,1,NA,1,1,NA,NA,NA,1,0,NA,1,0,NA,1,NA,1,0,0,0,1,NA,NA,1,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,0,NA,0,1,NA,1,0,NA,NA,0,0,0,1,NA,NA,1,NA,NA,1,NA,1,0,0,NA,1,NA,NA,NA,NA,0,NA,NA) 
data$var2<-c(NA,NA,NA,NA,NA,NA,1,NA,1,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,1,NA,1,NA,NA,NA,NA,NA,NA,NA,0,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,0,NA,1,NA,NA,NA,NA,NA,NA,NA,1,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,1,NA,NA,NA,1,NA) 
data$var3<-c(NA,NA,1,NA,NA,0,1,NA,1,0,NA,NA,0,1,0,NA,NA,NA,0,0,NA,0,NA,0,0,0,NA,NA,NA,0,0,0,0,0,1,NA,NA,NA,NA,NA,1,0,NA,1,NA,0,0,1,NA,NA,NA,1,1,NA,0,0,NA,1,1,0,NA,NA,1,NA,0,0,0,NA,NA,0,NA,1,NA,0,NA,NA,NA,NA,NA,NA,NA,0,0,0,1,NA,1,NA,NA,0,0,0,0,0,NA,NA,NA,NA,NA,1,NA,0,1,0,NA,NA,0,0,NA,NA,0,NA,NA) 

当我跑第一GLM使用glmer(来自lme4)如下:

summary(glmer(resp~var1+(1|op),data=data,family=binomial,na.action=na.omit)) 

我只获得该错误消息

Warning messages: 
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 
    unable to evaluate scaled gradient 
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 
    Hessian is numerically singular: parameters are not uniquely determined 
Error in diag(vcov(object, use.hessian = use.hessian)) : 
    error in evaluating the argument 'x' in selecting a method for function 'diag': Error in solve.default(h) : 
    Lapack routine dgesv: system is exactly singular: U[3,3] = 0 

当我运行第二GLM用于第二可变

summary(glmer(resp~var2+(1|op),data=data,family=binomial,na.action=na.omit)) 

我然后获得该其他信息:如果我运行它用于第三可变

Error in summary(glmer(resp ~ var2 + (1 | op), data = data, family = binomial, : 
    error in evaluating the argument 'object' in selecting a method for function 'summary': Error in summary(glmer(resp ~ var2 + (1 | op), data = data, family = binomial, : 
    pwrssUpdate did not converge in (maxit) iterations 

summary(glmer(resp~var3+(1|op),data=data,family=binomial,na.action=na.omit)) 

然后它似乎工作好,但它是真的吗?分析不适用的数据分布必须有一些东西。任何人有任何想法,并可以提出一种解决方法?

我可能必须通过运行找到变通的办法

summary(lme(resp~var1,random=~1|op,data=data,na.action=na.omit)) 

这似乎运行确定了所有3个变量,但结果是glmer和LME之间的数据$ VAR3有点不同,我不相信我在这一点上的结果。 我不知道为什么我会收到这些错误,并且在SO和其他网站中找到的所有解释对我来说都没有多大意义。数据非常简单,但为什么这不起作用?使用lme是否合适? 非常感谢

回答

1

在第二个的情况下,它很容易地看到,回归应该失败(因为预测和结果变量是相同的):

> na.omit(data[c('resp','var2','op')]) 
    resp var2 op 
7  1 1 AG 
9  1 1 AE 
13  1 1 AK 
20  1 1 AQ 
22  1 1 AS 
30  0 0 AW 
31  1 1 AE 
42  0 0 BF 
44  1 1 BH 
52  1 1 BM 
53  1 1 BN 
74  1 1 BY 
83  1 1 BU 
107 1 1 CO 
108 1 1 BP 
112 1 1 BF 

在的情况下第一个它们几乎是相同的,尽管有几个案例(我认为有两个)具有不同的值,但是由于聚类术语强加了额外的结构,所以错误消息不同也不足为奇。

在第三个的情况下,存在不同的问题:

> with(na.omit(data[c('resp','var3','op')]), table(resp,var3)) 
    var3 
resp 0 1 
    0 22 0 
    1 16 18 

这被称为“完全分离”。当var3为1时,不存在resp等于0的情况。因此1的“真”可能性是无穷大。我猜你的系数是10或20(或者其中的一个)。这是一个Logistic回归的病理结果的标志,因为指数系数(这是比值比)非常大。道德:在进入回归建模之前,您应该学会做更多的表格调查。

+0

谢谢@BondedDust - 这是有道理的!我可以看出,数据并不完全独立,因此是奇怪的结果。谢谢! – MarcoD 2015-04-08 15:50:00