2014-10-10 3 views
0

Я разделил весь набор данных на две части: один для обучения, а другой для testint.скорректированный R2 учебного набора данных не является постоянным

Учебный набор данных содержит 70 наблюдений, а тестовый набор данных содержит 14 наблюдений. Моя модель имеет 1 числовую зависимую переменную и 5 числовых независимых переменных.

Я запускаю множественную регрессию с помощью набора учебных пособий, и каждый раз, когда я запускаю код для регрессии, значение скорректированного R2 в наборе учебных данных не было постоянным, но оно непрерывно менялось. Его значения варьировались от 60% до 70%.

Функция, которую я использовал для разделения данных, содержала функцию «sample» и «set.seed» в своем коде.

Мой вопрос ... в этом случае, как интерпретировать неизменные значения скорректированного R2 из набора учебных данных? Это нормально?

splitdf <- function(dataframe, seed=NULL) { 
    if (!is.null(seed)) set.seed(seed) 
    index <- 1:nrow(dataframe) 
    trainindex <- sample(index, trunc(length(index)/6)) 
    testset <- dataframe[trainindex, ] 
    trainset <- dataframe[-trainindex, ] 
    list(trainset=trainset,testset=testset) 
} 

splits <- splitdf(df, seed=1234) 
str(splits) 
my_train <- splits$trainset 
my_test <- splits$testset 

PS: модель удовлетворена всеми допущениями линейной регрессии.

+1

Если вы используете случайный образец, я не понимаю, почему вы ожидаете, что R2 будет постоянным. – Metrics

+0

Пожалуйста, разместите образец кода. Если вы 'set.seed' в начале вашего кода и дважды вызываете' sample', они дадут вам два разных раскола. Чтобы получить тот же случайный раскол, вам нужно будет вызвать 'set.seed' с тем же семенем перед вторым разделом. – josliber

+0

Квантовая механика на работе и играть. –

ответ

0

Если вы используете одно и то же семя, ваш R2 не должен меняться.

#sim data 
set.seed(12) 
data <- data.frame(Y=rnorm(10),X1=rnorm(10),X2=rnorm(10),X3=rnorm(10)) 

#split data 
splits <- splitdf(data, seed=1234) 
my_train <- splits$trainset 
my_test <- splits$testset 
summary(lm(Y~X1+X2+X3,my_train))$r.squared 
#[1] 0.3922881 

#split again using same seed...get same results 
splits <- splitdf(data, seed=1234) 
my_train <- splits$trainset 
my_test <- splits$testset 
summary(lm(Y~X1+X2+X3,my_train))$r.squared 
#[1] 0.3922881 

#split using different seed...get different results 
splits <- splitdf(data, seed=5555) 
my_train <- splits$trainset 
my_test <- splits$testset 
summary(lm(Y~X1+X2+X3,my_train))$r.squared 
#[1] 0.7948203 
+0

спасибо Benjamin .. просто еще один вопрос .. после установки семени NULL, нормально ли диапазон отрегулированного R2 варьируется от 60% до 70%? –

+0

, если вы установили семя в нуль, вы будете получать разные тренировочные задания каждый раз, поэтому ваш R2 не должен быть одинаковым. Сколько это будет зависеть от ваших данных, и я не смогу ответить на этот вопрос – bdeonovic