这是我的原始问题的完整记录
让我们假设我正在研究在重复测量实验中收集的RT数据。作为我常规常规的一部分,我总是将RT转换为自然对数,然后计算每个参与者中每个RT 的Z分数,调整试验数。这通常通过SPSS语法中的简单回归来完成:
split file by subject.
REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R ANOVA
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT rtLN
/METHOD=ENTER trial
/SAVE ZRESID.
split file off.
在R生成数据中重现相同的过程:
#load libraries
library(dplyr); library(magrittr)
#generate data
ob<-c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3)
ob<-factor(ob)
trial<-c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6)
rt<-c(300,305,290,315,320,320,350,355,330,365,370,370,560,565,570,575,560,570)
cond<-c("first","first","first","snd","snd","snd","first","first","first","snd","snd","snd","first","first","first","snd","snd","snd")
#Following variable is what I would get after using SPSS code
ZreSPSS<-c(0.4207,0.44871,-1.7779,0.47787,0.47958,-0.04897,0.45954,0.45487,-1.7962,0.43034,0.41075,0.0407,-0.6037,0.0113,0.61928,1.22038,-1.32533,0.07806)
sym<-data.frame(ob, trial, rt, cond, ZreSPSS)
我可以应用公式(Mark和Daniel的解决方案的混合)来计算lm(log(rt)~trial)
回归中的残差,但由于某种原因,group_by
不能在这里工作
sym %<>%
group_by (ob) %>%
mutate(z=residuals(lm(log(rt)~trial)),
obM=mean(rt), obSd=sd(rt), zRev=z*obSd+obM)
结果值清楚地表明分组没有被踢入。 知道为什么它没有成功吗?
答案 0 :(得分:1)
mylm <- lm(x~y)
rstandard(mylm)
这将返回函数的标准化残差。要将这些绑定到变量,您可以执行以下操作:
zresid <- rstandard(mylm)
实施例
a<-rnorm(1:10,10)
b<-rnorm(1:10,10)
mylm <- lm(a~b)
mylm.zresid<-rstandard(mylm)
另见:
summary(mylm)
和
mylm$coefficients
mylm$fitted.values
mylm$xlevels
mylm$residuals
mylm$assign
mylm$call
mylm$effects
mylm$qr
mylm$terms
mylm$rank
mylm$df.residual
mylm$model
答案 1 :(得分:1)
使用dplyr
和magrittr
,您应该能够使用此代码计算个人的z分数(它会将内容分解为您告诉它的组,然后在该组内计算)。< / p>
experiment %<>%
group_by(subject) %>%
mutate(rtLN = log(rt)
, ZRE1 = scale(rtLN))
然后,您应该可以在模型中使用它。但是,有一件事可能有助于你转向R思考,你可以直接建立自己的模型,而不必提前制作所有这些列。例如,使用lme4
将subject
视为随机变量:
withRandVar <-
lmer(log(rt) ~ cond + (1|as.factor(subject))
, data = experiment)
然后,残差应该已经是正确的比例。此外,如果您使用z分数,您可能应在该比例上进行绘图。我实际上并不确定运行z分数是什么,因为响应会让你感到兴奋 - 似乎你会丢失有关组间差异程度的信息。
也就是说,如果组紧张,但它们之间的差异因主题而异,则z分数可能始终显示为相似数量的z分数。想象一下,例如,你有两个科目,条件A的一个得分(1,1,1)和条件B的(3,3,3),第二个得分(1,1,1)和( 5,5,5) - 两者都会给出(-9, - 。9, - 。9)vs(.9,.9,.9)的z分数 - 失去A和A之间的差异的信息受试者2中B较大。
但是,如果你真的想要转换回来,你可以用它来存储主题均值和sds,然后将残差乘以subjSD
并添加subjMean
。
experiment %<>%
group_by(subject) %>%
mutate(rtLN = log(rt)
, ZRE1 = scale(rtLN)
, subjMean = mean(rtLN)
, subjSD = sd(rtLN))