2017-03-24 2 views
0

데이터 프레임의 열 수를 알 수없고 각 열마다 고유 한 이름이 있습니다. 그리고 저는 열의 이름을 사용하지 않고 첫 번째 열과 다른 열 사이에서 선형 회귀를하고 싶습니다. 괭이 할 수있어?열의 이름이없는 R의 선형 회귀

예를 들어

, mtcars

fit1 <- lm(mtcars$mpg ~ ., mtcars) 

의 데이터 세트하지만 난 당신의 도움에 대한 mtcars에게 $ mpg로

감사를 사용하려면!

+0

'fit1 <- lm (mtcars [, 1] ~., mtcars)'? –

+0

괜찮아요,하지만 fit2 <- lm ((fit1 $ residuals)^2 ~ mtcars [, 2 : ncol (mtcars)], mtcars)를하고 싶다면 model.frame.default에 error 오류가 발생합니다 (수식 = ( 잘못된 유형의 변수 'mtcars [, 2 : ncol (mtcars)]' –

+0

그건 다른 질문입니다. 질문에 구체적으로 말하면 " 첫 번째 열과 다른 열 사이에있는 것 "이라고 Ryan Morton이 말했고, 데이터 인수를 편집하여 원하지 않는 열을 제외 할 수도 있습니다 (예 :'I (fit1 $ resisuals^2) ~., data = mtcars [ , -1]' – Gregor

답변

0

출처를 보면 협박일지도 모르지만 유익합니다. model.matrix 및 기타 마사지 후 lm을 파싱하면 lm.fit가 호출됩니다. 도움이 필요하면 의 경험이있는 사용자가이 아닌 한 직접 사용하지 말아야합니다. 디버그하고 lmlm.fit으로 전화하는 방법을 확인하면 도움이됩니다. 이로부터

debugonce(lm.fit) 
lm(mtcars$mpg ~ mtcars$cyl, mtcars) 
# debugging in: lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) 

# Browse[2]> 
head(x) 
#     (Intercept) mtcars$cyl 
# Mazda RX4     1   6 
# Mazda RX4 Wag    1   6 
# Datsun 710     1   4 
# Hornet 4 Drive    1   6 
# Hornet Sportabout   1   8 
# Valiant      1   6 

# Browse[2]> 
head(y) 
#   Mazda RX4  Mazda RX4 Wag  Datsun 710 Hornet 4 Drive 
#    21.0    21.0    22.8    21.4 
# Hornet Sportabout   Valiant 
#    18.7    18.1 

# Browse[2]> 
c  
# Call: 
# lm(formula = mtcars$mpg ~ mtcars$cyl, data = mtcars) 
# Coefficients: 
# (Intercept) mtcars$cyl 
#  37.885  -2.876 

y 단순히 반응 변수 (mtcars$mpg)의 벡터라고 표시되고 x은 설명 변수 플러스 선두 칼럼 절편을 모두 갖는 행렬이다. (필자는 독자가 추가 열을 추가하기위한 운동으로 떠날거야.)

을 같이 보일 수 있습니다 직접 호출 : 차이가 lm()의 출력 클래스 "lm"의 점이다

mod <- lm.fit(cbind(Intercept = 1, mtcars$cyl), mtcars$mpg) 
str(mod) 
# List of 8 
# $ coefficients : Named num [1:2] 37.88 -2.88 
# ..- attr(*, "names")= chr [1:2] "Intercept" "" 
# $ residuals : num [1:32] 0.37 0.37 -3.58 0.77 3.82 ... 
# $ effects  : Named num [1:32] -113.65 -28.6 -3.7 0.71 3.82 ... 
# ..- attr(*, "names")= chr [1:32] "Intercept" "" "" "" ... 
# $ rank   : int 2 
# $ fitted.values: num [1:32] 20.6 20.6 26.4 20.6 14.9 ... 
# $ assign  : NULL 
# $ qr   :List of 5 
# ..$ qr : num [1:32, 1:2] -5.657 0.177 0.177 0.177 0.177 ... 
# .. ..- attr(*, "dimnames")=List of 2 
# .. .. ..$ : NULL 
# .. .. ..$ : chr [1:2] "Intercept" "" 
# ..$ qraux: num [1:2] 1.18 1.02 
# ..$ pivot: int [1:2] 1 2 
# ..$ tol : num 1e-07 
# ..$ rank : int 2 
# ..- attr(*, "class")= chr "qr" 
# $ df.residual : int 30 

한 반면 lm.fit의 출력은 "list"입니다. 다시 lm의 출처를 보면 lm.fit의 출력을 가져 와서 클래스 및 기타 속성을 목록에 적용한다는 것을 알 수 있습니다. (이러한 속성은 흔히 summary과 같은 미학에서 사용되지만 다른 도우미 함수로도 사용됩니다.)

클래스를 지정하면 콘솔 인쇄 기능이 향상되지만 간단히 말해서 후속 작업을 수행해야하는지 계산/분석을 위해서는 이러한 속성과 클래스가 적용되어야합니다.

class(mod) <- "lm" 
mod 
# Call: 
# NULL 
# Coefficients: 
# Intercept    
# 37.885  -2.876 

emptor 경고 : 여러 가지 청소와 완전히 여기에 바이 패스되는 lm에서 마사지 단계가 있습니다. 이 함수를 사용하면 사용자가 의도 한 래퍼 함수의 "안전성"이 제거됩니다.