Итак, я собираюсь в конечном итоге сделать многомерную регрессию для большого набора предикторов. Чтобы убедиться, что я правильно помещаю данные и получаю ожидаемые результаты с игрушечной моделью. Однако, когда я пытаюсь использовать предсказание, он не прогнозирует новые данные, так как размер новых данных отличается от набора обучения, он дает мне ошибку. Я смотрел и пробовал разные вещи в Интернете, и никто не работал. Я почти готов отказаться и написать свои собственные функции, но я также строю модели с пакетом pls, который, как я предполагаю, вероятно, уже называет это внутренне, поэтому я хочу быть последовательным. Вот короткий сценарий я написал:R: Как использовать предсказание на тестовом наборе
x1<-c(1.1,3.4,5.6,1.2,5,6.4,0.9,7.2,5.4,3.1) # Orginal Variables
x2<-c(10,21,25,15.2,18.9,19,16.2,22.1,18.6,22)
y<-2.0*x1+1.12*x2+rnorm(10,mean=0,sd=0.2) # Define output variable
X<-data.frame(x1,x2)
lfit<-lm(y~.,X) # fit model
n_fit<-lfit$coefficients
xg1<-runif(15,1,10) # define new data
xg2<-runif(15,10,30)
X<-data.frame(xg1,xg2)# put into data frame
y_guess<-predict(lfit,newdata=X) #Predict based on fit
y_actual<-2.0*xg1+1.12*xg2 # actual values because I know the coefficients
y_pred=n_fit[1]+n_fit[2]*xg1+n_fit[3]*xg2 # What predict should give me based on fit
print(y_guess-y_actual) #difference check
print(y_guess-y_pred)
Эти ценности я получаю и сообщение об ошибке:
[1] -4.7171499 -16.9936498 6.9181074 -6.1964788 -11.1852816 0.9257043 -13.7968731 -6.6624086 15.5365141 -8.5009428
[11] -22.8866505 2.0804016 -1.8728602 -18.7670797 1.2251849
[1] -4.582645 -16.903164 7.038968 -5.878723 -11.149987 1.162815 -13.473351 -6.483111 15.731694 -8.456738
[11] -22.732886 2.390507 -1.662446 -18.627342 1.431469
Warning messages:
1: 'newdata' had 15 rows but variables found have 10 rows
2: In y_guess - y_actual :
longer object length is not a multiple of shorter object length
3: In y_guess - y_pred :
longer object length is not a multiple of shorter object length
Прогнозируемый коэффициент являются 1,97 и 1,13 и перехватывать -0,25, это должно быть 0 но я добавил шум, это не вызовет большого расхождения, как есть. Как получить его, чтобы я мог предсказать независимый тестовый набор.
Благодаря
вам нужны те же имена в 'data.frame' используется для' 'newdata' в предсказать()' , например. 'X <-data.frame (x1 = xg1, х2 = XG2) ' –