R语言—自定义函数求置信区间的操作

看代码吧~

#求单正态均值mu的置信区间
#参数依次为置信水平alpha,正态样本x,已知总体方差(默认为未知)
mu <- function(alpha,x,sigma=NA){
  n <- length(x)
  meanx <- mean(x)
  if(is.na(sigma)){
    t1 <- qt(1-alpha/2,n-1)
    t2 <- qt(1-alpha,n-1)
    mu11 <- meanx - t1*sqrt(sum((x-meanx)^2)/(n-1))/sqrt(n)
    mu12 <- meanx + t1*sqrt(sum((x-meanx)^2)/(n-1))/sqrt(n)
    mu21 <- meanx + t2*sqrt(sum((x-meanx)^2)/(n-1))/sqrt(n)
    mu22 <- meanx - t2*sqrt(sum((x-meanx)^2)/(n-1))/sqrt(n)
  }
  else{
    u1 <- qnorm(1-alpha/2,0,1)
    u2 <- qnorm(1-alpha,0,1)
    mu11 <- meanx - u1*sigma/sqrt(n)
    mu12 <- meanx + u1*sigma/sqrt(n)
    mu21 <- meanx + u2*sigma/sqrt(n)
    mu22 <- meanx - u2*sigma/sqrt(n)
  }
  string1 <- paste('以1-',alpha,'为置信水平的mu双侧置信区间为:[',mu11,', ',mu12,']。',sep='')
  string2 <- paste('以1-',alpha,'为置信水平的mu单侧置信区间上限为:',mu21,'。',sep='')
  string3 <- paste('以1-',alpha,'为置信水平的mu单侧置信区间下限为:',mu22,'。',sep='')
  string <- data.frame(Confidence_Interval=c(string1,string2,string3))
  return(string)
}
#求单正态方差sigma的置信区间
#参数依次为置信水平alpha,正态样本x,已知总体均值(默认为未知)
sigma <- function(alpha,x,mu=NA){
  n <- length(x)
  if(is.na(mu)){
    meanx <- mean(x)
    chisq11 <- qchisq(1-alpha/2,n-1)
    chisq12 <- qchisq(alpha/2,n-1)
    chisq21 <- qchisq(alpha,n-1)
    chisq22 <- qchisq(1-alpha,n-1)
    sigma11 <- sqrt(sum((x-meanx)^2)/chisq11)
    sigma12 <- sqrt(sum((x-meanx)^2)/chisq12)
    sigma21 <- sqrt(sum((x-meanx)^2)/chisq21)
    sigma22 <- sqrt(sum((x-meanx)^2)/chisq22)
  }
  else{
    chisq11 <- qchisq(1-alpha/2,n)
    chisq12 <- qchisq(alpha/2,n)
    chisq21 <- qchisq(alpha,n)
    chisq22 <- qchisq(1-alpha,n)
    sigma11 <- sqrt(sum((x-mu)^2)/chisq11)
    sigma12 <- sqrt(sum((x-mu)^2)/chisq12)
    sigma21 <- sqrt(sum((x-mu)^2)/chisq21)
    sigma22 <- sqrt(sum((x-mu)^2)/chisq22)
  }
  string1 <- paste('以1-',alpha,'为置信水平的sigma双侧置信区间为:[',sigma11,', ',sigma12,']。',sep='')
  string2 <- paste('以1-',alpha,'为置信水平的sigma单侧置信区间上限为:',sigma21,'。',sep='')
  string3 <- paste('以1-',alpha,'为置信水平的sigma单侧置信区间下限为:',sigma22,'。',sep='')
  string <- data.frame(Confidence_Interval=c(string1,string2,string3))
  return(string)
}
#求两个正态均值差(mux-muy)的置信区间
#参数依次为置信水平alpha,正态样本x,正态样本y,
#已知x总体方差sigmax(默认为未知),已知y总体方差sigmay(默认为未知)
mux_muy <- function(alpha,x,y,sigmax=NA,sigmay=NA){
  if(is.na(sigmax)|is.na(sigmay)){
    meanx <- mean(x)
    meany <- mean(y)
    m <- length(x)
    n <- length(y)
    sx <- sqrt(sum((x-meanx)^2)/(m-1))
    sy <- sqrt(sum((y-meany)^2)/(n-1))
    sw <- sqrt((m-1)*sx^2/(m+n-2)+(n-1)*sy^2/(m+n-2))
    mu11 <- (meanx-meany)+qt(1-alpha/2,m+n-2)*sw*sqrt(1/m+1/n)
    mu11 <- (meanx-meany)-qt(1-alpha/2,m+n-2)*sw*sqrt(1/m+1/n)
  }
  else{
    meanx <- mean(x)
    meany <- mean(y)
    m <- length(x)
    n <- length(y)
    sx <- sqrt(sum((x-mux)^2)/m)
    sy <- sqrt(sum((y-muy)^2)/n)
    mu11 <- (meanx-meany)+qt(1-alpha/2,m+n)*sw*sqrt(1/m+1/n)
    mu11 <- (meanx-meany)-qt(1-alpha/2,m+n)*sw*sqrt(1/m+1/n)
  }
  string1 <- paste('以1-',alpha,'为置信水平的mux-muy双侧置信区间为:[',mu11,', ',mu12,']。',sep='')
  return(string1)
}
#求两个正态标准差比sigmax/sigmay的置信区间
#参数依次为置信水平alpha,正态样本x,正态样本y,
#已知x总体均值mux(默认为未知),已知y总体均值muy(默认为未知)
sigmax_sigmay <- function(alpha,x,y,mux=NA,muy=NA){
  alpha <- alpha
  mux <- mux
  muy <- muy
  if(is.na(mux)|is.na(muy)){
    meanx <- mean(x)
    m <- length(x)
    meany <- mean(y)
    n <- length(y)
    F1 <- qf(1-alpha/2,m-1,n-1)
    F2 <- qf(alpha/2,m-1,n-1)
    sigma11 <- 1/F1*sum((x-meanx)^2)*(n-1)/sum((y-meany)^2)/(m-1)
    sigma12 <- 1/F2*sum((x-meanx)^2)*(n-1)/sum((y-meany)^2)/(m-1)
  }
  else{
    m <- length(x)
    n <- length(y)
    F1 <- qf(1-alpha/2,m,n)
    F2 <- qf(alpha/2,m,n)
    sigma11 <- 1/F1*sum((x-mux)^2)*n/sum((y-muy)^2)/m
    sigma12 <- 1/F2*sum((x-mux)^2)*n/sum((y-muy)^2)/m
  }
  string1 <- paste('以1-',alpha,'为置信水平的sigmax-sigmay双侧置信区间为:[',sigma11,', ',sigma12,']。',sep='')
  return(string1)
}

