小编may*_*bra的帖子

svyby比例的置信区间

是否存在从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()因为它快速和直观.

r survey

10
推荐指数
1
解决办法
3578
查看次数

Traminer 中的多个事件

我正在尝试使用 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)如何计算替代成本,然后对它们进行聚类?

非常感谢

r traminer

5
推荐指数
1
解决办法
1047
查看次数

取消引用维度名称

以下函数创建一个表,其中变量名称为维名称

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)来显示变量名不带引号(只是varavarb替代"vara",并"varb"在这种情况下).有谁知道如何做到这一点?我想删除函数内的引号而不是它之外的引号.

r

4
推荐指数
1
解决办法
7941
查看次数

R 在调查包中循环

我在使用调查包循环变量时遇到问题。假设我将变量子集与调查权重一起收集到数据框中,并且我想进行卡方检验。考虑到多次测试的问题,我仍然想测试所有独特的组合。这在 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 survey

1
推荐指数
1
解决办法
2028
查看次数

根据百分位数排列生成分布

考虑到以下分数和百分位数,我想在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如此多的信息中获得有关如何获得基础分布的指导,我会很高兴.

statistics r

-2
推荐指数
1
解决办法
6152
查看次数

标签 统计

r ×5

survey ×2

statistics ×1

traminer ×1