2013-03-06 48 views
-1

我有一個數據集,我將使用預測變量(例如Price)將其稱爲dataset1。我希望根據數據集中存在的其他預測變量來獲得價格的單個預測因子。但是,如果ñ大,我不能手動進行,並檢查所有這些模型,所以我希望用這樣的:使用R編程在for循環中創建線性模型

for (i in names(dataset1)) { 
    model = lm(Price~i, dataset1) 
    # Do stuff here with model, such as analyze R^2 values. 
} 

(我想既然更換的內部進行這樣的工作。循環用正確的名稱打印(i)中)的錯誤如下:

Error in model.frame.default(formula = Price ~ i, data = dataset1, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'i') 

沒有人有處理關於中的R 變量如何讀取問題的建議嗎?我知道如何使用其他軟件來解決這個問題,但我想了解R的工作原理。

+2

好奇你爲什麼不嘗試添加劑模型中的所有變量並修剪模型從那裏使用stepAIC或類似的東西? – tcash21 2013-03-06 21:25:32

+0

這只是我的一個想法。我當然可以嘗試其他方法;我只是想了解這種R循環。 – TakeS 2013-03-06 21:34:08

+0

當我做這樣的事情時,我一起粘貼公式,然後使用'do.call',如下所示:http://stackoverflow.com/a/7668846/210673 – Aaron 2013-03-06 21:35:57

回答

0

目前你沒有騎自行車穿過名字。嘗試

for(i in 2:ncol(dataset1)) #assuming Price is column 1 

然後參考

Price ~ dataset1[, i] 

在循環。

但我不確定你從統計角度看待你的方法。

2

我會親自去爲某種*apply這裏:

dat <- data.frame(price=1:10,y=10:1,z=1:10) 
sapply(dat[2:3], function(q) coef(summary(lm(dat$price ~ q)))[2]) 

y z 
-1 1 

或獲得全模型結果的列表:

lapply(dat[2:3], function(q) coef(summary(lm(dat$price ~ q)))) 

$y 
      Estimate Std. Error  t value  Pr(>|t|) 
(Intercept)  11 1.137008e-15 9.674515e+15 1.459433e-125 
q     -1 1.832454e-16 -5.457163e+15 1.423911e-123 

$z 
       Estimate Std. Error  t value  Pr(>|t|) 
(Intercept) 1.123467e-15 2.457583e-16 4.571429e+00 1.822371e-03 
q   1.000000e+00 3.960754e-17 2.524772e+16 6.783304e-129 

正如你所說,以獲得R平方值:

sapply(dat[2:3], function(q) summary(lm(dat$price ~ q))$r.squared)