使用 R 在 Tableau 中复制 Excel chisq.test 函数

标签 r excel tableau-api chi-squared

我正在通过 R 在 Tableau 中使用 chisq.test。我在 Excel 中有一个模型,我必须复制它,但我的结果不同。我认为问题在于正确按摩 R 代码中的数据......

这些是 Excel 值:

excel values

Excel 中的 p 值公式为:CHISQ.TEST(F4:G4,H4:I4)。

这是 Tableau 的外观:

tableau values

Tableau 中的 p 值公式为:

SCRIPT_REAL("
obs_yes = .arg1;
obs_no = .arg2;
exp_yes = .arg3;
exp_no = .arg4;

df1 <- data.frame(obs_yes,obs_no);
df2 <- data.frame(exp_yes,exp_no);

print('df1 is ');
print(df1);
print('df2 is ');
print(df2);

if ( !is.na(obs_yes) && !is.na(obs_no) && !is.na(exp_yes) && !is.na(exp_no)) {
    #ChiSq = chisq.test(c(df1[8,1],df1[8,2]), p=c(df2[8,1],df2[8,2]), rescale.p=TRUE);
    ChiSq = chisq.test(df1, p=df2, rescale.p=TRUE);
    ChiSq$p.value;
} else {
    {NaN};
}
"
,[obs_yes],[obs_no],[exp_yes],[exp_no])

我在 R 调试中看到的 df1 和 df2 对我来说看起来不错:

R debug

但 p 值不正确 - 看起来它是根据所有值计算的?

如果我只传入 R 脚本一行,那么 p 值是正确的:
ChiSq = chisq.test(c(df1[1,1],df1[1,2]), p=c(df2[2,1],df2[2,2]), rescale.p=TRUE);

one value

但这无济于事,因为它是静态计算。

有任何想法吗?

这是 link到 .twbx 文件。

谢谢,

阿德里安

附言下面是在论坛上找到的工作代码(用于不同的设置),但我不知道如何根据我的情况调整它。
SCRIPT_REAL(
'mm <- data.frame(commodity = .arg1);
d <- split(mm,rep(1:.arg3[1],each=.arg2[1]/.arg3[1]));
zt <-do.call?do.c(cbind, d);chisq.test(zt)$p.value'
,SUM([Number of Records]), SIZE(),[Priorities])

最佳答案

我从这个 thread 得到灵感解决了这个问题.

问题是 R 计算应该“吐出”一个值向量而不是单个值。

这是解决方案,以防万一有人需要它:

SCRIPT_REAL("
obs_yes = .arg1;
obs_no = .arg2;
exp_yes = .arg3;
exp_no = .arg4;

if ( !is.na(obs_yes) && !is.na(obs_no) && !is.na(exp_yes) && !is.na(exp_no)) {
    out <- rep(NA,length(obs_yes));
    for(i in 1:length(obs_yes)) {
        out[i] <- chisq.test(c(obs_yes[i],obs_no[i]), p=c(exp_yes[i],exp_no[i]), rescale.p=TRUE)$p.value;
    }
    out
} else {
    {NaN};
}
"
,[obs_yes],[obs_no],[exp_yes],[exp_no])

关于使用 R 在 Tableau 中复制 Excel chisq.test 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782488/

相关文章:

Excel VBA : This key is already associated with an element of this collection

VBA - 查找具有特定标题的列并查找该列中所有行的总和

excel - Power Query 在每一列上应用函数

excel - 如何在 Tableau 中绘制开头为 0 数字的邮政编码的 map ?

javascript - 如何在切换仪表板过滤器后更新 Tableau 扩展 API 图表?

r - 如何将 TextMate 中选定的文本(或一行)发送到在终端上运行的 R

r - 基于列表对象的子数据框

r - 查找与特定值匹配的大矩阵的行

r - 关于 R,在定义替换函数时,参数是否必须命名为/类似 "x"和 "value"?

concatenation - 如何在 tableau 8.0.0 中连接年和月?