在R中提取行和列

时间:2016-05-19 05:37:10

标签: r statistics

我必须在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
       }
     } 

非常感谢任何帮助。我需要基本找出如何找到样本比例。

1 个答案:

答案 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)
}