2014-01-21 97 views
1

我有一個lm對象,想要得到用係數提取的公式。我知道如何在沒有係數的情況下提取公式,以及如何在沒有公式的情況下獲得係數,但不知道如何獲得係數。 Y〜10 + 1.25B,而不是Y〜B或什麼攔截的表,B等等於從係數(l)中提取lm公式

這是我與當前正在使用的代碼:

a = c(1, 2, 5) 
b = c(12, 15, 20) 

model = lm(a~b) 
summary(model) 
formula = formula(model) 
formula 
coefficients(model) 

我想什麼從上面得到的是Y〜-5.326 + .51b

感謝

編輯:在我實際的代碼,我有超過63預測和18款不同的工作,所以我喜歡的東西,可以擴展沒有太多的工作。

+0

如果添加第二個預測器,代碼將自動將其添加到公式中。試試看。 – lukeA

+0

哦,我以爲我第一次看到它時就試過了,但我忘了編輯實際的模型。乾杯:-) – user3051065

回答

7
as.formula(
    paste0("y ~ ", round(coefficients(model)[1],2), " + ", 
    paste(sprintf("%.2f * %s", 
        coefficients(model)[-1], 
        names(coefficients(model)[-1])), 
      collapse=" + ") 
) 
) 
# y ~ -5.33 + 0.51 * b 
+3

嗨,這適用於我提供的代碼,所以謝謝。我想知道是否有一種方法可以更容易擴展?就像我添加第二個預測變量c一樣,我假設我需要增加另外一兩行來告訴它抓取相關位,這對於大多數模型來說可能會有30個預測變量,我不完全確定我在哪裏放置它,對r仍然是新的,所以這段代碼對我來說有點不透明)。 – user3051065

+0

@ user3051065我對您的可伸縮性問題做了一個新的回答。見下文。 –

4

我可能會提出修改建議,以lukeA的出色答卷:

as.formula(
    paste0("y ~ ", round(coefficients(model)[1],2), "", 
    paste(sprintf(" %+.2f*%s ", 
        coefficients(model)[-1], 
        names(coefficients(model)[-1])), 
      collapse="") 
) 
) 

這將確保負係數正確打印

假設你登陸了對於b係數爲負,則輸出將是

# y ~ -5.33 + -0.51 * b 

而不是

# y ~ -5.33 - 0.51 * b 
1

我想出了一種通用的方法來創建使用替換系數的模型公式。它比手動構建字符串paste0更靈活多變。

例如

我已經有優化的係數的模型:

> model 
Nonlinear regression model 
    model: players ~ pop * (decay^days_from_start) + ycept 
    data: data 
     pop  decay  ycept 
6.896e+06 2.633e-01 4.300e+05 
residual sum-of-squares: 1.64e+08 

Number of iterations to convergence: 12 
Achieved convergence tolerance: 1.49e-08 

這些是係數:

> coef(model) 
     pop  decay  ycept 
6.896421e+06 2.632545e-01 4.300453e+05 

全部放在一起:

> newFormula = as.formula(substituteDirect(formula(model), as.list(coef(model)))) 
> newFormula 
players ~ 6896421.4399627 * (0.263254460933212^days_from_start) + 430045.26142703