抱歉,这可能是一个非常基本的问题。
我用多元回归建立了一个大规模气象数据集的线性模型。我的目标是使用该模型“预测”某一时期的数据,使用预测器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发布于 2016-06-09 16:43:15
看起来你让这件事变得比需要的更困难了。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查看预测
发布于 2016-06-09 16:39:54
下面是对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.38304https://stackoverflow.com/questions/37731509
复制相似问题