Умножение результатов на регрессию R - PullRequest
0 голосов
/ 10 июля 2020

Я только что сделал регрессию в R. Я хотел бы умножить результаты каждого коэффициента на некоторые переменные. Как мне это сделать?

Coefficients:
                                Estimate Std. Error t value Pr(>|t|)   
(Intercept)                    1.210e+00  7.715e-01   1.568  0.13108   
SDCHRO_I                      -1.846e-01  2.112e-01  -0.874  0.39157   
functional_cognitive_level3    4.941e-02  7.599e-02   0.650  0.52224     
rev_per_members               -4.955e-06  5.827e-06  -0.850  0.40432   

А я хочу что-то вроде этого:

1.210e+00 + -1.846e-01 * var1 + 4.941e-02 * var2 +   4.941e-02 * var3 

Есть способ сделать это?

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Вы можете использовать model.matrix.

data(mtcars)

lm1 <- lm(mpg~cyl+disp+hp, data=mtcars)

res <- coef(lm1) %*% t(model.matrix(lm1))
all(res==predict(lm1))
#[1] TRUE
2 голосов
/ 10 июля 2020

Вы можете получить доступ к коэффициентам с помощью model$coefficients. Например, если вы хотите умножить все коэффициенты на 10, вы можете сделать

df = data.frame(x = runif(100), y = runif(100), z = runif(100))
mod = lm(formula = y ~ x*z, data = df)
mod$coefficients
#> (Intercept)           x           z         x:z 
#>   0.6449097  -0.1989884  -0.3962655   0.4621273
mod$coefficients*10
#> (Intercept)           x           z         x:z 
#>    6.449097   -1.989884   -3.962655    4.621273

Создано 10.07.2020 с помощью пакета (v0.3.0)

Однако, если вы хотите сделать то же, что и в вашем примере, вам нужно получить доступ к неопределяемым коэффициентам с помощью model$coefficients[i], например,

df = data.frame(x = runif(100), y = runif(100), z = runif(100))
mod = lm(formula = y ~ x*z, data = df)

mod$coefficients[1]*10
#> (Intercept) 
#>    5.994662
mod$coefficients[2]*10
#>         x 
#> -1.687928

Создано 2020- 07-10 с помощью пакета correx (v0.3.0)

Вы можете даже сделать это динамически, перебирая длину объекта coefficients.

...