2017-12-01 15 views
0

포아송 회귀 모형을 작성한 후 R의 예측 함수를 사용하여 예측을 할 수 있습니다. R에 설정된 새 데이터로 작업 할 수 없습니다. 오류가 발생합니다.포아송 회귀 모형의 예측, R의 데이터 프레임 (오류 : 인수가 다른 행 수를 의미 함 : 0, 1)

newdata <- data.frame(
    patient = mean(myd$patient), 
    hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)), 
    PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)), 
    age = factor(1:3, levels = 1:3, labels = levels(myd$age)), 
    miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 

Error in data.frame(patient = mean(myd$patient), hypertensive = factor(1:4, : arguments imply differing number of rows: 1, 4, 2, 3

+1

왜 "복잡한"'factor' 선언을 가지고있다? 예를 들어 어떻게해야합니까? '고혈압 = as.factor (myd $ 고혈압)'등등? –

+2

또한 질문과 제목이 푸 아송 회귀와 아무 관련이 없습니다. –

+2

'data.frame' 대신'expand.grid'를 시도하십시오. 아마도 그 대신에 원하는 것이 될 것입니다. –

답변

0

@Neal 퓰츠로 사용 expand.grid 쓴다. 변수의 길이가 모두 같아야한다는 것을 data.frame에 대한 인수에서 길이가 2-4 인 변수.

사람이 내 대답을 downvoted하지만 난 그것을 명료하게 여기 내 대답을 확장하는 이유 나도 몰라

업데이트. 문제는 data.frame에 입력 인수가 서로 다른 길이

> # create data example 
> myd <- data.frame(
+ # NOTICE: I assume that your patient covariate is continuous -- otherwise I 
+ #   do not get why you would take a mean 
+ patient  = 1:12, 
+ # here are the factors 
+ hypertensive = rep(letters[1:4], 3), 
+ PCOS   = rep(letters[1:2], 6), 
+ age   = rep(letters[1:3], 4), 
+ miscarriage = rep(letters[1:2], 6) 
+) 
> myd # show data 
    patient hypertensive PCOS age miscarriage 
1  1   a a a   a 
2  2   b b b   b 
3  3   c a c   a 
4  4   d b a   b 
5  5   a a b   a 
6  6   b b c   b 
7  7   c a a   a 
8  8   d b b   b 
9  9   a a c   a 
10  10   b b a   b 
11  11   c a b   a 
12  12   d b c   b 
> 
> # your issue is that the length you pass to data.frame differs 
> length(factor(1:4, levels = 1:4, labels = levels(myd$hypertensive))) 
[1] 4 
> length(factor(1:2, levels = 1:2, labels = levels(myd$PCOS))) 
[1] 2 
> 
> # however, you can use expand.grid 
> newdata <- expand.grid(
+ patient = mean(myd$patient), 
+ hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)), 
+ PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)), 
+ age = factor(1:3, levels = 1:3, labels = levels(myd$age)), 
+ miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 
> 
> # it will have many examplse though 
> nrow(newdata) 
[1] 48 
+0

빠른 응답을 보내 주셔서 감사합니다. 당신의 설명은 나에게 아주 분명합니다. –

+0

도와 드리겠습니다. 동의 버튼을 클릭하여 질문에 답변 한 경우 질문을 닫으십시오. –

관련 문제