2011-10-12 58 views
1

我正在運行多次x變量的小改動的相同迴歸。我的目標是確定每個變量對於這個線性迴歸模型的適合度和重要性,以查看所有的主要地塊。不需要逐個創建每個繪圖,我想要一個函數來循環我的變量(x1 ... xn)從下面的列表中。創建函數以自動創建從概要圖(fit < - lm(y〜x1 + x2 + ... xn))

適合< -lm(Y〜X1 + X2 + ... XN))

的情節我想創建一個對於所有的x是 1) 'X與Y' 在上面的功能,所有的x 2)'x與預測y相關3)x對殘差 4)x與時間的關係,其中時間不是迴歸中使用的變量,而是數據來自數據幀。

我知道如何從fit中訪問係數,但是我無法使用匯總中的係數名稱,並在創建圖的函數中重複使用它們,因爲名稱是字符。

我希望我的問題已經清楚地描述過,並且沒有被問到。

謝謝!

回答

1

創建一些模擬數據

dat <- data.frame(x1=rnorm(100), x2=rnorm(100,4,5), x3=rnorm(100,8,27), 
    x4=rnorm(100,-6,0.1), t=(1:100)+runif(100,-2,2)) 
dat <- transform(dat, y=x1+4*x2+3.6*x3+4.7*x4+rnorm(100,3,50)) 

請配合

fit <- lm(y~x1+x2+x3+x4, data=dat) 

計算的預測值

dat$yhat <- predict(fit) 

計算殘差

dat$resid <- residuals(fit) 

獲取的曲線可以,如果你用它來構建公式的字符串版本,並把所使用的名稱的漢字進行變量名

vars <- names(coef(fit))[-1] 

的載體。這四個地塊在下面,並且在所有的變量中包裹着一個循環。此外,通過將ask設置爲TRUE,以便您有機會看到每個圖。或者,您可以在屏幕上安排多個圖塊,或將它們全部寫入文件以供稍後查看。

opar <- par(ask=TRUE) 
for (v in vars) { 
    plot(as.formula(paste("y~",v)), data=dat) 
    plot(as.formula(paste("yhat~",v)), data=dat) 
    plot(as.formula(paste("resid~",v)), data=dat) 
    plot(as.formula(paste("t~",v)), data=dat) 
} 
par(opar) 
+0

謝謝Brian。我不知道如何解決這個問題,是通過'as.formula(paste(「y〜」,v)),data = dat)'來解決的。我基本上試圖直接從變量變量中繪製字符,並且不傳遞變量後面的數據。謝謝你的幫助。 –

1

係數被存儲在合適的對象,你說,但你可以通過參考它們這樣一般訪問它們的功能:

x <- 1:10 
y <- x*3 + rnorm(1) 
plot(x,y) 

fit <- lm(y~x) 
fit$coefficient[1] # intercept 
fit$coefficient[2] # slope 
str(fit) # a lot of info, but you can see how the fit is stored 

我的猜測是,當你說你知道如何訪問您從摘要(適合)獲得的係數比直接從適合中獲取要困難得多。通過使用fit $ coeff [1]等,您不必在函數中使用變量的名稱。

+0

謝謝布賴恩的回答。 Brian Diggs的代碼解決了如何將變量傳遞給圖的問題。感謝您指出str(適合)。我不得不首先嘔吐,但我也會開始考慮。 (as.formula(paste(「y〜」,v)),data = dat)' –

1

三個選項直接回答我的想法是這樣的問題:

x <- 1:10 
y <- x*3 + rnorm(1) 
fit <- lm(y~x) 
# 1 
fit$coefficient["x"] 
# 2 
coefname <- "x" 
fit$coefficient[coefname] 
#3 
coef(fit)[coefname] 

如果問題是如何繪製的各種功能,那麼你應該提供一個足夠複雜的結構:如何使用字符的參數來訪問係數(在R中)允許演示具有明確指定的對象的方法。