0

我想对同时具有 btw-Ss 和 inside-Ss 因素的 ANOVA 进行趋势分析。

顺便说一句,因素是“治疗”,内部因素是“试验”。

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”和方差分析存在一些问题,但我不知道是什么,也不知道如何进行趋势分析。

###### MORE DETAILS 响应 ssdecontrol 的响应

好吧,“试验”是一个因素,因为它编码了被操纵的四个层次的经验。同样,“sid”是“主题标识号”,绝对是“名义”而不是“序数”或“间隔”。在 ANOVAS 中,主题几乎总是被视为因素。

但是,我确实尝试了这两种更改,但它极大地扭曲了方差分析(自己尝试并比较)。同样,它似乎没有帮助。也许更直接相关,当我尝试创建和应用我的对比时,我被告知无法完成,因为我的数字需要成为因素:

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

方差分析根本没有改变。所以这很好,当我这样做时:

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

我得到与吉宝基本相同的模式。

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

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

“试炼”的ME消失了。. .

在 Keppel 的治疗中,他为每种对比(即线性、二次和三次)计算了单独的误差项,并将其用于“试验”的主效应以及“治疗 x 试验”的交互作用。

我当然可以再次手动计算所有这些东西。也许我什至可以为一般情况编写 R 函数;但是,似乎很难相信实验心理学的这种基本核心对比还没有找到 R 实现!??

任何帮助或建议将不胜感激。谢谢。W

4

1 回答 1

0

它看起来像trials并且sids是因子,但您打算让它们成为数字/整数。跑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). 在这种情况下,第一个更容易,但您也应该注意第二个。

于 2014-08-25T03:40:40.233 回答