R lm 使用我的数据框的子集和 c(index)

R lm using subset of my data frame with c(index)

我有一个大数据框。前 n 列代表我的因变量,其余 m=(N-n) 列代表我的解释变量。

我需要进行变量选择,即,我想运行一个线性模型,其中一个因变量与一组解释变量相对应。

我使用了下面的代码,但它不起作用。

structure(list(y1 = c(-0.159526983540257, 2.16892194367082, 0.695539528415267, 
-0.841375527728487, 0.146186718603554), y2 = c(0.843930369507526, 
1.15189158283099, -0.162651238219114, 0.384543148695671, -0.768095169822086
), y3 = c(0.676606087565373, -1.54403120779262, 0.309217049561983, 
-1.35994467980478, 0.025666048887934), x1 = c(-0.462318888988991, 
0.637219370641707, 0.169306615605319, 0.773825637643689, -1.80512938432685
), x2 = c(0.420644990269304, 0.168496378157891, -0.288787457624397, 
-1.8207116669123, -1.04563859296061), x3 = c(0.529585006756937, 
-0.69696010268217, 0.72760512189806, 1.27475852051601, 0.0547933726620265
), x4 = c(0.995548762574541, -1.42396489630791, 1.34343306027338, 
1.14879495559021, 1.11600859581743), x5 = c(-0.989878720668274, 
-0.823824983427361, -1.58910626627862, -0.987929834373281, -1.75551410908407
), x6 = c(-0.206995723222616, -0.712762437418153, -0.516370544799284, 
0.124635650806358, 1.08149368199072), x7 = c(-0.409575294823497, 
1.5077513417679, -1.17700768734441, -0.159607245758965, 1.11768048557717
)), class = "data.frame", row.names = c(NA, -5L))   

    index=c(5,8,9)

    model = lm(df[,1] ~ df[,c(index)])

是否可以用类似的方式对数据框进行子集化?我真的想避免列名,因为我可能 运行 几个不同的模型。

编辑:c(index) 的长度每次都可能不同。

这个有效:

# Generating data.
n = 1000 # Use n for denoting number of observations, for consistency reasons!
k = 20 # k is used for independent/explanatory variables (also p often)!

set.seed(1986)

X = matrix(rnorm(n * k), ncol = k)
y = runif(n)

df = data.frame(y, X)
head(df)

# Fitting model on a subset of explanatory variables.
index = 4:10
model = lm(y ~ ., data = df[, index])
summary(model)

首先,让我向您提供有关符号的建议:n通常用于表示观察次数,即行数(而不是列数),而kp用于解释变量。此外,解释变量和自变量是同一件事 - 所以也许你的意思是你 想要 运行 一个线性模型,其中一个 dependent 变量针对解释变量的选择.

回到你的问题,我建议依靠 lm() 函数中的可选参数 data 来仅传递你实际想要使用的数据。这样,您可以使用公式 y ~ .,它读作 对您在 data 中找到的所有其他变量进行回归 y 我传入 .

作为最后的警告,我设置了 index = 4:10。请注意,我没有使用从第四到第十的explanatory/independent变量,而是从第三到第九,因为data的第一列是y,即因变量(您必须始终将其包含在 data).

编辑

我看到您提供了一些数据以供使用。这里如何修改代码:

# Fitting model on a subset of explanatory variables.
index=c(5,8,9)
model = lm(y1 ~ ., data = df[, c(1, index)]) # HERE I AM ADDING THE FIRST COLUMN!
summary(model)

基本上,您的 index 包括带有因变量的列(在我的例子中是 y1),或者您将它添加到可选参数 data 中(就像我在示例)。

您可以重新制定公式:

with index_y 您感兴趣的 y 变量在数据框中的索引 df

model=lm(reformulate(colnames(df)[index],response=colnames(df)[index_y]),df)