我想对具有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 ^
答案 0 :(得分: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)
之类的矩阵语法。在这种情况下,第一个更容易,但你也应该知道第二个。