데이터를 다른 데이터 프레임으로 분리하는 대신 단일 데이터 프레임을 유지하고 lapply
예측 변수의 열 이름을 입력하십시오. 아래는 내장 된 mtcars
데이터 프레임을 사용한 예입니다.
my_lms = lapply(names(mtcars)[-grep("mpg", names(mtcars))], function(n) {
lm(paste("mpg ~ ", n), data=mtcars)
})
그러면 요약 또는 신뢰 구간을 인쇄 할 수 있으며 변수의 실제 열 이름이 출력에 나타납니다. 모델을 생성하는 위의 코드에서
lapply(my_lms, summary)
lapply(my_lms, confint)
, 우리가 사용하는 데이터 프레임
lm
얘기하는
data
인수를 사용합니다. 그런 다음 모델 수식의 열 이름을 사용합니다.이 수식은 수식 대신 문자열을 사용하여 입력 할 수 있습니다. 이 방법을 사용하면 실제 변수 이름이 요약 출력에 나타납니다.
위에서 언급 한 것처럼 모델 수식 내의 하나 이상의 데이터 프레임에서 벡터를 가져 오면 모델 변수의 열 이름이 요약에 포함되지 않습니다. 또한 일부 보조 기능이 제대로 작동하지 않습니다. 예를 들어
m1 = lm(mtcars[,1] ~ mtcars[,6])
predict(m1, newdata=data.frame(wt=1:10))
이 경고를 발생시키는 모델 대신 우리는 함수에 입력 된 새로운 데이터를 피팅하는데 사용 된 데이터를 이용하고 Warning message: 'newdata' had 10 rows but variables found have 32 rows
predict
출력 예측.
열 이름의 명명 된 벡터를 사용하면 lapply
에 의해 출력 된 목록 요소의 이름이 지정됩니다. 이를 통해 주어진 행을 모델로하는 마크가 추가 된 컬럼이있는 여러 모델의 출력을 포함하는 단일 데이터 프레임을 생성 할 수 있습니다.예를 들어 :
library(broom)
library(purrr)
vars = names(mtcars)[-grep("mpg", names(mtcars))]
my_lms = lapply(setNames(vars, vars), function(n) {
lm(paste("mpg ~ ", n), data=mtcars)
})
map_df(my_lms, tidy, .id="Predictor Variable")
Predictor Variable term estimate std.error statistic p.value
1 cyl (Intercept) 37.88457649 2.073843606 18.2678078 8.369155e-18
2 cyl cyl -2.87579014 0.322408883 -8.9196988 6.112687e-10
3 disp (Intercept) 29.59985476 1.229719515 24.0704115 3.576586e-21
4 disp disp -0.04121512 0.004711833 -8.7471515 9.380327e-10
5 hp (Intercept) 30.09886054 1.633920950 18.4212465 6.642736e-18
6 hp hp -0.06822828 0.010119304 -6.7423885 1.787835e-07
7 drat (Intercept) -7.52461844 5.476662574 -1.3739423 1.796391e-01
8 drat drat 7.67823260 1.506705108 5.0960421 1.776240e-05
9 wt (Intercept) 37.28512617 1.877627337 19.8575753 8.241799e-19
10 wt wt -5.34447157 0.559101045 -9.5590441 1.293959e-10
11 qsec (Intercept) -5.11403815 10.029543299 -0.5098974 6.138544e-01
12 qsec qsec 1.41212484 0.559210130 2.5252133 1.708199e-02
13 vs (Intercept) 16.61666667 1.079711283 15.3899167 8.846603e-16
14 vs vs 7.94047619 1.632370025 4.8643850 3.415937e-05
15 am (Intercept) 17.14736842 1.124602541 15.2474922 1.133983e-15
16 am am 7.24493927 1.764421632 4.1061270 2.850207e-04
17 gear (Intercept) 5.62333333 4.916379125 1.1437957 2.617534e-01
18 gear gear 3.92333333 1.308130699 2.9991906 5.400948e-03
19 carb (Intercept) 25.87233385 1.836807218 14.0854923 9.218370e-15
20 carb carb -2.05571870 0.568545640 -3.6157497 1.084446e-03
다른 모델 정보를 수집하려면, 예를 들어, 수행 할 수 있습니다
map_df(my_lms, confint_tidy, .id="Predictor Variable")
map_df(my_lms, augment, .id="Predictor Variable")
map_df(my_lms, glance, .id="Predictor Variable")
UPDATE를 :을 주석 님의 질문에 답변
names(mtcars)[-grep("mpg", names(mtcars))]
의 기능은 무엇입니까?
names(mtcars)
은 모든 이름의 벡터를 반환하지만 결과 변수이기 때문에 mpg
을 제외하려고합니다. grep("mpg", names(mtcars))
은 mpg
의 인덱스 위치를 mtcars
데이터 프레임에 반환합니다. 1
일 수 있습니다. mpg
이 데이터 프레임의 첫 번째 열이기 때문에 발생합니다. 따라서 names(mtcars)[-grep("mpg", names(mtcars))]
은 names(mtcars)[-1]
과 같습니다. 즉, 위치 1의 값을 제외한 mtcars
의 모든 열 이름 벡터를 반환한다는 것을 의미합니다. 그러나 grep
은 알 필요없이 주어진 이름의 열을 제외 할 수 있기 때문에 사용했습니다 데이터 프레임 내의 인덱스 위치 names(mtcars)[-match("mpg", names(mtcars))]
과 동일한 결과를 얻을 수 있습니다.
(names(mtcars)[-grep("mpg", names(mtcars))]
그 이름의 일환으로 mpg
를 포함하는 모든 열을 제외하기 때문에 사실, 후자는 안전합니다, 당신은 grep("^mpg$", names(mtcars))
을 할 수있는 유일한 mpg
에 맞게 grep
을 강제로,하지만 어쩌면 문자열 일치의 세부에 도착하면 지금 당장 걱정하고 싶지는 않습니다.)
부품을 별도로 실행하면 이러한 기능이 어떻게 작동하는지 알 수 있습니다. 예를 들어 grep("mpg", names(mtcars))
을 실행합니다.
왜 인수 vars를 setNames(vars, vars)
에 두 번 넣어야합니까?
vars
은 열 이름의 벡터입니다. setNames(vars, vars)
은 벡터의 각 요소에 이름을 지정합니다. 출력을보고 단지 vars
과 다른 점을 비교하려면 setNames(vars, vars)
을 실행하십시오. setNames
은 두 개의 인수를 취합니다. 첫 번째는 이름을 설정하려는 객체이고 두 번째 인수는 할당하려는 이름입니다. setNames(vars, LETTERS[1:length(vars)])
은 알파벳의 처음 10자를 이름으로 사용합니다.) 의 목록 요소 이름으로이 이름을 사용하면 lapply
이됩니다. lapply
이 기본적으로 입력 값이 vars
인 출력 목록 요소의 이름을 지정했지만 좋지는 않습니다. setNames
을 피하는 방법은 lapply
대신 sapply
을 사용하는 것이지만 simplify=FALSE
인수를 추가해야합니다. lm(paste("mpg ~ ", n)
을 :
my_lms = sapply(vars, function(n) {
lm(paste("mpg ~ ", n), data=mtcars)
}, simplify=FALSE)
어떻게 당신은 당신이 사용하는 경우 mpg
과에 선형 회귀를 실행 R있는 변수를 알 수 있습니까? sapply
및 lapply
(이 경우 vars
) 입력 벡터 또는 목록을 그 입력 벡터 또는 목록의 각 요소에 대해 기능을 실행 my_lms
작성하는 바로 위 sapply
함수에
봐.이 경우 실행할 함수를 lm
으로 지정합니다. n
은 입력 벡터 vars
을 다시 참조하는 "더미"인수입니다. 따라서 함수 n
의 첫 번째 반복은 인 vars
의 첫 번째 요소입니다. 두 번째 반복에서 n
는
map_df
은 (패키지 tidyverse
제품군의 일부 임) purrr
패키지 함수 등 disp
이다. map
은 lapply
또는 sapply
과 같습니다. map_df
은 목록이 아닌 데이터 프레임을 반환하기 때문에 편리합니다.
무료 콘텐츠 평점 : 전체 이용가 설명 R for Data Science
이 도움이 될 수 있습니다.
'이름 (요약) <- x', 여기서'x'는 할당하고자하는 이름의 벡터입니다. – storaged
아, 더 많은 것을 유지하는 더 편리한 방법이 있다면 좋을 것입니다. 거기에있는 정보. 그러나, 그것의 부재에서 나는 그것을 줄 것이다. – RGM
또한 위의 내용을 사용하여 요약 출력이 베타 계수에 대해 95 %의 신뢰 구간을 제공하지 않는다는 것을 깨달았습니다. 효율적으로 출력 할 수있는 방법이 있습니까? – RGM