我必须在R中编写一个样本比例Z测试函数。我需要将样本比例作为第一个因子水平的数据比例。 例如,
data <- factor(c(NA, rep("a", 60), rep("b", 40)))
table(data)
a b
60 40
我需要样本比例为60/100。这是我的代码的一部分,它在mtab <- addmargins(table(data))
中返回错误说明意外符号。
hyp_test <- function(data, hyp_val=NULL, alpha, alternative="two-sided",graph=FALSE) {
n <- sum(!is.na(data))
ifelse(is.factor(data),
mtab <- addmargins(table(data))
phat <- mtab[1]/mtab[3]
qhat <- 1 - phat
if(length(hyp_val) > 0) {
q <- 1-hyp_val
SE.phat <- sqrt((hyp_val*q)/n)
ts.z <- (phat - hyp_val)/SE.phat
p.val <- pnorm(ts.z)*2
if(alternative=="less") {
p.val <- pnorm(ts.z)
}
if(alternative=="greater") {
p.val <- 1 - p.val
}
}
非常感谢任何帮助。我需要基本找出如何找到样本比例。
答案 0 :(得分:0)
除了r2evans所说的内容之外,您还应该审核if
语句和pnorm
。这是对代码被截断后你想要完成的事情的猜测。
hyp_test <- function(data, hyp_val=NULL, alpha, alternative="two-sided",graph=FALSE) {
n <- sum(!is.na(data))
mtab <- addmargins(table(data))
phat <- mtab[1]/mtab[3]
qhat <- 1 - phat
q <- 1-hyp_val
SE.phat <- sqrt((hyp_val*q)/n)
ts.z <- (phat - hyp_val)/SE.phat
p.val <- ifelse(alternative=="two-sided", dnorm(ts.z)*2,ifelse(alternative=="less",1-dnorm(ts.z), dnorm(ts.z)))
if(graph==TRUE) {plot(...)}
return(p.val)
}