2015-03-24 6 views
-3

У меня есть набор данных, как это:Предсказание независимые переменные

L <- data.frame(Z1=c("N","N","M","M","P","P","P","A","A","A","A","A"), 
        Z2=c("N","M","M","P","P","P","P","A","A","A","A","A"), 
        Z3=c("M","N","M","M","P","N","A","P","A","A","A","P"), 
        Y1=c(55,54,34,40,49,24,26,27,38,40,49,65), 
        Y2=c(45,43,42,34,36,37,27,39,44,55,66,24), 
        Y3=c(21,23,33,55,66,65,78,90,32,56,34,23)) 

Я хочу, чтобы кодировать факторы (А = 0, М = 1, N = 2, p = 3) и получить это:

L <- data.frame(Z1=c("N","N","M","M","P","P","P","A","A","A","A","A"), 
       Z1.1= c(2,2,1,1,3,3,3,0,0,0,0,0), 
       Z2=c("N","M","M","P","P","P","P","A","A","A","A","A"), 
       Z2.2=c(2,1,1,3,3,3,3,0,0,0,0,0), 
       Z3=c("M","N","M","M","P","N","A","P","A","A","A","P"),  
       Z3.3=c(1,2,1,1,3,2,0,3,0,0,0,3), 
       Y1=c(55,54,34,40,49,24,26,27,38,40,49,65), 
       Y2=c(45,43,42,34,36,37,27,39,44,55,66,24), 
       Y3=c(21,23,33,55,66,65,78,90,32,56,34,23)) 

Затем я хочу предсказать Y с использованием линейной регрессии. Я использовал lm(Y~x) для получения склонов и перехватов для каждой переменной результата, то есть Z1.1 и Y1, Z2.1 и Y2, Z3.1 и Y3. Я использовал значение 3, чтобы получить предикат для следующего результата (см. Ниже). Однако я стараюсь создать следующую таблицу для каждого результата в моем наборе данных. Мне нужны коды R, но я не хочу использовать data.table или другие пакеты.

Outcome  Value 
P1    50.424 
P2    34.628 
P3   53.4  

Ценности должны быть векторными.

+0

Если вы запускаете модель, вы должны показать код для этого. Вы также можете отменить свои изменения в моей версии ... все выглядит лучше с разрывами строк. – Gregor

+0

Я не думаю, что Stack Snippets работают над кодом R –

+0

Gregor- Я показал коды – user17

ответ

0

Вы можете использовать значения Z1, Z2 и т. Д. Переменные для извлечения из именованного вектора, который описывает вашу схему перекодирования. Вот как вы могли бы сделать это:

L$Z1.1 <- c(A=0, M=1, N=2, P=3)[L$Z1] 
L$Z2.1 <- c(A=0, M=1, N=2, P=3)[L$Z2] 
L$Z3.1 <- c(A=0, M=1, N=2, P=3)[L$Z3] 
L 
# Z1 Z2 Z3 Y1 Y2 Y3 Z1.1 Z2.1 Z3.1 
# 1 N N M 55 45 21 2 2 1 
# 2 N M N 54 43 23 2 1 2 
# 3 M M M 34 42 33 1 1 1 
# 4 M P M 40 34 55 1 3 1 
# 5 P P P 49 36 66 3 3 3 
# 6 P P N 24 37 65 3 3 2 
# 7 P P A 26 27 78 3 3 0 
# 8 A A P 27 39 90 0 0 3 
# 9 A A A 38 44 32 0 0 0 
# 10 A A A 40 55 56 0 0 0 
# 11 A A A 49 66 34 0 0 0 
# 12 A A P 65 24 23 0 0 3 

А вот ваши результаты регрессии:

c(coef(lm(Y1 ~ Z1.1, data = L))[1], 
    coef(lm(Y2 ~ Z2.1, data = L))[1], 
    coef(lm(Y3 ~ Z3.1, data = L))[1]) 
# (Intercept) (Intercept) (Intercept) 
# 44.30137 46.09677 43.68000 
+0

Спасибо, Томас. Мне не интересно получать перехваты, эти значения основаны на модели, использующей значение 3. Могу ли я получить цикл для перекодирования данных. – user17

Смежные вопросы