背景: 2x2 の要素 (前景の黒と背景の白、オフカラーと通常の色) を使用して、簡単な A/B テストを実行しています。Analyticsは、4 つの条件のそれぞれのヒット数と、それらが「変換されたレート」を報告します。 ' (ページで少なくとも 40 秒を費やすと定義するバイナリ変数)。少し編集して素敵な R データフレームを取得するのは簡単です。
rates <- read.csv(stdin(),header=TRUE)
Black,White,N,Rate
TRUE,FALSE,512,0.2344
FALSE,TRUE,529,0.2098
TRUE,TRUE,495,0.1919
FALSE,FALSE,510,0.1882
当然のことながら、次のようなロジスティック回帰を見たいと思いますRate ~ Black * White
が、Rglm
は 2046 行のデータフレームを必要としており、それぞれが aTRUE
またはFALSE
コンバージョン値と および の値をBlack
報告していますWhite
。これは...もう少しトリッキーです。私はグーグルで検索してSOをチェックしましたが、不測の事態の数のテーブルをデータフレームに変換する方法についていくつかの不格好なコードを見つけましたが、パーセンテージ/レートについては何も見つかりませんでした。
多くの問題の後、rate * n
関連する条件値と結果True
を使用してデータフレームを繰り返し、 for と result を除いて同じことを(1 - rate) * n
行い、False
8 つのデータフレームすべてをつなぎ合わせる 4 つの条件のループを思いつきました。 1 つの巨大なデータフレームに:
ground <- NULL
for (i in 1:nrow(rates)) {
x <- rates[i,]
y <- do.call("rbind", replicate((x$N * x$Rate), data.frame(Black=c(x$Black),White=c(x$White),Conversion=c(TRUE)), simplify = FALSE))
z <- do.call("rbind", replicate((x$N * (1-x$Rate)), data.frame(Black=c(x$Black),White=c(x$White),Conversion=c(FALSE)), simplify = FALSE))
ground <- rbind(ground,y,z)
}
結果のデータフレームは正しくground
見えます:
sum(rates$N)
[1] 2046
nrow(ground)
[1] 2042
# the missing 4 are probably from the rounding-off of the reported conversion rate
summary(ground); head(ground, n=20)
Black White Conversion
Mode :logical Mode :logical Mode :logical
FALSE:1037 FALSE:1020 FALSE:1623
TRUE :1005 TRUE :1022 TRUE :419
NA's :0 NA's :0 NA's :0
Black White Conversion
1 TRUE FALSE TRUE
2 TRUE FALSE TRUE
3 TRUE FALSE TRUE
4 TRUE FALSE TRUE
5 TRUE FALSE TRUE
6 TRUE FALSE TRUE
7 TRUE FALSE TRUE
8 TRUE FALSE TRUE
9 TRUE FALSE TRUE
10 TRUE FALSE TRUE
11 TRUE FALSE TRUE
12 TRUE FALSE TRUE
13 TRUE FALSE TRUE
14 TRUE FALSE TRUE
15 TRUE FALSE TRUE
16 TRUE FALSE TRUE
17 TRUE FALSE TRUE
18 TRUE FALSE TRUE
19 TRUE FALSE TRUE
20 TRUE FALSE TRUE
同様に、ロジスティック回帰は正気の答えを吐き出します。
g <- glm(Conversion ~ Black*White, family=binomial, data=ground); summary(g)
...
Deviance Residuals:
Min 1Q Median 3Q Max
-0.732 -0.683 -0.650 -0.643 1.832
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.472 0.114 -12.94 <2e-16
BlackTRUE 0.291 0.154 1.88 0.060
WhiteTRUE 0.137 0.156 0.88 0.381
BlackTRUE:WhiteTRUE -0.404 0.220 -1.84 0.066
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2072.7 on 2041 degrees of freedom
Residual deviance: 2068.2 on 2038 degrees of freedom
AIC: 2076
Number of Fisher Scoring iterations: 4
私の質問は、Analytics のレート データをglm
入力に変換する、ひどいループよりも洗練された方法はありますか?