2014-05-23 8 views
2

내 문제는 predict() 함수와 그 구조, 그리고 예측을 플로팅하는 것입니다.glm 상호 작용 플로팅 : "newdata ="structure in predict() function

내 모델의 예측을 사용하여 중요한 요소 (및 상호 작용)가 내 응답 변수의 확률에 어떻게 영향을 주는지 시각화하고 싶습니다.

내 모델 :

m1 <-glm (mating ~ behv * pop + 
         I(behv^2) * pop + condition, 
         data=data1, family=binomial(logit)) 

짝짓기 : 개인이 성관계를하거나하지 않은 (이항 계수 : 0,1)

: 인구 (요인, 4 단계)

behv : 동작 (숫자, 축척 & 가운데 맞춤)

,210

조건 :

조건

behv * POP2

POP1 : 상대 지방 함량은 GLM 실행 후

심각한 영향 (숫자, 중심 & 스케일링)

behv 내가 도움말 페이지 등 유사한 질문에, 튜토리얼 이전 답변을 읽고 있지만^2 * POP1

, 나는 predict() 함수에서 newdata= 부분을 구성하는 방법을 알아낼 수 없었다. 위에서 시각화하려는 효과는 내가 원한 것을 알 수 있습니다. 예를 들어, "behv * pop2"상호 작용의 경우, 인구 - 연령층의 개인 행동을 보여주는 그래프를 얻고 싶습니다. 2는 짝짓기 여부에 영향을 줄 수 있습니다 (0에서 1까지 확률).

답변

2

실제로 predict이 예상하는 유일한 것은 newdata의 열 이름이 수식에 사용 된 열 이름과 정확하게 일치한다는 것입니다. 그리고 각 예측 자에 대한 가치를 가져야합니다. 다음은 몇 가지 샘플 데이터입니다.

#sample data 
set.seed(16) 
data <- data.frame(
    mating=sample(0:1, 200, replace=T), 
    pop=sample(letters[1:4], 200, replace=T), 
    behv = scale(rpois(200,10)), 
    condition = scale(rnorm(200,5)) 
) 

data1<-data[1:150,]  #for model fitting 
data2<-data[51:200,-1] #for predicting 

그런 다음이 data1를 사용하여 모형을 적합하고 당신에게 예측 가능성을 줄 것이다 type="response"를 사용 data2

model<-glm (mating ~ behv * pop + 
    I(behv^2) * pop + condition, 
    data=data1, 
    family=binomial(logit)) 

predict(model, newdata=data2, type="response") 

으로 예측됩니다.

예측을하려면 정확히 data.frame의 하위 집합을 사용할 필요가 없습니다. 특정 값 범위를 조사하기 위해 새 값을 만들 수 있습니다 (열 이름이 일치하는지 확인하십시오.) 따라서 내 샘플 데이터에 behv*pop2 (또는 behv*popb)을 탐색하려면 데이터를 만들 수 있습니다.이

popbbehv<-data.frame(
    pop="b", 
    behv=seq(from=min(data$behv), to=max(data$behv), length.out=100), 
    condition = mean(data$condition) 
) 

같은 프레임은 여기에 그래서 나는 단지 pop 찾고 있어요 pop="b"를 해결하고, 나뿐만 아니라 condition을 제공해야하기 때문에, 나는 원래 데이터의 평균에 있음을 고정한다. (나는 데이터가 중심에 놓여 있고 크기가 조정 되었기 때문에 0에 넣을 수있었습니다.) 이제는 내가 관심있는 값 behv의 값을 지정합니다. 여기에서 원래 데이터의 범위를 가져 와서 100 개의 영역으로 나누었습니다. 이것은 나에게 줄거리를 줄 충분한 점수를 줄 것이다. 그래서 다시 내가

popbbehvpred<-predict(model, newdata=popbbehv, type="response") 

를 얻을 수 predict를 사용하고 난 아무것도하지만와

plot(popbbehvpred~behv, popbbehv, type="l") 

results plot

내 가짜 데이터에서 의미가 있음을 플롯 할 수 있습니다, 우리는 더 높은 동작 값을 보이는 것을 알 수 있습니다 인구 B에 대한 교미가 감소합니다.