использование anova для сравнения двух линейных моделей с неравным размером выборки: ошибка - PullRequest
0 голосов
/ 14 декабря 2018

Вот пример того, что я хочу сделать, с набором случайно сгенерированных чисел:

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 == "Высокий", n = 75), а другой для поднабора данных (c == "Низкий", n = 25) ........

... Тогда я хочузапустить anova для сравнения линейных моделей:

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

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

До этого момента все работало отлично, но следующая команда:

anova(mod1,mod2)

выдает ошибку:

Ошибка в anova.lmlist (объект, ...): не все модели были приспособлены к одному и тому же размеру набора данных

Эту проблему можно решить с помощью функции обновления, хотя я поканаткнуться на пример, показывающий, как обновить функцию подмножества в строке вызова lm.

Спасибо :))

1 Ответ

0 голосов
/ 14 декабря 2018

Следуя:

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 = "Low" и = 0 для c = "High".

Тогда вы можете проверить нулевую гипотезу $ \ beta_0 = 0 $ (две строкиимеют одинаковые перехваты) или $ \ beta_1 = 0 $ (две линии имеют одинаковый наклон) или $ \ beta_0 = 0, \ beta_1 = 0 $ (две линии абсолютно одинаковы).

Я попробовал следующее, и это работает.

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