具有相互作用的三因素逻辑回归

时间:2014-11-03 19:55:45

标签: r statistics

我有一个三因素的连续性表,探讨犯罪行为,入店行窃或其他盗窃行为,性别和先前的定罪以及另一方面的宽松判决之间的关联。 Lenient senteces是这里的响应变量,是二进制的,1表示接收宽松句子,否则为0。

            Crime Gender Priorconv Yes No
1      Shoplifting    Men         N  24  1
2 Other Theft Acts    Men         N  52  9
3      Shoplifting  Women         N  48  3
4 Other Theft Acts  Women         N  22  2
5      Shoplifting    Men         P  17  6
6 Other Theft Acts    Men         P  60 34
7      Shoplifting  Women         P  15  6
8 Other Theft Acts  Women         P   4  3

您可以使用这些命令重新创建表格

table1<-expand.grid(Crime=factor(c("Shoplifting","Other Theft Acts")),Gender=factor(c("Men","Women")),
Priorconv=factor(c("N","P")))

table1<-data.frame(table1,Yes=c(24,52,48,22,17,60,15,4),No=c(1,9,3,2,6,34,6,3))

我一直试图运行逻辑回归,但当我尝试在变量之间包含交互时很快就遇到了麻烦。 glm在没有相互作用的情况下完美运行。我一直在使用的代码是

fit<-glm(cbind(Yes,No)~Crime+Gender+Priorconv+I(Crime*Priorconv),data=table1,family=binomial)

和我一直在犯的错误

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels
In addition: Warning message:
In Ops.factor(Crime, Priorconv) : * not meaningful for factors

你能告诉我如何处理这个错误吗?

谢谢

2 个答案:

答案 0 :(得分:5)

通过指定I(Crime*Priorconv),您要求R计算值Crime*Priorconv,它拒绝这样做(因为乘法因子没有意义)。 如果 CrimePriorconv已经是数字虚拟变量(例如0/1编码,0 =入店行窃,1 =其他,0 = N,1 = P)那么它会有意义地将它们相乘,你可以使用I()表示法来表示你想要乘以它们。

否则(如果使用I()),R会将*解释为“互动加上所有低阶效果”,即Crime*Priorconv对应于1+Crime+Priorconv+Crime:Priorconv(其中:表示交互)。 R将自动处理冗余(即,您已经指定了CrimePriorconv的主效应):在公式上下文中,包括冗余主效应并明确包括截距({{1} })或不是等价的。这些公式都将指定相同的模型:

1

但我更喜欢最后一个:作为@ J.R。在他的回答中指出,你可以利用1+Crime+Priorconv+Crime:Priorconv Crime+Priorconv+Crime*Priorconv Crime+Priorconv+Crime:Priorconv Crime*Priorconv 符号来更紧凑地表达你的模型。

答案 1 :(得分:3)

您可以在公式中使用x:y来指定x和y之间的交互,例如:

fit<-glm(cbind(Yes,No)~Crime+Gender+Priorconv+Crime:Priorconv,data=table1,family=binomial)

或更短一些:

fit<-glm(cbind(Yes,No)~Gender+Crime*Priorconv,data=table1,family=binomial)