具有btw-Ss和in-Ss因子的ANOVA的趋势分析

时间:2014-08-25 01:05:40

标签: r anova contrast

我想对具有btw-Ss和in-Ss因子的ANOVA进行趋势分析。

btw因素是“治疗” 内部因素是“试验”。

test.data <- data.frame(sid = rep(c("s1", "s2", "s3", "s4", "s5"), each = 4),
                    treatments = rep(c("a1", "a2"), each = 20),
                    trials = rep(c("b1", "b2", "b3", "b4"), 10),
                    responses = c(3,5,9,6,7,11,12,11,9,13,14,12,4,8,11,7,1,3,5,4,5,6,11,7,10,12,18,15,10,15,15,14,6,9,13,9,3,5,9,7))}

ANOVA完全匹配教科书(Keppel,1973)中的那个:

aov.model.1 <- aov(responses ~ treatments*trials + Error(sid/trials), data=tab20.09)       

我遇到的问题是趋势分析。我想看看“试验”的线性,二次和立方趋势。看看“治疗x试验”这些相同的趋势也很高兴。

我已将趋势分析的对比设置为:

contrasts(tab20.09$trials) <- cbind(c(-3, -1, 1, 3), c(1, -1, -1, 1), c(-1, 3, -3, 1))    

contrasts(tab20.09$trials)
   [,1] [,2] [,3]
b1   -3    1   -1
b2   -1   -1    3
b3    1   -1   -3
b4    3    1    1

表示线性,二次和三次趋势。

根据吉宝的说法,趋势的结果应该是:

TRIALS:   
              SS          df     MS          F  
(Trials)   (175.70)        3  
Linear       87.12         1    87.12     193.60  
Quadratic    72.90         1    72.90     125.69  
Cubic        15.68         1    15.68       9.50  

TREATMENTS X TRIALS  
               SS         df      MS         F  
(Trtmt x Trials)  
             (3.40)        3  
Linear        0.98         1      0.98       2.18  
Quadratic     0.00         1      0.00        <1  
Cubic         2.42         1      2.42       1.47  

ERROR TERMS  
            (21.40)       (24)  
Linear        3.60          8    0.45   
Quadratic     4.60          8    0.58  
Cubic        13.20          8    1.65   

我相信他的答案,因为我必须使用一个由纸和笔补​​充的6功能计算器来获取它们。但是,当我这样做时:

contrasts(tab20.09$trials) <- cbind(c(-3, -1, 1, 3), c(1, -1, -1, 1), c(-1, 3, -3, 1))    
aov.model.2 <- aov(responses ~ treatments*trials + Error(sid/trials), data=tab20.09)    
summary(lm(aov.model.2))    

我得到的似乎没有意义。

summary(lm(aov.model.2))  
Call:
lm(formula = aov.model.2)
Residuals:
ALL 40 residuals are 0: no residual degrees of freedom!

Coefficients: (4 not defined because of singularities)
                       Estimate Std. Error t value Pr(>|t|)
(Intercept)           5.750e+00         NA      NA       NA
treatmentsa2          3.500e+00         NA      NA       NA
trials1               6.500e-01         NA      NA       NA
trials2              -1.250e+00         NA      NA       NA
trials3              -4.500e-01         NA      NA       NA
sids10               -3.250e+00         NA      NA       NA
sids2                 4.500e+00         NA      NA       NA
sids3                 6.250e+00         NA      NA       NA
sids4                 1.750e+00         NA      NA       NA
sids5                -2.500e+00         NA      NA       NA
sids6                -2.000e+00         NA      NA       NA
sids7                 4.500e+00         NA      NA       NA
sids8                 4.250e+00         NA      NA       NA
 sids9                        NA         NA      NA       NA
