【问题标题】:Run a regression on certain parts of a data frame and extract estimates + errors对数据框的某些部分运行回归并提取估计值 + 错误
【发布时间】:2018-02-26 23:06:15
【问题描述】:

我尝试对数据框的选定部分进行多次回归。 有 22 列。一个是“日期”,一个是“索引”和 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 的经验,欢迎各种帮助!谢谢!

【问题讨论】:

  • 对不起,我把它弄混了:S 变量是依赖的,INDEX 是解释性的。 S = a + b*INDEX + 误差

标签: r loops dataframe regression


【解决方案1】:

如果您有 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 列(第一列是日期,第二列是索引,或类似的)

【讨论】:

  • 谢谢!这真的是最简单的解决方案!但是,当您将它用于自变量时,它总是在输出中的变量名称之前包含一个“as.matrix(sb[3:22])”(summary(Regression))。是否有可能避免这种情况?
  • 也许您可以在lm 上方运行as.matrix。在这种情况下,变量名称将由您创建的矩阵的名称和列的名称组成。
  • 好主意。这样就可以选择一个短前缀,比如“var_”。
【解决方案2】:

您可以通过使用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

【讨论】:

  • 看起来很棒!如果我有 20 个名称不同但没有数字的列,我该怎么做。例如。 “Sa”、“Sb”、“Sc”、“Sd”等。然后我不能使用 [paste0("S", 1:20)]?我如何告诉 R 进入数据框并从第 1 列开始并以第 20 列结束,然后按列的全长取列。可能我想的太像excel用户了,在计算之前可以选择列和行。
  • 查看@ira 的答案,您可以只使用数字作为数据框中列的位置,例如df[1:20] 前 20 个。
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多