运行 对数据框的某些部分进行回归并提取估计值 + 误差
Run a regression on certain parts of a data frame and extract estimates + errors
我尝试 运行 对数据框的选定部分进行多次回归。
有 22 列。一个是 "DATE",一个是 "INDEX" 和 S1, S2, S3 ... S20.
我运行这样回归:
Regression <- lm(as.matrix(df[c('S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20')]) ~ df$INDEX)
Regression$coefficients
1) 如何让代码更短?就像用区间告诉R一样:将S1到S20列作为解释变量,运行用因变量INDEX对它们进行回归。
2) 回归公式为:a + b*INDEX + error
然后从回归中提取所有 "b" 估计值。假设列有 10 行,因此必须有 10 个估计值。
同样提取所有的错误:那一定是每列有10个错误,总共有10*20=200个错误。
由于我没有使用R的经验,欢迎各种帮助!谢谢!
您可以使用 paste()
而不是手动写出所有列名来大幅缩短代码:
Regression <- lm(as.matrix(df[paste0("S", 1:20)]) ~ df$INDEX)
要访问回归估计,请使用 Regression$fitted.values
。对于错误,使用 Regression$residuals
.
使用 iris
数据的示例:
data(iris)
Regression <- lm(Sepal.Length + Sepal.Width ~ Petal.Length, data = iris)
head(Regression$fitted.values)
Sepal.Length Sepal.Width
1 4.879095 3.306775
2 4.879095 3.306775
3 4.838202 3.317354
4 4.919987 3.296197
5 4.879095 3.306775
6 5.001771 3.275039
head(Regression$residuals)
Sepal.Length Sepal.Width
1 0.2209054 0.1932249
2 0.0209054 -0.3067751
3 -0.1382024 -0.1173536
4 -0.3199868 -0.1961965
5 0.1209054 0.2932249
6 0.3982287 0.6249605
如果您有 22 列,只需使用列在数据框中的位置。在他的回答中使用与 LAP 相同的数据集:
# load iris dataset
date(iris)
# run regression
Regression <- lm(as.matrix(iris[1:3]) ~ Petal.Width, data = iris)
在您的情况下,这将转化为类似以下内容:
# run the regression
Regression <- lm(as.matrix(df[3:22]) ~ INDEX, data = df)
假设您的因变量在第 3 列到第 22 列(第一列是日期,第二列是索引,或类似的东西)
我尝试 运行 对数据框的选定部分进行多次回归。 有 22 列。一个是 "DATE",一个是 "INDEX" 和 S1, S2, S3 ... S20.
我运行这样回归:
Regression <- lm(as.matrix(df[c('S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20')]) ~ df$INDEX)
Regression$coefficients
1) 如何让代码更短?就像用区间告诉R一样:将S1到S20列作为解释变量,运行用因变量INDEX对它们进行回归。
2) 回归公式为:a + b*INDEX + error 然后从回归中提取所有 "b" 估计值。假设列有 10 行,因此必须有 10 个估计值。 同样提取所有的错误:那一定是每列有10个错误,总共有10*20=200个错误。
由于我没有使用R的经验,欢迎各种帮助!谢谢!
您可以使用 paste()
而不是手动写出所有列名来大幅缩短代码:
Regression <- lm(as.matrix(df[paste0("S", 1:20)]) ~ df$INDEX)
要访问回归估计,请使用 Regression$fitted.values
。对于错误,使用 Regression$residuals
.
使用 iris
数据的示例:
data(iris)
Regression <- lm(Sepal.Length + Sepal.Width ~ Petal.Length, data = iris)
head(Regression$fitted.values)
Sepal.Length Sepal.Width
1 4.879095 3.306775
2 4.879095 3.306775
3 4.838202 3.317354
4 4.919987 3.296197
5 4.879095 3.306775
6 5.001771 3.275039
head(Regression$residuals)
Sepal.Length Sepal.Width
1 0.2209054 0.1932249
2 0.0209054 -0.3067751
3 -0.1382024 -0.1173536
4 -0.3199868 -0.1961965
5 0.1209054 0.2932249
6 0.3982287 0.6249605
如果您有 22 列,只需使用列在数据框中的位置。在他的回答中使用与 LAP 相同的数据集:
# load iris dataset
date(iris)
# run regression
Regression <- lm(as.matrix(iris[1:3]) ~ Petal.Width, data = iris)
在您的情况下,这将转化为类似以下内容:
# run the regression
Regression <- lm(as.matrix(df[3:22]) ~ INDEX, data = df)
假设您的因变量在第 3 列到第 22 列(第一列是日期,第二列是索引,或类似的东西)