2016-10-24 5 views
2

나는 자동차의 가격, 브랜드, 마일리지 등으로 구성된 데이터 세트를 가지고 일하고있다.매번 데이터의 임의의 부분 집합을 사용하여 회귀를 복제하고 회귀 계수의 분포를 확인 하시겠습니까?

내 회귀 분석을 2,000 회 반복하여 가격에 대한 내 독립 변수 회귀 (회귀)에 대한 계수를 원한다. 그리고 각 회귀에 대한 300 회의 관측을 샘플링하여.

model <- lm(price ~ mileage, data = dat) 

내가
for (i in 1:2000) model300 <- sample(model[i], size=300) 

그것은 작동하지 않았다

을 시도 :

다음은 내 회귀 분석을위한 모델이다.

를 '= FALSE 교체'때 인구보다 큰

샘플을 채취 할 수 없습니다 sample.int에서

오류 (길이 (x)를, 크기, 교체, PROB) : 나는 다음과 같은 오류 메시지를 받았습니다

나는이 포럼에서 이전의 answer을 참조하려고했지만 내 질문에 해당하는지 확실하지 않습니다.

나는 어떤 조언을 부탁드립니다.

답변

3

장착 된 선형 모델 개체에서 샘플링하여 얻을 것으로 예상되는 것은 무엇입니까?

sample(model[i], size=300) 

데이터를 샘플링하고 모델을 다시 만들고 싶습니다. 즉, 2000 번 수행하여 2000 번 데이터를 샘플링하고 2000 회진 모델에 맞 춥니 다.


데이터에서 샘플링이 핵심입니다. 이것은 lmsubset 인수를 사용하여 유망한 방법이 될 것입니다. 프로세스를 여러 번 복제해야하는 모든 문제의 경우, 한 번 이러한 실험을 수행하는 함수를 작성하는 것이 편리합니다.

f <- function() { 
    fit <- lm(price ~ mileage, data = dat, subset = sample(nrow(dat), 300)) 
    coef(fit) 
    } 

지금, 우리는 매트릭스 얻을이 2000 번 반복 replicate를 사용

z <- t(replicate(2000, f())) 

replicate는 항상 평평한 매트릭스로 끝날 수 cbind() 않습니다 sapply에 기반을; 가독성을 높이기 위해 long matrix를 얻기 위해 을 사용하여 전치했습니다.


다음은 R의 기본 제공 데이터 세트 cars을 예로 들어 설명합니다. 이 데이터 세트에는 50 개의 관측치가 있으므로 교체하지 않고 300 개의 샘플을 샘플링 할 수 없습니다. 대신 샘플 30을 사용하겠습니다.

f <- function() { 
    fit <- lm(dist ~ speed, data = cars, subset = sample(nrow(cars), 30)) 
    coef(fit) 
    } 

한 번 실행하면 계수 벡터가됩니다. set.seed 부분은 재현하기위한 것입니다.이 복제하여

set.seed(0); f() 

#(Intercept)  speed 
# -22.69112  4.18617 

50 회 말, 우리는 매트릭스 얻을 :

계수의 분포가 대략 히스토그램에 의해 평가 될 수
set.seed(0); z <- t(replicate(50, f())) 

head(z) ## show first few rows 

#  (Intercept) speed 
#[1,] -22.69112 4.186170 
#[2,] -21.31613 4.317624 
#[3,] -12.98734 3.454305 
#[4,] -22.59920 4.274417 
#[5,] -22.53475 4.584875 
#[6,] -18.88185 4.104758 

:

par(mfrow = c(1,2)) 
hist(z[,1], main = "intercept") 
hist(z[,2], main = "slope") 

enter image description here

많은 복제를하지 않았기 때문에 결과가 거칠어 보입니다.

+1

감사합니다. 그게 내가 달성하려고 시도한 것입니다. 목표는 계수의 분포를 관찰하는 것입니다. 계수의 분포는 충분한 시간 복제하면 정규 분포와 같이 작동합니다. – Senun