与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)中提取。
答案 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(自由度)吗?