通过回归模型预测数据并存储在矢量中

时间:2016-06-09 16:27:02

标签: r

道歉可能是一个非常基本的问题。

我使用多元回归为大型气象数据集创建了一个线性模型。我的目标是使用该模型来预测"使用预测变量1,2和3在一定时期内的数据。然后,我会将这些预测数据与该时期的观测数据进行比较。

到目前为止,我的方法是为预测值创建一个新矢量并循环矢量,根据线性模型的提取系数创建预测值。然后,我将简单地从观察值中减去预测值。由于某种原因,这种方法导致新的预测向量为NULL。知道我怎么能接近这个吗?

下面是一个样本。 "数据"指包含预测变量的数据集。

     coef <- coefficients(multipleRegressionModel)

    predictedValues=c()

    for(i in 1:length(data$timePeriod)){
      predictedValues[i] = append(predictedValues, data$coef[1]+data$predictor1[i]*data$coef[2]+data$predictor2[i]*data$coef[3]+
      data$predictor3[i]*data$coef[4])
    }

diff=c()
diff=observedValues - predictedValues

2 个答案:

答案 0 :(得分:1)

以下是在glm数据上使用mtcars的简单示例。

Line<- #setting up the linear model function
function (train_dat, test_dat, variables, y_var, family = "gaussian") 
{
  fm <- as.formula(paste(y_var, " ~", paste(variables, collapse = "+"))) #formula
  glm1 <- glm(fm, data = train_dat, family = family) #run the model
  pred <- predict(glm1, newdata = test_dat) #predict the model
}

data(mtcars)
y_var<-'mpg'
x_vars<-setdiff(names(mtcars),y_var)

mtcars[,'linear_prediction']<-Line(mtcars,mtcars,x_vars,y_var)

head(mtcars)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb linear_prediction
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4          22.59951
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4          22.11189
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1          26.25064
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1          21.23740
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2          17.69343
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1          20.38304

答案 1 :(得分:1)

看起来你正在使它变得比它需要的更困难。 R具有predict()功能,可以为您完成所有这些功能。如果您有样本data.frame,请执行以下操作:

set.seed(26) 

mydf = data.frame (a=1:20 , b = rnorm(20), 
                   c = 1:20 + runif(20,2,3)*runif(20, 2, 3),
                   d = 1:20 + rpois(20,5)*runif(1:20)*sin(1:20)) 

你想训练一些行,并测试其他行

trainRows<-sample(1:20, 16)
mydf.train<-mydf[trainRows,]
mydf.test<-mydf[-trainRows,]

然后拟合模型并预测

model<-lm(a~b+c+d, data = mydf.train)
summary(model)  #gives info about your model. 

mydf.test$pred<-predict(model1, newdata = mydf.test)

MSE<-mean((mydf.test$pred-mydf.test$a)^2) #calculate mean squared error
MSE
#[1] 0.06321

使用mydf.test$pred

查看预测