2016-09-14 46 views
1

我有興趣查看抑鬱症患者在記憶任務中是否存在羣體差異(對照和PTSD)。我運行了一個ANCOVA模型。這是我的語法:使用R中的ANCOVA設計獲得每個受試者的調整值

memory <- c(0.7085, 1, 0.375, 0.4585, 1, 0.8, 0.875, 0.35, 0.8, 0.9, 1, 0.425, 0.8335, 1, 0.4665, 0.75, 1, 0.6665, 0.8, 0.9, 1, 0.375, 0.5, 0.625, 0.5, 1, 0.7085, 0.625, 0.5835, 0.8335, 0.6, 1, 0.75, 0.4585, 0.6, 0.7, 0.6665, 0.8, 1, 0.875, 0.5, 1, 0, 0.4165) 
group <- factor(c(rep("controls", 31), rep("ptsd", 13)), levels=c("controls", "ptsd")) 
BDI <- c(1, 7, 0, 5, 3, 2, 4, 18, 7, 8, 0, 2, 10, 17, 1, 22, 6, 5, 4, 4, 0, 2, 4, 4, 8, 14, 4, 11, 3, 9, 11, 15, 33, 20, 31, 23, 25, 20, 21, 36, 14, 41, 22, 16) 

#ANCOVA 
Anova(lm(memory ~ BDI + group), type="III") 

#Anova Table (Type III tests) 

#Response: memory 
#   Sum Sq Df F value Pr(>F)  
#(Intercept) 8.3847 1 148.3227 3.331e-15 *** 
#BDI   0.0951 1 1.6829 0.2018  
#group  0.1136 1 2.0087 0.1640  
#Residuals 2.3177 41      
#--- 
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

我看到任務上沒有顯着的羣體差異,p值= 0.1640。但是,我也想獲得調整後平均爲每個組:

data   <- data.frame(group, BDI, memory) 
model  <- lm(memory ~ BDI + group) 
BDI.predict <- rep(mean(BDI), 2) 
data.predict <- data.frame(group = group, BDI = BDI.predict) 
adjmeans  <- predict(model, data.predict) 
adjmeans 

而且我看到,對於控制調整後平均爲0.7636093和創傷後應激障礙組是0.5810471。

我的問題是如何獲得每個主題的調整值?

一個我想要做的事情是看看是否每一組以上的機會(單樣本t檢驗)進行,我想使用的調整值(控制抑鬱症後),而不是原始值。

+1

這不是預測功能家族提供的功能。參見'?predict.lm' –

+0

對使用​​'predict'的建議沒有反應。投票結束模糊。這似乎只是模糊地像一個編程問題,更像是一個統計問題(或者可能只是通過「閱讀手冊」很快解決的問題。) –

+0

嗨42,我嘗試使用predict.lm(模型),這只是回饋原始值。我可能不太瞭解predict.lm()的用法,即使我閱讀了手冊,但我仍然試圖在控制抑鬱症之後獲得調整後的值。你介意給出特定的代碼嗎?謝謝! – Dana

回答

0

約翰·福克斯的effects包將提供這個問題的答案對你:

library (effects) 
help(pac=effects) 
mod.dat <- lm(memory ~ BDI + group, 
    data=data) 
mod.dat <- lm(memory ~ BDI + group, 
    data=data) 
eff.dat <- allEffects(mod.dat, xlevels=list(group=c("controls","ptsd"))) 
eff.dat 
#----- output 
model: memory ~ BDI + group 

BDI effect 
BDI 
     0  10  20  30  40 
0.6241901 0.6975066 0.7708231 0.8441396 0.9174561 

group effect 
group 
controls  ptsd 
0.7636093 0.5810471 

這是eff.dat ojbect說的內容的「組」部分包含了print.eff功能提供值:

STR(eff.dat)#然後剪斷了第一部分:

$ group:List of 21 
    ..$ term     : chr "group" 
    ..$ formula    :Class 'formula' language memory ~ BDI + group 
    .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    ..$ response    : chr "memory" 
    ..$ variables    :List of 1 
    .. ..$ group:List of 3 
    .. .. ..$ name  : chr "group" 
    .. .. ..$ is.factor: logi TRUE 
    .. .. ..$ levels : chr [1:2] "controls" "ptsd" 
    ..$ fit     : num [1:2, 1] 0.764 0.581 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:2] "1" "2" 
    .. .. ..$ : NULL 

所以,如果你想那些爲五個ctor只是按名稱地址列表:

> eff.dat$group$fit 
     [,1] 
1 0.7636093 
2 0.5810471 
+0

這是一個更簡單的方式來完成我最初的工作,謝謝!但是,我是R環境的新手,並閱讀軟件包。我會輸入什麼命令來獲取每個主題的調整值? – Dana

+1

我不明白這個問題。如何爲每個主題提供「調整值」。調整意味着某種分組。 –

+0

對不起,我想這是我對調整平均值的計算方法缺乏瞭解,但爲了得到調整後的平均值,沒有必要有個別值來得到每個羣的平均值? – Dana