R 方差分析:自由度几乎都等于1
我有一个这样开始的数据集:R 方差分析:自由度几乎都等于1,r,anova,R,Anova,我有一个这样开始的数据集: > d.weight R N P C D.weight 1 1 0 0 GO 45.3 2 2 0 0 GO 34.0 3 3 0 0 GO 19.1 4 4 0 0 GO 26.6 5 5 0 0 GO 23.5 6 1 45 0 GO 22.1 7 2 45 0 GO 15.5 8 3 45 0
> d.weight
R N P C D.weight
1 1 0 0 GO 45.3
2 2 0 0 GO 34.0
3 3 0 0 GO 19.1
4 4 0 0 GO 26.6
5 5 0 0 GO 23.5
6 1 45 0 GO 22.1
7 2 45 0 GO 15.5
8 3 45 0 GO 23.4
9 4 45 0 GO 15.8
10 5 45 0 GO 42.9
...
等等
是复制的,其中有5个(1-5个)R
是氮水平,也有5个(0,45,90,180,360)N
是磷水平,也有5个(0,35,70,140,280)P
是植物组合,有4种(GO、GB、LO、LB)C
是干重,单位为克D.重量
> example.aov=aov(D.weight ~ R+N+P+C, data=d.weight)
> summary(example.aov)
Df Sum Sq Mean Sq F value Pr(>F)
R 1 1158 1158 9.484 0.00226 **
N 1 202 202 1.657 0.19900
P 1 11040 11040 90.408 < 2e-16 ***
C 3 41032 13677 112.010 < 2e-16 ***
Residuals 313 38220 122
我用C
因子试了试,只是想看看它是否弄糟了什么:
> example.aov3=aov(D.weight ~ C, data=d.weight)
> summary(example.aov3)
Df Sum Sq Mean Sq F value Pr(>F)
C 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
>
> example.aov4=aov(D.weight ~ interaction(C), data=d.weight)
> summary(example.aov4)
Df Sum Sq Mean Sq F value Pr(>F)
interaction(C) 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
>example.aov3=aov(D.weight~C,data=D.weight)
>摘要(示例.aov3)
Df和Sq平均Sq F值Pr(>F)
C 3 41032 13677 85.38
>示例.aov4=aov(D.weight~interaction(C),data=D.weight)
>摘要(示例.aov4)
Df和Sq平均Sq F值Pr(>F)
交互作用(C)3 41032 13677 85.38R通过检查变量是否为数值变量或因子变量,确定是否应将变量视为分类变量(方差分析类型分析)或连续变量(回归类型分析)。最简单的是,您可以通过以下方式将预测(独立)变量转换为因子:
facs <- c("R","N","P")
d.weight[facs] <- lapply(d.weight[facs],factor)
facs将数值变量转换为因子。。。e、 g.facs哇。我疯狂了一个小时试图自己解决这个问题,而你在不到一分钟内就解决了。谢谢。好的,这已经解决了一个问题,但现在它导致了另一个问题。当我试着在x轴上画一个N或P的直线图时,因为N和P不再是连续变量,我得到的是一个条形图。。。毫不奇怪。我确实需要程序在某些情况下把N和P看作是连续的,所以。。。我该怎么办?这要看情况而定;您可以将原始数据保留为数字,并在统计模型语句中使用显式的factor()
语句(例如D.weight~ factor(R)+factor(N)+factor(P)
),或者将新的因子变量作为辅助变量(例如fR
,fN
,fP
)而不是覆盖旧的变量。。。如果你给出一个完全可复制的例子,说明你的目标是什么样的,你可能会得到更明确的帮助。@CarlWitthoft:我是一名农业专业的学生,只学过一个学期的统计数据。我的导师70岁,几乎失明,所以。。。我能说什么,我做我能做的。后续问题:你写“d_-weight[facs]”时是想创建一个新变量,还是想写“d.weight[facs]”?
facs <- c("R","N","P")
d.weight[facs] <- lapply(d.weight[facs],factor)
for (varname in facs) {
d.weight[[paste0("f",varname)]] <- factor(d.weight[[varname]])
}