2016-12-20 68 views
1

我有一個數據庫,我想要做幾個多重回歸。它們看起來都是這樣的:R中的多重'多重線性迴歸'

fit <- lm(Variable1 ~ Age + Speed + Gender + Mass, data=Data) 

唯一變量變化是變量1。現在我想循環或使用apply系列中的某些東西來在變量1的地方循環幾個變量。這些變量是我的數據文件中的列。有人可以幫我解決這個問題嗎?非常感謝!

我試過到目前爲止:

當我提取物)的名字列名的一個(功能我得到的列的名稱:

varname = as.name(names(Data[14])) 

但是,當我填寫此(我用的attach()功能):

fit <- lm(Varname ~ Age + Speed + Gender + Mass, data=Data) 

我得到以下錯誤:

Error in model.frame.default(formula = Varname ~ Age + Speed + Gender + : object is not a matrix

我想lm()函數不會將Varname識別爲Variable1。

+0

也許[此帖](http://stackoverflow.com/questions/41230953/how-do-you-dynamically-build-a-liner-model-based-on-column-names/41231035# 41231035),它的鏈接將有助於創建公式。 – lmo

回答

3

您可以使用lapply來遍歷變量。

fit <- lapply(Data[,c(...)], function(x) lm(x ~ Age + Speed + Gender + Mass, data = Data))

這給你的結果列表。

c(...)應該包含變量名作爲字符串。或者,您可以根據Data中的位置來選擇變量,如Data[,1:5]

1

你的情況的問題是lm函數中的公式嘗試讀取data中列的字面名稱或將整個向量饋入迴歸。因此,要使用列名稱,您需要通過公式來解釋變量varnames的值並將其與其他變量合併。

# generate some data 
set.seed(123) 
Data <- data.frame(x = rnorm(30), y = rnorm(30), 
    Age = sample(0:90, 30), Speed = rnorm(30, 60, 10), 
    Gender = sample(c("W", "M"), 30, rep=T), Mass = rnorm(30)) 
varnames <- names(Data)[1:2] 

# fit regressions for multiple dependent variables 
fit <- lapply(varnames, 
    FUN=function(x) lm(formula(paste(x, "~Age+Speed+Gender+Mass")), data=Data)) 
names(fit) <- varnames 

fit 
$x 

Call: 
lm(formula = formula(paste(x, "~Age+Speed+Gender+Mass")), data = Data) 

Coefficients: 
(Intercept)   Age  Speed  GenderW   Mass 
    0.135423  0.010013 -0.010413  0.023480  0.006939 


$y 

Call: 
lm(formula = formula(paste(x, "~Age+Speed+Gender+Mass")), data = Data) 

Coefficients: 
(Intercept)   Age  Speed  GenderW   Mass 
    2.232269 -0.008035 -0.027147 -0.044456 -0.023895