R регрессия с фактором: получить коэффициент для уровней, а не как отличие от Intercept? - PullRequest
0 голосов
/ 01 мая 2019

Скажем, я хочу оценить с lm() средние значения y по k группам, где группы определяются фактором.

Если я просто наберу lm(y ~ factor), это даст мне перехват и коэффициент для коэффициентов k-1, но выраженный как отличие от перехвата. Вместо этого я хочу иметь прямые значения средств.

Есть ли способ сделать это чисто с contrast в lm()? Я не уверен, как этот контраст будет называться ... ортогональным? Я могу, очевидно, удалить перехват: lm(y ~ -1+ factor), но это даст мне неверные значения R2

reg1 <- lm(Sepal.Length~ Species, data=  iris)
reg2 <- lm(Sepal.Length~ -1 + Species, data=  iris)

## get coefs
coef(reg1) # not what I want
#>       (Intercept) Speciesversicolor  Speciesvirginica 
#>             5.006             0.930             1.582
coef(reg2) # whay I want
#>     Speciessetosa Speciesversicolor  Speciesvirginica 
#>             5.006             5.936             6.588

## THe models are equivalent:
all.equal(fitted(reg1), fitted(reg2))
#> [1] TRUE


# but the -1 trick will create problems for some stats, such as R2
summary(reg1)$r.squared
#> [1] 0.6187057
summary(reg2)$r.squared
#> [1] 0.9925426

Создано в 2019-05-01 пакетом представ. (v0.2.1)

1 Ответ

3 голосов
/ 01 мая 2019

Это не «ортогональный контраст», но «вообще никакого контраста».

Относительно неправильного квадрата R: summary.lm вычисляет эту величину другим способом, независимо от того, имеется ли явное пересечение в модели илине.Вы можете вручную вычислить R в квадрате в этом случае: cor(Sepal.Length, fitted(reg2))^2.См этот комментарий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...