对数据框的某些部分运行回归并提取估计值+错误

时间:2017-09-18 12:03:45

标签: r loops dataframe regression

我尝试在数据框的选定部分上运行几个回归。 有22列。一个是" DATE",一个是" INDEX"和S1,S2,S3 ...... S20。

我以这种方式运行回归:

public class DatabaseInsertClass extends SqlWorkClass {

    @Override
    public void updateDatabaseInfo(String newUserName, String newBalance) throws ClassNotFoundException{
            //some actions with code above
}

public class DatabaseUpdateClass extends SqlWorkClass {

    @Override
    public void updateDatabaseInfo(String param1, String param2, String param3) throws ClassNotFoundException{
            //some actions with code above
}

public class DatabaseSelectClass extends SqlWorkClass {

        @Override
        public void updateDatabaseInfo(String param1) throws ClassNotFoundException{
                //some actions with code above
    }

1)如何缩短代码?就像使用间隔来告诉R:将S1到S20作为解释变量,并使用因变量INDEX对它们进行回归。

2)回归公式为:a + b * INDEX +错误 然后提取所有" b"回归估计。让我们说列有10行,所以必须有10个估计值。 同时提取所有错误:每列必须有10个错误,总共10 * 20 = 200个错误。

由于我没有R经验,欢迎各种帮助!谢谢!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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