ポアソン回帰を実行して、共通のバイナリ結果を予測しようとしています。バイナリ結果を含むポアソン回帰を実行するとエラーが発生する
私が最初に使ったのは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
を使用して回帰を実行し、私はエラーを受け取ります
結果を整数に変換すると、エラーは表示されません。しかし、これは
- のように、0-1の数値変数が2つのレベルの因子変数と同じように扱われない限り、バイナリ結果を予測する目的を破っているようです。そして
- は必要
geepack
から
geeglm
を使用してこの
postに記載)は思えません
質問:
さらに詳しい説明がありますか?
私の結果を範囲0-1の整数に変換すると、glm
はバイナリ変数と同じ扱いになりますか?そうでない場合、一般的なバイナリ結果に対して回帰を実行するのに適したアプローチがありますか?
'as.numeric(df $ cto ==" Yes ")'は 'glm'でうまくいく0と1を与えます。しかし、通常は、このようなバイナリ結果にはロジスティック回帰を使用し、結果には0より大きい整数値を取ることができるカウント変数またはレート変数に対するポアソン回帰を使用します。ポアソンは分析に適していますか? – Marius
@マリアス私はヒントを感謝します!大学を経て、バイナリの結果にロジスティック回帰が使用され、カウントデータにはポアソン回帰が使用されると教えられました。最近、私の大学の統計学者は、ロジスティック回帰はバイナリの結果がまれである場合には適切であるが、結果が共通している場合には問題に陥ると伝えました。そのような場合は、ポアソン回帰を使用するほうがよいでしょう。ここにCV上のスレッドがあります - [リンク](https://stats.stackexchange.com/questions/18595/poisson-regression-to-estimate-relative-risk-for-binary-outcomes) –
あなたのポイント1については、 "unless"の後のステートメントは正しいです - 0,1バイナリ変数(つまりダミー変数)に変換することは、まさにあなたがやりたいことです。あなたのリンクされた 'geeglm'の例では、結果は' TRUE'と 'FALSE'としてコード化されています - つまり、' 1'と '0' - これは彼らがそのポストで変換しなかった理由です回帰。 – paqmo