2013-02-27 53 views
2

我試圖用lmer函數來研究在3種不同條件(cond = 0,1,2)之間的反應時間(RT)是否存在交互效應,患者(患者)的目標(目標=假或真)。在R中使用lmer函數改變截距

我寫了下面的公式:

lmer(RT~cond*target+(1|Patient)) 

我的問題是,該功能的默認截距是COND = 0和目標=假,而我想攔截是COND = 0和目標=真(爲了查看cond0 * target = True和cond1 * target = True是否有顯着差異)。

我真的很感謝你的幫助。

這裏是輸出I具有

stu3<-lmer(RT~cond*target+(1|Patient), 
    data=subset(ss, Groupe=="ugs" & primeable ==TRUE  & 
      Correct==TRUE & NoPrac==TRUE)) 

pvals.fnc(stu3) 


$fixed 
        Estimate MCMCmean HPD95lower HPD95upper pMCMC Pr(>|t|) 
(Intercept)   0.5511 0.5513  0.5258  0.5807 0.0001 0.0000 
cond1    0.0618 0.0619  0.0498  0.0741 0.0001 0.0000 
cond2    0.0285 0.0285  0.0142  0.0438 0.0002 0.0001 
targetFALSE   0.1389 0.1389  0.1239  0.1549 0.0001 0.0000 
cond1:targetFALSE -0.0752 -0.0751 -0.0943 -0.0545 0.0001 0.0000 
cond2:targetFALSE -0.0788 -0.0786 -0.0998 -0.0564 0.0001 0.0000 

$random 
    Groups  Name Std.Dev. MCMCmedian MCMCmean HPD95lower HPD95upper 
1 Patient (Intercept) 0.0610  0.0583 0.0599  0.0425  0.0797 
2 Residual    0.1674  0.1674 0.1674  0.1650  0.1699 

基於我的數據,被選擇的截距是cond0:targetTRUE,並在輸出其他級別是cond1:targetFALSEcond2:targetFALSE

+0

所以'cond1'參數應完全對應於差的測試COND之間'== 0'和'當'target'爲'TRUE'時(假設你沒有做任何聰明的事情......),這就是你想要的。 – 2013-02-27 23:53:26

回答

1

看看標準的「要素管理」是有效的:

