次のデータを含むデータフレームがあります。
age.cat ds.cat finalstate
<65 AGN dead
<65 AGN alive
<65 PC alive
65+ AMI alive
65+ PC dead
<65 AMI alive
ds.cat
因子変数のすべてのレベルについて、変数age.cat
とfinalstate
変数のフィッシャー検定を実行する必要があります。
私はいくつかの方法でそれをやろうとしましたが、必要なものが得られませんでした. 次の R コードでは、目的の結果が得られません。
library(descr)
# 1 syntax - doesn't work
by(split(df, df$ds.cat), CrossTable(age.cat, finalstate, prop.chisq = FALSE, fisher = TRUE))
# 2 syntax - doesn't work
sapply( split(df, df$ds.cat), function(x) CrossTable(age.cat, finalstate, prop.chisq = FALSE, fisher = TRUE) )
# 3 syntax - doesn't work
for(i in 1:nlevels(ds.cat)){
curcat <- subset(df, ds.cat == ds.cat[i])
CrossTable(age.cat[ds.cat == ds.cat[i]], finalstate[ds.cat == ds.cat[i]], prop.chisq = FALSE, fisher = TRUE, data = curcat)
}
因子変数のすべてのレベルに対してフィッシャー検定age.cat
と変数を実行する方法を誰か提案できますか?finalstate
ds.cat
解決しました!
皆様本当にありがとうございました!
このコードCrossTable
はエラーを生成します
Error in chisq.test(t, correct = FALSE) :
'x' must at least have 2 elements
しかし、@BenBolkerのおかげで、ベースfisher.test
関数はコードでうまく機能します
l <- split(arf.mort, arf.mort$ds.cat)
lapply(l, function(x) fisher.test(x$age.cat, x$finalstate))
うまく機能するだけでなく、
by(arf.mort, arf.mort$ds.cat, function(x){ fisher.test(x$age.cat, x$finalstate) })