用R在Tableau中复制Excel chisq.test函数
我正在努力通过R在Tableau中进行chisq.test测试。我在Excel中有一个模型,我必须复制它,但我的结果不同。我认为问题在于R代码中数据的正确处理 以下是Excel值: Excel中的p值公式为:CHISQ.TEST(F4:G4,H4:I4) 这是Tableau的外观: 表中p值公式为:用R在Tableau中复制Excel chisq.test函数,r,excel,tableau-api,chi-squared,R,Excel,Tableau Api,Chi Squared,我正在努力通过R在Tableau中进行chisq.test测试。我在Excel中有一个模型,我必须复制它,但我的结果不同。我认为问题在于R代码中数据的正确处理 以下是Excel值: Excel中的p值公式为:CHISQ.TEST(F4:G4,H4:I4) 这是Tableau的外观: 表中p值公式为: SCRIPT_REAL(" obs_yes = .arg1; obs_no = .arg2; exp_yes = .arg3; exp_no = .arg4; df1 <- data.f
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])
但这没有帮助,因为这是一个静态计算
有什么想法吗
下面是一个指向.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])
SCRIPT\u REAL(
“嗯我从中得到灵感解决了这个问题
问题是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])
SCRIPT\u REAL(“
obs_yes=.arg1;
obs_编号=.arg2;
exp_yes=.arg3;
exp_no=.arg4;
如果(!is.na(obs_yes)&&&!is.na(obs_no)&&!is.na(exp_yes)&&!is.na(exp_no)){
你的卡方值可能不匹配的一个原因是因为R在p值上加了一个正确的值,但更多的是与你的问题有关为什么不使用Tableau来计算p值:Mike,如果我只计算R脚本中的一行,我的值匹配。问题是如何使R脚本返回每行的p值。
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])