target=factor(target, levels=c("TRUE", "FALSE") 
lmer(RT~cond*target+(1|Patient)) 

(我會用「改變基準水平」,而不是「改變攔截」這句話,但我想這是真的一樣的過程。我懷疑短語「更改參考級別」會讓你在MarkMail Rhelp或SO搜索中找到很少的點擊。)

+0

,並小心精確匹配的水平 - 即你的因子水平「TRUE」和「FALSE」,或「」True「和」False「,或」TRUE「和」FALSE「 ...? – 2013-02-27 20:54:03

+0

我在「目標」是一個邏輯向量的假設下構建了我的建議,在這種情況下,他們會寫作,但如果他們是Ben害怕的因素(和你寫的那樣),那麼請遵照他的建議並確保他們匹配拼寫。在你的數據元素上提供str()總是最好的。 – 2013-02-27 20:59:05

+0

因子水平爲TRUE且FALSE爲Ben。我試圖按照你的建議迪寧,但它只是切換的東西:這一次攔截是交互cond0 * targetTrue,但它比較它cond1 * targetFalse。 – Alba 2013-02-27 21:07:31

1

如果我理解正確,那麼你的模型已經在做你想在target==TRUE之內的解釋了。

"(Intercept)"  -> target==TRUE, cond==0 (even if model matrix contains all conds) 
"cond1"    -> target==TRUE, cond==1 on top of cond==0 
"cond2"    -> target==TRUE, cond==2 on top of cond==0 
"targetFALSE"  -> target==FALSE, cond==0 (even if model matrix contains all conds) 
"cond1:targetFALSE" -> target==FALSE, cond==1 on top of cond==0 
"cond2:targetFALSE" -> target==FALSE, cond==2 on top of cond==0 

所以不方面"(Intercept)""cond1""cond2"檢測到的有趣的差異:如果我是正確的,你可以在你的例子如下翻譯模型項?看看getME(stu3,'X')中的固定效應模型矩陣結構可能會有所幫助。

下面是我構建的一個示例數據,用於測試您的案例。請注意,我建立了三個不同的迴應:一個沒有任何效果,一個只具有target==TRUE效果,另一個具有target==TRUE的效果,並且與target==TRUE以及cond的不同級別具有交互效果。在fit1fit2檢測到人工引入的效果:

set.seed(0) 
struct <- expand.grid(target = c(FALSE,TRUE), cond = as.factor(0:2), patient = LETTERS[1:20]) 
attach(struct) 
ranpatient <- rep(rnorm(20), each=6) 
rerror <- rnorm(120) 
# Just random noise 
response0 <- ranpatient + rerror 
# When target==TRUE we increment the response by 1 and add errors 
response1 <- 1*target + ranpatient + rerror 
# When target==TRUE we increment the response by 1, 
# to which we also add an interaction effect condition {0,1,2} * target {0,1} 
# notice that numeric transformation of cond {0,1,2} transforms to ranks {1,2,3} 
response2 <- 1*target + target*(as.numeric(cond)-1) + ranpatient + rerror 

dat <- data.frame(cond, target, patient, response0, response1, response2) 
detach(struct) 

require(lme4) 
fit0 <- lmer(response0 ~ cond*target + (1|patient), data=dat) 
fit1 <- lmer(response1 ~ cond*target + (1|patient), data=dat) 
fit2 <- lmer(response2 ~ cond*target + (1|patient), data=dat) 

head(dat) 
round(coef(summary(fit0)),2) # Notice low t values 
round(coef(summary(fit1)),2) # High t value for targetTRUE 
round(coef(summary(fit2)),2) # High t value for interaction cond0/1/2 with targetTRUE 
# Notice how cond==1 adds 1, and cond==2 adds 2 in comparison to cond==0 when targetTRUE 
# Notice also that coefficient "cond2:targetTRUE" is incremental to term "targetTRUE", not "cond1:targetTRUE" 
head(getME(fit2,'X')) # Columns correspond to the fixed effect terms 

隨着輸出

> head(dat) 
    cond target patient response0 response1 response2 
1 0 FALSE  A 1.038686 1.038686 1.038686 
2 0 TRUE  A 1.640350 2.640350 2.640350 
3 1 FALSE  A 1.396291 1.396291 1.396291 
4 1 TRUE  A 2.067144 3.067144 4.067144 
5 2 FALSE  A 1.205848 1.205848 1.205848 
6 2 TRUE  A 1.766562 2.766562 4.766562 
> round(coef(summary(fit0)),2) # Notice low t values 
       Estimate Std. Error t value 
(Intercept)   -0.13  0.31 -0.40 
cond1    0.18  0.29 0.62 
cond2    0.00  0.29 0.00 
targetTRUE   0.00  0.29 -0.01 
cond1:targetTRUE  0.13  0.41 0.32 
cond2:targetTRUE  0.08  0.41 0.19 
> round(coef(summary(fit1)),2) # High t value for targetTRUE 
       Estimate Std. Error t value 
(Intercept)   -0.13  0.31 -0.40 
cond1    0.18  0.29 0.62 
cond2    0.00  0.29 0.00 
targetTRUE   1.00  0.29 3.42 
cond1:targetTRUE  0.13  0.41 0.32 
cond2:targetTRUE  0.08  0.41 0.19 
> round(coef(summary(fit2)),2) # High t value for interaction cond0/1/2 with targetTRUE 
       Estimate Std. Error t value 
(Intercept)   -0.13  0.31 -0.40 
cond1    0.18  0.29 0.62 
cond2    0.00  0.29 0.00 
targetTRUE   1.00  0.29 3.42 
cond1:targetTRUE  1.13  0.41 2.75 
cond2:targetTRUE  2.08  0.41 5.04 
> # Notice how cond==1 adds 1, and cond==2 adds 2 in comparison to cond==0 when targetTRUE 
> # Notice also that coefficient "cond2:targetTRUE" is incremental to term "targetTRUE", not "cond1:targetTRUE" 
> head(getME(fit2,'X')) # Columns correspond to the fixed effect terms 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 0 0 0 0 0 
[2,] 1 0 0 1 0 0 
[3,] 1 1 0 0 0 0 
[4,] 1 1 0 1 1 0 
[5,] 1 0 1 0 0 0 
[6,] 1 0 1 1 0 1 
+1

這一切都對我有意義。我會問的唯一調整是使用訪問器方法:'coef(summary())'而不是'@ coefs'和'getME(。,「X」)''而不是'@ X' – 2013-02-28 13:33:27

+0

感謝您的建議!我會記住它。我現在糾正了上面的代碼和輸出。 – 2013-02-28 14:18:48