对 R 中的方差分析感到困惑
Confused about ANOVA in R
我是 R 和统计的新手,我正在尝试对 csv 文件中的数据集执行双因素方差分析,其中每个因素的值都在其自己的列中。我正在使用
> mydata <- read.csv("myfile.csv")
> model = lm(result ~ factor1 * factor2, data=mydata)
作为检查,我尝试了 R 示例数据集中的 ChickWeight 数据。
> anova(with(ChickWeight, lm(weight ~ Time + Diet)))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1576.460 < 2.2e-16 ***
Diet 3 129876 43292 > 33.417 < 2.2e-16 ***
Residuals 573 742336 1296
> write.csv(file="ChickWeight.csv", x=ChickWeight, row.names=F)
> data = read.csv("ChickWeight.csv", header=T)
> anova(lm(weight ~ Time + Diet, data=data))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1537.033 < 2.2e-16 ***
Diet 1 108177 108177 81.412 < 2.2e-16 ***
Residuals 575 764036 1329
值得注意的是,Diet 列的自由度丢失,数据从 csv 读取到数据框中。我在这里错过了什么?
从这个 post 得到线索:
当从CSV文件中读取数据时,Diet列变成了一个普通的数字列,但是对于ANOVA它必须是一个因子变量(我仍然不清楚为什么它是一个单独的class/kind 在 R 中以及为什么它不能自动处理它:浮点数的不精确二进制表示?)。
所以解决方案是:
> data$Diet = factor(data$Diet)
> anova(lm("weight ~ Time + Diet", data=data))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1576.460 < 2.2e-16 ***
Diet 3 129876 43292 33.417 < 2.2e-16 ***
Residuals 573 742336 1296
我是 R 和统计的新手,我正在尝试对 csv 文件中的数据集执行双因素方差分析,其中每个因素的值都在其自己的列中。我正在使用
> mydata <- read.csv("myfile.csv")
> model = lm(result ~ factor1 * factor2, data=mydata)
作为检查,我尝试了 R 示例数据集中的 ChickWeight 数据。
> anova(with(ChickWeight, lm(weight ~ Time + Diet)))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1576.460 < 2.2e-16 ***
Diet 3 129876 43292 > 33.417 < 2.2e-16 ***
Residuals 573 742336 1296
> write.csv(file="ChickWeight.csv", x=ChickWeight, row.names=F)
> data = read.csv("ChickWeight.csv", header=T)
> anova(lm(weight ~ Time + Diet, data=data))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1537.033 < 2.2e-16 ***
Diet 1 108177 108177 81.412 < 2.2e-16 ***
Residuals 575 764036 1329
值得注意的是,Diet 列的自由度丢失,数据从 csv 读取到数据框中。我在这里错过了什么?
从这个 post 得到线索:
当从CSV文件中读取数据时,Diet列变成了一个普通的数字列,但是对于ANOVA它必须是一个因子变量(我仍然不清楚为什么它是一个单独的class/kind 在 R 中以及为什么它不能自动处理它:浮点数的不精确二进制表示?)。 所以解决方案是:
> data$Diet = factor(data$Diet)
> anova(lm("weight ~ Time + Diet", data=data))
Analysis of Variance Table
Response: weight
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 2042344 2042344 1576.460 < 2.2e-16 ***
Diet 3 129876 43292 33.417 < 2.2e-16 ***
Residuals 573 742336 1296