treatmentsa2:trials1  2.120e-16         NA      NA       NA
treatmentsa2:trials2 -5.000e-01         NA      NA       NA
treatmentsa2:trials3  5.217e-16         NA      NA       NA
trials1:sids10        1.500e-01         NA      NA       NA
trials2:sids10        7.500e-01         NA      NA       NA
trials3:sids10        5.000e-02         NA      NA       NA
trials1:sids2        -1.041e-16         NA      NA       NA
trials2:sids2        -2.638e-16         NA      NA       NA
trials3:sids2         5.000e-01         NA      NA       NA
trials1:sids3        -1.500e-01         NA      NA       NA
trials2:sids3        -2.500e-01         NA      NA       NA
trials3:sids3         4.500e-01         NA      NA       NA
trials1:sids4        -5.000e-02         NA      NA       NA
trials2:sids4        -7.500e-01         NA      NA       NA
trials3:sids4         1.500e-01         NA      NA       NA
trials1:sids5        -1.000e-01         NA      NA       NA
trials2:sids5         5.000e-01         NA      NA       NA
trials3:sids5         3.000e-01         NA      NA       NA
trials1:sids6        -1.000e-01         NA      NA       NA
trials2:sids6         5.000e-01         NA      NA       NA
trials3:sids6        -2.000e-01         NA      NA       NA
trials1:sids7         4.000e-01         NA      NA       NA
trials2:sids7         5.000e-01         NA      NA       NA
trials3:sids7        -2.000e-01         NA      NA       NA
trials1:sids8        -5.000e-02         NA      NA       NA
trials2:sids8         2.500e-01         NA      NA       NA
trials3:sids8         6.500e-01         NA      NA       NA
trials1:sids9                NA         NA      NA       NA
trials2:sids9                NA         NA      NA       NA
trials3:sids9                NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:    NaN 
F-statistic:   NaN on 39 and 0 DF,  p-value: NA

任何想法我做错了什么?我怀疑“lm”和ANOVA存在一些问题,但我不知道是什么,我不知道如何进行趋势分析。

######更多详细信息以响应ssdecontrol的响应

嗯,“试验”是一个因素,因为它代码被操纵的四个级别的经验。同样,“sid”是“主题识别号”,它绝对是“名义上的”而非“序数”或“间隔”。受试者几乎总是被视为ANOVAS中的因素。

然而,我确实尝试了这两种变化,但它极大地扭曲了ANOVA(自己尝试并比较)。同样,它似乎没有帮助。在我尝试创建并应用我的对比时,我更加直接相关,我被告知无法完成,因为我的数字必须是因素:

contrasts(tab20.09$trials) <- cbind(c(-3, -1, 1, 3), c(1, -1, -1, 1), c(-1, 3, -3, 1))    
Error in `contrasts<-`(`*tmp*`, value = c(-3, -1, 1, 3, 1, -1, -1, 1, :    
contrasts apply only to factors    

开始了 我似乎使用contr.poly在

中取得了更多进展
contrasts(tab20.09$trials) <- contr.poly(levels(tab20.09$trials))

ANOVA根本没有变化。所以这很好,当我这样做时:

lm.model <- lm(responses ~ trials, data = tab20.09)    
summary.lm(lm.model)    

我和Keppel的模式基本相同。

但是,由于我对相互作用的线性趋势感兴趣(治疗x试验),而不仅仅是试验,我试过这个:

lm3 <- lm(responses ~  treatments*trials, data = tab20.09)
summary.lm(lm3)

和“试验”的ME消失了。 。 。

在Keppel的治疗中,他计算了每个对比度(即线性,二次和立方)的单独误差项,并将其用于“试验”的主要效果以及“治疗x试验”相互作用。

我当然可以再次计算所有这些事情。也许我甚至可以为一般情况编写R函数;然而,似乎很难相信实验心理学的这种基本核心对比尚未找到R实现!! ??

非常感谢任何帮助或建议。谢谢。 w ^

1 个答案:

答案 0 :(得分:0)

看起来trialssids是因素,但您打算将它们设为数字/整数。运行sapply(tab20.09, class)以查看是否属于这种情况。这就是输出意味着什么;它不是适合连续/计数交互,而是为每个变量的每个级别拟合一个虚拟变量,并计算它们之间的所有相互作用。

要解决此问题,只需在列表语法中重新分配tab20.09$trials <- as.numeric(tab20.09$trials)tab20.09$sids <- as.numeric(tab20.09$sids),或者您可以使用tab20.09[, c("trials", "sids")] <- apply(tab20.09[, c("trials", "sids")], 2, as.numeric)之类的矩阵语法。在这种情况下,第一个更容易,但你也应该知道第二个。