对,所以您尝试在不知道如何处理该类的函数(barNest)中使用对象类(svyby),因为调查包和 plotrix 包不能很好地配合使用。幸运的是 svyby 对象的 dotchart 方法代码不多,所以你可能只想修改它..
# run your code above, then review the dotchart method for svyby objects:
getS3method( 'dotchart' , 'svyby' )
b
..从中您可以了解到,在将对象中包含的数据转换为矩阵之后,除了调用原始 dotchart 函数(即不使用 svyby 对象,只是一个常规的统计数据集合)之外,它实际上并没有太多。现在你剩下要做的就是添加一条置信区间线。
置信区间宽度很容易SE(b)
通过运行获得(比使用更容易)
confint( b )
你能提取这些统计数据来构建你自己的barNest
或plotCI
调用吗?
如果将置信区间放在点图上很重要,那么主要障碍是正确地达到 y 坐标。在dotchart默认方法中挖掘..
getS3method( 'dotchart' , 'default' )
..你可以看到y坐标是如何计算的。减少到只是必需品,我认为你可以使用这个:
# 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
很好地实现了该格式的置信区间,我们也许可以为您提供更多帮助。我不认为survey
包裹是你问题的根源:)