데이터 프레임의 열 수를 알 수없고 각 열마다 고유 한 이름이 있습니다. 그리고 저는 열의 이름을 사용하지 않고 첫 번째 열과 다른 열 사이에서 선형 회귀를하고 싶습니다. 괭이 할 수있어?열의 이름이없는 R의 선형 회귀
예를 들어, mtcars
fit1 <- lm(mtcars$mpg ~ ., mtcars)
의 데이터 세트하지만 난 당신의 도움에 대한 mtcars에게 $ mpg로
감사를 사용하려면!
데이터 프레임의 열 수를 알 수없고 각 열마다 고유 한 이름이 있습니다. 그리고 저는 열의 이름을 사용하지 않고 첫 번째 열과 다른 열 사이에서 선형 회귀를하고 싶습니다. 괭이 할 수있어?열의 이름이없는 R의 선형 회귀
예를 들어, mtcars
fit1 <- lm(mtcars$mpg ~ ., mtcars)
의 데이터 세트하지만 난 당신의 도움에 대한 mtcars에게 $ mpg로
감사를 사용하려면!
출처를 보면 협박일지도 모르지만 유익합니다. model.matrix
및 기타 마사지 후 lm
을 파싱하면 lm.fit
가 호출됩니다. 도움이 필요하면 의 경험이있는 사용자가이 아닌 한 직접 사용하지 말아야합니다. 디버그하고 lm
이 lm.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
에서 마사지 단계가 있습니다. 이 함수를 사용하면 사용자가 의도 한 래퍼 함수의 "안전성"이 제거됩니다.
'fit1 <- lm (mtcars [, 1] ~., mtcars)'? –
괜찮아요,하지만 fit2 <- lm ((fit1 $ residuals)^2 ~ mtcars [, 2 : ncol (mtcars)], mtcars)를하고 싶다면 model.frame.default에 error 오류가 발생합니다 (수식 = ( 잘못된 유형의 변수 'mtcars [, 2 : ncol (mtcars)]' –
그건 다른 질문입니다. 질문에 구체적으로 말하면 " 첫 번째 열과 다른 열 사이에있는 것 "이라고 Ryan Morton이 말했고, 데이터 인수를 편집하여 원하지 않는 열을 제외 할 수도 있습니다 (예 :'I (fit1 $ resisuals^2) ~., data = mtcars [ , -1]' – Gregor