我已经在excel中为我提供了一些非常笨拙的格式化数据,我需要对其进行重塑,使其适合在R中运行生存分析。
我将数据摘录上载到Google云端硬盘:https : //drive.google.com/open?id=1ret3bCDCYPDALQ16YBloaeopfl2-qVbp
原始数据框包含大约2100个观测值和950个变量
这是基本数据帧:
my.data<-data.frame(
ID=c( "", "","C8477","C5273","C5566"),
LR=c("2012Y","State:FL",5,6,8),
LR=c("2012Y","State:AZ",5,8,10),
LR=c("2011Y","State:FL",7,2,1)
)
my.data
# ID LR LR.1 LR.2
# 1 2012Y 2012Y 2011Y
# 2 State:FL State:AZ State:FL
# 3 C8477 5 5 7
# 4 C5273 6 8 2
# 5 C5566 8 10 1
Run Code Online (Sandbox Code Playgroud)
所有列均具有相同的名称“ LR”。我不知道以后是否会出现问题...
在第1行中给出了Year,在第2行中给出了观察的相应状态。
作为输出,我需要一些面板数据供以后的生存分析使用。
my.data<-data.frame(
ID=c("C8477","C5273","C5566"),
Year=c("2012","2012","2011"),
State=c("FL","AZ","FL"),LR=c(5,8,1)
)
my.data
# ID Year State LR
# 1 C8477 2012 FL 5
# 2 C5273 2012 AZ 8
# 3 C5566 2011 …Run Code Online (Sandbox Code Playgroud) 我需要删除包含NA的行,但是仅当它们在前(后)行(即在变量的任何数据出现之前(之后))时才会删除。这非常类似于: 如何按类别在data.table列中查找(而不是替换)前导NA,间隙和最终NA, 以及: 如何在R中按条件删除前导行和尾随行?
但是,我需要按照变量“ ID”进行分组。我将在后面的步骤中估算NA之间的数据。
尾随NA也应如此。
初始data.frame如下所示:
df1<-data.frame(ID=(rep(c("C1001","C1008","C1009","C1012"),each=17)),
Year=(rep(c(1996:2012),4)),x1=(floor(runif(68,20,75))),x2=
(floor(runif(68,1,100))))
#Introduce leading / tailing NAs
df1[1:5,3]<-NA
df1[18:23,4]<-NA
df1[35:42,4]<-NA
df1[49:51,3]<-NA
df1[66:68,3]<-NA
#introduce "gap"- NAs
set.seed(123)
df1$x1[rbinom(68,1,0.1)==1]<-NA
df1$x2[rbinom(68,1,0.1)==1]<-NA
Run Code Online (Sandbox Code Playgroud)
输出相当长。这是为了在“空白” NA和“领先/尾随” NA之间做出适当的区分
head(df1,10)
ID Year x1 x2
1 C1001 1996 NA 40
2 C1001 1997 NA 88
3 C1001 1998 NA 37
4 C1001 1999 NA 29
5 C1001 2000 NA 17
6 C1001 2001 42 18
7 C1001 2002 20 48
8 C1001 2003 30 26
9 C1001 2004 66 22 …Run Code Online (Sandbox Code Playgroud) 我正在努力使用小鼠进行插补。主要目标是估算 NA(如果可能,按组)。由于示例有点大,可以在此处简单发布,因此可以下载:https : //drive.google.com/open?id=1InGJ_M7r5jwQZZRdXBO1MEbKB48gafbP
我的问题是:
一般来说,相关数据有多大的问题?我该怎么做才能仍然估算数据?数据是实证研究问题的一部分,我还不知道要包含哪些变量,因此最好暂时保留尽可能多的变量。
什么方法比 "cart" 和 "pmm" 更合适?我不想简单地估算平均值/中位数....
我可以通过“ID”以某种方式估算数据吗
调试技巧?
这是我的代码
#Start
require(mice)
require(Hmisc)
'setwd(...)
'test.df<-read.csv(...)
str(test.df)
Run Code Online (Sandbox Code Playgroud)
检查相关性:前 2 列包含标识符和年份,因此无需查看。
test.df.rcorr<-rcorr(as.matrix(test.df[,-c(1:2)]))
test.df.coeff<-test.df.rcorr$r
test.df.coeff<-corrplot(test.df.coeff)
Run Code Online (Sandbox Code Playgroud)
可以看出,数据中有一些很强的相关性。对于一个简单的任务,省略所有具有强相关性的列。
#Simple example
test.df2<-test.df[,-c(4,7,10,11)]
test.df2
sum(is.na(test.df2))
Run Code Online (Sandbox Code Playgroud)
现在,让我们在不指定方法的情况下估算 test.df2:
imputation.df2<-mice(test.df2, m=1, seed=123456)
imputation.df2$method
test.df2.imp<-mice::complete(imputation.df2)
Warning message:
Number of logged events: 1
sum(is.na(test.df2.imp))
Run Code Online (Sandbox Code Playgroud)
可以看出,所有的 NA 都被估算了。并且使用的方法只是“pmm”。
使用完整数据集,我几乎立即收到以下错误消息:
imputation.df<-mice(test.df,m=1,seed = 66666)
iter imp variable
1 1 x1Error in solve.default(xtx + diag(pen)) :
system is computationally singular: reciprocal condition number = 1.49712e-16
Run Code Online (Sandbox Code Playgroud)
这仅仅是由于数据中的相关性吗?
最后,我的 ID 插补代码,在显示此错误之前运行了更长的时间:
test123<- …Run Code Online (Sandbox Code Playgroud) 我有一个 Cox 回归,它采用strata()和tt()。
是否有任何软件包可以帮助以表格格式生成美观、信息丰富的结果输出?虽然ggforest()处理tt()但不处理strata()
我正在寻找除打印之外的任何方法来产生合适的输出summary(coxph)。无论是 Latex 还是 HTML。
到目前为止,唯一的解决方案是自己构建表格,但这看起来并没有足够的吸引力,无法放入论文中......
这是虚拟数据集:
set.seed(132456)
'dummy survival data'
df<-data.frame(id=seq(1,1000,1), event=rep(0,1000),time=floor(runif(1000,7,10)),group=floor(runif(1000,0,2)),
var1 = rnorm(1000, 1, 3), var2 = seq(1,1000))
'set events for a few random subjects'
id_list<-c(as.numeric(floor(runif(500,1,1000))))
df$event[df$id %in% id_list]<-1
'set survival times for events'
t_list<-c(as.numeric(floor(runif(394,1,5))))
df2<-df[df$event==1,]
df2$time<-t_list
'combine data'
df<-rbind(df,df2)
summary(df)
'Set up surfit '
require(survminer)
KM_fit<-coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df)
Run Code Online (Sandbox Code Playgroud)
ggforest()返回以下错误:
> ggforest(KM_fit)
Error in `[.data.frame`(data, …Run Code Online (Sandbox Code Playgroud) r ×4
debugging ×1
delete-row ×1
group-by ×1
html ×1
imputation ×1
missing-data ×1
na ×1
r-markdown ×1
r-mice ×1
reshape ×1
stack ×1