以下是我要执行的操作示例,其中设置了一个随机生成的数字:
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函数来解决此问题。
谢谢:)
答案 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)