2017-07-13 7 views
0

ポアソン回帰を実行して、共通のバイナリ結果を予測しようとしています。バイナリ結果を含むポアソン回帰を実行するとエラーが発生する

私が最初に使ったのはdputです。私はそれを不適切に使用した場合、私に訂正できるように教えてください。

例データ:

fit <- glm(cto ~ sex + migStat + mhAreaBi + empStatBi + pensBenBi + maritStatBi, df, family = poisson) 

Error in if (any(y < 0)) stop("negative values not allowed for the 'Poisson' family") : 
    missing value where TRUE/FALSE needed 
In addition: Warning message: 
In Ops.factor(y, 0) : ‘<’ not meaningful for factors 

同じエラーを説明した簡単in this thread

Because the "<" operator is not defined for factors the result that is passed to if is of length 0. Setting the factor variable on the RHS and using the integer values on hte LHS succeeds.

df <- structure(list(id = 1:30, sex = structure(c(1L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 
2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L), .Label = c("Female", "Male" 
), class = "factor"), migStat = structure(c(1L, 2L, 1L, 1L, 1L, 
1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c("Australian-born", 
"Migrant"), class = "factor"), mhAreaBi = structure(c(1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L), .Label = c("Metropolitan", 
"Regional"), class = "factor"), empStatBi = structure(c(2L, 2L, 
1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 
2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Student/employed", 
"Unemployed"), class = "factor"), pensBenBi = structure(c(1L, 
2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 
1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L), .Label = c("No benefit", 
"In receipt of pension benefit"), class = "factor"), maritStatBi = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L), .Label = c("Married (including de facto)", 
"Not married"), class = "factor"), cto = structure(c(1L, 2L, 
2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 
2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L), .Label = c("No", 
"Yes"), class = "factor")), .Names = c("id", "sex", "migStat", 
"mhAreaBi", "empStatBi", "pensBenBi", "maritStatBi", "cto"), row.names = c(NA, 
-30L), class = "data.frame") 

Rでglmを使用して回帰を実行し、私はエラーを受け取ります

結果を整数に変換すると、エラーは表示されません。しかし、これは

  1. のように、0-1の数値変数が2つのレベルの因子変数と同じように扱われない限り、バイナリ結果を予測する目的を破っているようです。そして
  2. は必要
(少なくとも[Iは自分のデータセットにコードを適応させる場合、残念ながら、私は同じエラーを受け取る]バイナリ結果を予測する geepackから geeglmを使用してこの postに記載)は思えません

質問:

さらに詳しい説明がありますか?

私の結果を範囲0-1の整数に変換すると、glmはバイナリ変数と同じ扱いになりますか?そうでない場合、一般的なバイナリ結果に対して回帰を実行するのに適したアプローチがありますか?

+3

'as.numeric(df $ cto ==" Yes ")'は 'glm'でうまくいく0と1を与えます。しかし、通常は、このようなバイナリ結果にはロジスティック回帰を使用し、結果には0より大きい整数値を取ることができるカウント変数またはレート変数に対するポアソン回帰を使用します。ポアソンは分析に適していますか? – Marius

+0

@マリアス私はヒントを感謝します!大学を経て、バイナリの結果にロジスティック回帰が使用され、カウントデータにはポアソン回帰が使用されると教えられました。最近、私の大学の統計学者は、ロジスティック回帰はバイナリの結果がまれである場合には適切であるが、結果が共通している場合には問題に陥ると伝えました。そのような場合は、ポアソン回帰を使用するほうがよいでしょう。ここにCV上のスレッドがあります - [リンク](https://stats.stackexchange.com/questions/18595/poisson-regression-to-estimate-relative-risk-for-binary-outcomes) –

+1

あなたのポイント1については、 "unless"の後のステートメントは正しいです - 0,1バイナリ変数(つまりダミー変数)に変換することは、まさにあなたがやりたいことです。あなたのリンクされた 'geeglm'の例では、結果は' TRUE'と 'FALSE'としてコード化されています - つまり、' 1'と '0' - これは彼らがそのポストで変換しなかった理由です回帰。 – paqmo

答えて

0

私はここに最良の選択肢だと思う:あなたが明示的にバイナリ結果に1 /成功がどうなるか、あなたのコード内で表示され、のようなもので、最大トリップしません。この方法として

df$cto_binary <- as.numeric(df$cto == "Yes") 
fit <- glm(cto_binary ~ sex + migStat + mhAreaBi + empStatBi + pensBenBi + maritStatBi, 
      df, family = poisson) 

因子レベルの順序づけ。 R as.numeric(c(FALSE, TRUE))にはc(0, 1)と記載されていますので、論理的な比較から得られることを常に知っています。

関連する問題