lm()使用R-confused spss用户

时间:2016-10-14 10:29:56

标签: r spss lm exp

这是我的原始问题的完整记录

让我们假设我正在研究在重复测量实验中收集的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)

结果值清楚地表明分组没有被踢入。 知道为什么它没有成功吗?

2 个答案:

答案 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)

使用dplyrmagrittr,您应该能够使用此代码计算个人的z分数(它会将内容分解为您告诉它的组,然后在该组内计算)。< / p>

experiment %<>%
  group_by(subject) %>%
  mutate(rtLN = log(rt)
         , ZRE1 = scale(rtLN))

然后,您应该可以在模型中使用它。但是,有一件事可能有助于你转向R思考,你可以直接建立自己的模型,而不必提前制作所有这些列。例如,使用lme4subject视为随机变量:

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