我尝试在数据框的选定部分上运行几个回归。 有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经验,欢迎各种帮助!谢谢!
答案 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列(第一列是日期,第二列是索引,或类似的那些)