2014-11-03 216 views
2

我有一個三因素關聯表,其中探討了犯罪行爲,偷竊行爲或其他偷竊行爲之間的關聯,性別和先前的定罪以及寬鬆的判刑。寬鬆的參數是這裏的響應變量,是二進制的,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 

你能告訴我怎麼來解決這個錯誤?

謝謝

+3

嘗試'犯罪:Priorconv' – 2014-11-03 19:59:16

+0

@ J.R。這很好,謝謝。由於這是正確的做法,請隨時將其張貼爲答案,以便將其標記爲正確的答案。 – JohnK 2014-11-03 20:05:32

回答

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) 
+0

再次感謝,微妙的一點。 – JohnK 2014-11-03 20:18:31

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+Crime+Priorconv+Crime:Priorconv 
Crime+Priorconv+Crime*Priorconv 
Crime+Priorconv+Crime:Priorconv 
Crime*Priorconv 

但我更喜歡最後一個:as @ J.R。在他的回答中指出,您可以利用*表示法更加緊湊地表達您的模型。

+0

我明白了,非常感謝。 – JohnK 2014-11-03 20:10:58