选修课作业,自己写函数求单正态样本均值、方差置信区间,两个正态样本均值差、方差比的置信区间。

求解时正态方差和均值默认为未知,函数具体样子可以参考题图。

本来是想输出一段话,但是我不知道怎么换行,所以将就着看吧。

补充:R语言【估计单侧置信区间】

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言中的fivenum与quantile()函数算法详解

    fivenum()函数: 返回五个数据:最小值.下四分位数数.中位数.上四分位数.最大值 对于奇数个数字=5,fivenum()先排序,依次返回最小值.下四分位数.中位数.上四分位数.最大值 > fivenum(c(1,12,40,23,13)) [1] 1 12 13 23 40 对于奇数个数字>5,fivenum()先排序,我们可以求取最小值,最大值,中位数.在排序中,最小值与中位数中间,若为奇数,取其中位数为下四分位数,若为偶数,取最中间两个数的平均值为下四分位数:在排序中,中位数与最大

  • R语言中c()函数与paste()函数的区别说明

    c()函数:将括号中的元素连接起来,并不创建向量 paste()函数:连接括号中的元素 例如 c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为"1 2" "1 3" "1 4" c(2, "and"),结果为"2" "and" paste(2, "and"),结果为"2 and" 补充:R语言中paste函数的参数sep

  • R语言中cut()函数的用法说明

    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码. 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数字向量,给出x被切割的间隔的个数. breaks采用fivenum():返回五个数据:最小值.下四分位数.中位数.上四分位数.最大值. labels为区间数,打标签 ordered_result 逻辑结果应该是一个有序的因素吗? 先用fivenum求出5个数,再用labels为每两个数之间,贴标签,采用(]的区间,

  • R语言-生成频数表和列联表crosstable函数介绍

    列联表crosstable 列联表不仅可以用来做简单的描述性统计,还可以在机器学习中用来比较识别正确率,FPR,TPR等等数据,以便我们比较不同的ML模型 or 调参. 2x2列联表一般长下面这样: Total Observations in Table: 143 | test_cancer$diagnosis lda.class | 0 | 1 | Row Total | -------------|-----------|-----------|-----------| 0 | 82 | 1

  • R语言中if(){}else{}语句和ifelse()函数的区别详解

    首先看看定义: # if statement if(cond) expr if(cond) cons.expr else alt.expr # ifelse function ifelse(test, yes, no) 这两个函数(R语言中都是函数)相同的地方都是根据条件返回对应的值. 区别在于: if语句的条件是个TRUE/FALSE值,如果是个长度>1的逻辑向量,只判断第一个TRUE/FALSE值:而ifelse是长度任意的逻辑向量,返回根据逻辑向量对应对的yes/no值组合的新向量 ife

  • R语言-summary()函数的用法解读

    summary():获取描述性统计量,可以提供最小值.最大值.四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等. 结果解读如下: 1. 调用:Call lm(formula = DstValue ~ Month + RecentVal1 + RecentVal4 + RecentVal6 + RecentVal8 + RecentVal12, data = trainData) 当创建模型时,以上代码表明lm是如何被调用的. 2. 残差统计量:Residuals Min 1Q M

  • R语言-计算平均值不同函数的区别说明

    函数mean > mean(x) > num x1 x2 x3 10378050.50 89.45 81.18 80.45 此时对编号也求了平均值,不过往往我们只想对后面的数据求平均值.而且此时会出现一个警告.因为x是一个数据框,不是数值,所以不能直接用mean()函数. 函数colMeans() > colMeans(x) num x1 x2 x3 10378050.50 89.45 81.18 80.45 > colMeans(x)[c("x1","

  • R语言拼接字符串_paste的用法说明

    R中自带的字符串连接的函数是paste. 先来看一下官方文档里对paste用法的解释: 基本格式: paste (-, sep = " ", collapse = NULL) 其中,-表示对象,可以有多个,中间用逗号隔开. sep表示分隔符,默认为空格. collapse表示如果不指定值,那么函数paste的返回值是-的对象之间通过sep指定的分隔符连接后得到的一个字符型向量:如果为其指定了特定的值,那么自变量连接后的字符型向量会再被连接成一个字符串,之间通过collapse的值分隔.

  • R语言—自定义函数求置信区间的操作

    看代码吧~ #求单正态均值mu的置信区间 #参数依次为置信水平alpha,正态样本x,已知总体方差(默认为未知) mu <- function(alpha,x,sigma=NA){ n <- length(x) meanx <- mean(x) if(is.na(sigma)){ t1 <- qt(1-alpha/2,n-1) t2 <- qt(1-alpha,n-1) mu11 <- meanx - t1*sqrt(sum((x-meanx)^2)/(n-1))/sq

  • C语言自定义函数的实现

    函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收.接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数. 将代码段封装成函数的过程叫做函数定义. C语言无参函数的定义 如果函数不接收用户传递的数据,那么定义时可以不带参数.如下所示: dataType functionName(){ //body } dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int.float.char

  • C++通过自定义函数求一元二次方程的根

    本文实例讲述了C++通过自定义函数求一元二次方程的根.分享给大家供大家参考,具体如下: /* * 作 者: 刘同宾 * 完成日期:2012 年 11 月 24 日 * 版 本 号:v1.0 * 输入描述: * 问题描述: 求一元二次方程的根.定义函数 * 程序输出: * 问题分析:略 * 算法设计:略 */ #include<iostream> #include<cmath> using namespace std; double x,x1,x2,t; //定义全局变量 void

  • R语言seq()函数的调用方法

    看到有很多读者浏览了这篇文章,心里很是开心,为了能够更好地帮助大家,决定再修改一下,帮助大家更好地理解. --------修改于:2018年4月28日 为了方便大家在开发环境中直接实验测试代码,下面,我将说明和函数的用法全部用英文给出(避免乱码),并加以注释,希望能够对大家有所帮助! 首先,我们来看一个seq()函数应用的实例! x <- seq(0, 10, by = 0.01) y <- sin(x) plot(y) 下面,我们来看函数的主要使用方法! 注意:在本文调用函数时,均采用写出入

  • 用R语言绘制函数曲线图

    函数曲线图是研究函数的重要工具. R 中 curve() 函数可以绘制函数的图像,代码格式如下: curve(expr, from = NULL, to = NULL, n = 101, add = FALSE, type = "l", xname = "x", xlab = xname, ylab = NULL, log = NULL, xlim = NULL, -) # S3 函数的方法 plot(x, y = 0, to = 1, from = y, xlim

  • 详解R语言plot函数参数合集

    最近用R语言画图,plot 函数是用的最多的函数,而他的参数非常繁多,由此总结一下,以供后续方便查阅. plot(x, y = NULL, type = "p", xlim = NULL, ylim = NULL, log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ann = par("ann"), axes = TRUE, frame.plot = axes, panel.

  • R语言strsplit函数用法深入详解

    1.R语言strsplit用于分割字符串 创建测试数据 > test <- "aa bb cc dd ee ff" ##创建测试数据 > test [1] "aa bb cc dd ee ff" > class(test) ## 测试数据为字符 [1] "character" 2.按照指定分隔符拆分字符串 > a <- strsplit(test,split = " ") ##制动分隔符为空

  • R语言Legend函数深入详解

    legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black", lty, lwd, pch, angle = 45, density = NULL, bty = "o", bg = par("bg"), box.lwd = par("lwd"), box.lty = par("lty"), box.

  • R语言boxplot函数深入讲解

    箱线图简介 箱线图又称箱形图或盒须图,该图是由5个特征值绘制而成的图形. 5个特征值是变量的最大值.最小值.中位数.第1四分位数和第3四分位数. 连接两个分位数画出一个箱子,箱子用中位数分割,把两个极值点与箱子用线条连接,即成箱线图. R中绘制箱线图的函数boxplot (1)基本用法 boxplot(x, ...) (2)公式形式的用法 boxplot(formula, data = NULL, ..., subset, na.action = NULL, drop = FALSE, sep

  • R语言which函数介绍及Rcpp改写详解

    目录 引言 which 函数的介绍 which函数的一些小例子 which函数的改进以及时间对比 总结 引言 首先来介绍一下R语言which函数的作用:which函数在向量.矩阵.数据框,列表.因子这些数据结构中有这重要的作用,可以查找特定的元素返回其在数据中的索引,因此非常方便操作数据. which 函数的介绍 which函数中的参数: function (x, arr.ind = FALSE, useNames = TRUE) which函数的源码: which <- function(x,

随机推荐