2014-05-21 3 views
0

나는 다음과 같은 상태를 가진 이산 열이있는 dataframe이는 R에 GLM에서 모든 개별 국가의 계수를 얻기

StateName   PX127857 PX128030 PX100049 PX100330 PX106316 PX115690 PX125484 PX112410 PX100778  
    Support   1   1   8   4   7   5   8   12  13 

내가

model<- glm(formula, data = DATAFRAME, family = "binomial") 

모델 $를 사용하여 GLM와 dataframe에 맞게 계수는 9 개의 이산 상태 중 단지 8 개의 계수를 반환합니다. 상태 PX128030의 경우, 어떤 계수도 얻지 못합니다.

왜이 m 무슨 일이 일어날 지 모르지만 모델 계수 $의 순서와 개수가 수준 (데이터 프레임 $ 열) 과 같으므로 PX128030과 같은 상태에 대해 null 또는 0을 반환하는 방법이 있습니까?

+0

일반적으로 수식에'-1' 또는'+0'을 사용하여 각 상태에 대한 계수를 제공하는 요격을 억제 할 수 있습니다 (모델이 복잡하면 제대로 표시되지 않을 수 있습니다) –

답변

0

이것은 실제로 기본적인 통계 문제입니다. 카테고리 변수를 모델에 넣으면 각 레벨에 대한 효과를 계산할 수 없습니다. 문제를 해결할 수있는 제약이 필요합니다. 여러 가지 방법으로이를 처리 할 수 ​​있지만, R에서 가장 공통적 인 것은 한 수준을 참조 수준으로 지정하고 다른 모든 수준의 계수는 실제로 해당 수준이 참조 수준과 얼마나 다른지에 대한 척도입니다. 따라서 그 참조 레벨에 대한 효과는 0이 아니며, 절편 추정에 간단히 묶여 있습니다. 기준 레벨은 일반적으로 요인의 첫 번째 레벨입니다.

모든 조건이 모델의 xterms 속성에 저장되어 있다고 생각합니다. 어쩌면 이것과 같은 도우미 기능을 사용할 수도 있습니다.

levelvals<-function(m) { 
    ml <- m$xlevels 
    fv<-lapply(names(ml), function(x) v<-paste(x, ml[[x]],sep="")) 
    cf <- coefficients(m) 
    r<-lapply(fv, function(v) {structure(cf[v], names=v)}) 
    names(r)<-names(ml) 
    r 
} 
m<-lm(y~f, dd) 
levelvals(m) 

그러나 매개 변수를 올바르게 해석하는지 확인하십시오. 그것들은 각각의 레벨을위한 수단이 아니며, 그것은 그 레벨과 참조 레벨 간의 평균 차이입니다.

+0

모델 $ 계수의 이름이 레벨 (df $ column)과 같지 않으므로 코드가 작동하지 않습니다. glm이 데이터 프레임에 열 이름이 "col"이고 상태가 PX127857이면 모델 계수 $는 "colPX127857"에 대한 계수를 생성하고 "PX127857"에 대해서는 계수를 생성하지 않습니다. 계수 이름에서 colname을 다듬을 수는 있지만 더 좋은 방법이 있습니까? – user2912902

+0

예, 제 경우의 참조 레벨에 ""수준의 누락 된 값이 있습니다. – user2912902

+0

@ user2912902 죄송합니다. 귀하는 정확합니다. – MrFlick