使用方差分析比较样本大小不相等的两个线性模型:错误

时间:2018-12-14 17:36:30

标签: r regression anova

以下是我要执行的操作示例,其中设置了一个随机生成的数字:

a <- runif(100, min =0.5, max=1);
b <- runif(100, min = 0, max =1);
c <- factor(rep(c("High", "Low", "High", "High"), times = 25));

df<-data.frame(a,b,c);

head(df)

 a          b           c    
1 0.9506028 0.84686708 High    
2 0.7296878 0.24566532  Low    
3 0.6208635 0.90166263 High    
4 0.9009880 0.98464187 High    
5 0.6032242 0.23613096 High    
6 0.5409369 0.06325577  Low

所以我在这里要做的是创建两个单独的线性模型,一个用于子集数据(c ==“ High”,n = 75),另一个用于子集数据(c ==“ Low”,n = 25)........

...然后我要运行方差分析以比较线性模型:

mod1<-lm(b~a, data=df, subset = c=="High")

mod2<-lm(b~a, data=df, subset = c=="Low")

到目前为止,一切正常,但是下一个命令:

anova(mod1,mod2)

产生错误:

  

anova.lmlist(object,...)中的错误:         模型并非都适合于相同大小的数据集

尽管我还没有遇到一个示例,该示例显示了如何在lm调用行中更新子集函数,但是可以使用update函数来解决此问题。

谢谢:)

1 个答案:

答案 0 :(得分:0)

通过以下方式:

mod1<-lm(b~a, data=df, subset = c=="High")
mod2<-lm(b~a, data=df, subset = c=="Low")

您适合两个模型: $$ Y = \ alpha_0 + \ alpha_1 X + \ epsilon $$ $$ Y = \ beta_0 + \ beta_1 X + \ epsilon $$

这两个模型可以组合为一个模型: $$ Y = \ alpha_0 + \ alpha_1 X + Z(\ beta_0 + \ beta_1 X)+ \ epsilon $$ 其中 $ Z = 1 $ 表示c =“低”,= 0表示c =“高”。

然后您可以检验原假设 $ \ beta_0 = 0 $ (两行截距相同)或 $ \ beta_1 = 0 $ (两条直线具有相同的斜率)或 $ \ beta_0 = 0,\ beta_1 = 0 $ (两条直线完全相同)。

我尝试了以下操作,并且有效。

  cmod<-lm(b~a*factor(c), data=df)