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
通常用于表示观察次数,即行数(而不是列数),而k
或p
用于解释变量。此外,解释变量和自变量是同一件事 - 所以也许你的意思是你 想要 运行 一个线性模型,其中一个 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)
我有一个大数据框。前 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
通常用于表示观察次数,即行数(而不是列数),而k
或p
用于解释变量。此外,解释变量和自变量是同一件事 - 所以也许你的意思是你 想要 运行 一个线性模型,其中一个 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)