2016-05-19 25 views
0

我必须在R中编写一个样本比例Z测试函数。我需要将样本比例作为第一个因子级别中数据的比例。 例如,在R中提取行和列

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

表(数据)显示1×2表 –

+1

通常,[最小](http://stackoverflow.com/help/mcve)和[可再现的(http://stackoverflow.com/questions/5963269/如何使一个伟大的可重现的例子)代码非常有帮助和赞赏。在这种情况下,尽管你提供了代码,但它是不完整的(你的'ifelse'挂起来......)。你的错误是因为这个。也许阅读'?ifelse'会帮助你看到一个问题? – r2evans

回答

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) 
} 
+0

非常丰富,谢谢! –