是否存在从svyby对象为比例创建置信区间的现有函数(在我的示例中为survey包中的二进制项的交叉表).我经常比较各组的比例,并且拥有一个可以提取置信区间的函数(使用调查函数svyciprop而不是confint)是非常方便的.下面的例子显示了我想要实现的目标.
加载数据
library(survey)
library(weights)
data(api)
apiclus1$both<-dummify(apiclus1$both)[,1]#Create dummy variable
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
Run Code Online (Sandbox Code Playgroud)
创建一个svyby对象,比较stype中变量"both"的比例
b<-svyby(~both, ~stype, dclus1, svymean)
confint(b)#This works, but svyciprop is best in other cases, especially when proportion is close to 0 or 1
svyciprop(b)#This requires that you specify each level and a design object
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个函数(例如byCI(b,method="likelihood"),它实现与confint(b)使用相同svyciprop?它基本上必须遍历svyby对象的每个级别并创建置信区间.到目前为止,我的尝试都没有成功.
可能有另一种方法,但我喜欢使用,svyby()因为它快速和直观.
我正在尝试使用 TraMineR 一次分析多个序列。我已经看过 seqdef 但我很难理解当我处理多个变量时如何创建 TraMineR 数据集。我想我正在使用类似于 Aassve 等人使用的数据集的东西。(如教程中提到的),其中每个波都有关于几个状态的信息(例如孩子、婚姻、就业)。我所有的变量都是二进制的。以下是包含三个波浪 (D、W2、W3) 和三个变量的数据集示例。
D<-data.frame(ID=c(1:4),A1=c(1,1,1,0),B1=c(0,1,0,1),C1=c(0,0,0,1))
W2<-data.frame(A2=c(0,1,1,0),B2=c(1,1,0,1),C2=c(0,1,0,1))
W3<-data.frame(A3=c(0,1,1,0),B3=c(1,1,0,1),C3=c(0,1,0,1))
L<-data.frame(D,W2,W3)
Run Code Online (Sandbox Code Playgroud)
我可能是错的,但我发现的材料一次只涉及一个变量的数据管理和分析(例如,跨几波的就业状况)。我的数据集比上面的数据集大得多,因此我无法真正手动估算这些数据,如本教程第 48 页所示。有人使用 TraMineR (或类似的软件包)处理过这种类型的数据吗?
1) 您如何将上述数据提供给 TraMineR?
2)如何计算替代成本,然后对它们进行聚类?
非常感谢
以下函数创建一个表,其中变量名称为维名称
col.table <- function(var1, var2, C=T,weights=rep(1,length(var1)), margins=TRUE,data,env=parent.frame()){
require(weights); require(Hmisc)
v1 <- deparse(substitute(var1))
v2 <- deparse(substitute(var2))
if(!missing(data)){
var1 <- data[,deparse(substitute(var1))]
var2 <- data[,deparse(substitute(var2))]
weights <- data[,deparse(substitute(weights))]
}
if (C) {
crosstab <-prop.table(xtabs(weights ~ var1 + var2,data), margin=2)
t <- cbind(crosstab, Total=prop.table(xtabs(weights ~ var1,data=data)))
t <- rbind(t,Total = colSums(t))
bu<-c(deparse(substitute(v1)), deparse(substitute(v2)))
names(dimnames(t)) <- bu
return(round(100*t,2))
}}
Run Code Online (Sandbox Code Playgroud)
一些虚拟数据
d<-data.frame(
vara =c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
varb = c(1,1,2,2,3,3,1,1,2,2,3,3,1,1,2),
varc= c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
weight= c(.5,.5,.5,.5,.5,1,1,1,1,1,2,2,2,2,2))
a<-col.table(vara,varb,data=d,weights=weight)
a
Run Code Online (Sandbox Code Playgroud)
我想返回的对象(a)来显示变量名不带引号(只是vara和varb替代"vara",并"varb"在这种情况下).有谁知道如何做到这一点?我想删除函数内的引号而不是它之外的引号.
我在使用调查包循环变量时遇到问题。假设我将变量子集与调查权重一起收集到数据框中,并且我想进行卡方检验。考虑到多次测试的问题,我仍然想测试所有独特的组合。这在 R 中通常相对简单,这里有一个很好的例子。
不幸的是,这在调查包中变得更加困难,因为项目需要位于设计对象中,而且最重要的是不支持数据集索引(至少据我所知)。我尝试将上面提到的示例改编为 svychisq,但我的所有策略都失败了。
我注意到有人在这里做了类似的事情,但大多数变量都是固定的。任何人都可以创建一个函数(可能类似于这个答案)但使用 svychisq 函数吗?不幸的是,我不知道在线提供的具有大量分类变量和复杂设计的数据集。出于演示目的,我想可以在 data(api) 中使用 dclus1,如函数帮助文件中所示,并尝试循环前 10 个变量
library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
svychisq(~sch.wide+stype, dclus1)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
更新:我真正想做的是避免指定变量名称并给出变量组合的向量。例如
MyChi2tests <- apply( combn(colnames(apiclus1[,c(2,16:17)]),2), 2, function(z) paste(z, collapse = '+'))
Run Code Online (Sandbox Code Playgroud) 考虑到以下分数和百分位数,我想在R中生成分布.
x <- 1:10
PercRank <- c(1, 7, 12, 23, 41, 62, 73, 80, 92, 99)
Run Code Online (Sandbox Code Playgroud)
PercRank = 1例如,告诉我1%的数据有一个value/score <= 1(x的第一个值).同样,PercRank = 7告诉我们有7%的数据有value/score <= 2等等.
我不知道如何找到基础分布.如果我能从pdf如此多的信息中获得有关如何获得基础分布的指导,我会很高兴.