R调查置信区间图

时间:2012-12-29 17:42:53

标签: r survey

与barplot和dotchart(来自调查包)类似,barNest(plotrix包)旨在为动态的svyby对象生成绘图,但也绘制了置信区间。但是,barNest.svymean不再处理调查数据。另一种方法是在调查绘图功能点图

之上绘制置信区间
library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
#just one variable        
a<-svyby(~api99, ~stype, dclus1, svymean)
#several variables
b<-svyby(~api99+api00, ~stype, dclus1, svymean)
dotchart(b)

虽然我不确定你是怎么做到的。如果有人这样做,那么将它自动化是非常好的(通过创建一些适用于不同大小的svyby对象的代码),甚至可以在dotchart.svystat {survey}中进行自动化。它会使组之间的图形比较更容易!标准错误可以从b或使用SE(b)中提取。

2 个答案:

答案 0 :(得分:2)

正确,所以你试图在一个不知道如何处理该类的函数(barNest)中使用对象类(svyby),因为调查包和plotrix包不能很好地一起播放。幸运的是,svyby对象的dotchart方法不是太多代码,所以你可能只想修改它..

    # run your code above, then review the dotchart method for svyby objects:
    getS3method( 'dotchart' , 'svyby' )

..从中可以了解到,在转换{{1}中包含的数据之后,除了调用原始的dotchart函数(即,不使用svyby对象,只是常规的统计信息集合)之外,它实际上并不多。对象到矩阵。现在你剩下要做的就是增加一个置信区间线。

通过运行

可以轻松获得置信区间宽度(比使用b更容易)
SE(b)

您可以提取这些统计信息以构建自己的 confint( b ) barNest来电吗?

如果将置信区间放在点图上很重要,那么主要障碍就是正确地击中y坐标。在点图默认方法中挖掘..

plotCI

..你可以看到如何计算y坐标。削减到必需品,我想你可以使用它:

    getS3method( 'dotchart' , 'default' )

但这显然是笨重的,因为允许的置信区间可以离开屏幕。忽略 # calculate the distinct groups within the `svyby` object groups <- as.numeric( as.factor( attr( b , 'row.names' ) ) ) # calculate the distinct statistics within the `svyby` object nstats <- attr( b , 'svyby' )$nstats # calculate the total number of confidence intervals you need to add n <- length( groups ) * nstats # calculate the offset sizes offset <- cumsum(c(0, diff(groups) != 0)) # find the exact y coordinates for each dot in the dotchart # and leave two spaces between each group y <- 1L:n + sort( rep( 2 * offset , nstats ) ) # find the confidence interval positions ci.pos <- rep( groups , each = nstats ) + c( 0 , length( groups ) ) # extract the confidence intervals x <- confint( b )[ ci.pos , ] # add the y coordinates to a new line data object ld <- data.frame( x ) # loop through each dot in the dotchart.. for ( i in seq_len( nrow( ld ) ) ){ # add the CI lines to the current plot lines( ld[ i , 1:2 ] , rep( y[i] , 2 ) ) } 类甚至整个svyby包一秒,找到我们survey的实现,它可以很好地格式化置信区间,我们可能能够为您提供更多帮助。我不认为dotchart包是您问题的根源:)

答案 1 :(得分:0)

为安东尼的最后一位(来自ld&lt; -data.frame(x))添加一个新的圆点图(最小值和最大值)解决了他概述的问题。

ld <- data.frame( x )
dotchart(b,xlim=c(min(ld),max(ld)))#<-added
for ( i in seq_len( nrow( ld ) ) ){  
  lines( ld[ i , 1:2 ] , rep( y[i] , 2 ) )
}

然而我同意安东尼的观点:情节不太好看。非常感谢Anthony分享他的知识和编程技巧。置信区间也看起来不对称(可能是正确的),特别是对于M api00。有没有人将此与其他软件进行比较? confit应该指定df(自由度)吗?