我正在使用Amelia来增加错误数据的估算。由于交互将在我的分析中进行,我需要在估算缺失值时包含它们,而Amelia不会自动为我做这些。因此,我计算了18个交互项,并让Amelia生成多次估算的数据。然而,推算的互动术语并不一定与其组成术语一致,后者也缺少Amelia推测的数据。因此,as suggested in another post,为了运行我的分析,我需要根据完整值和估算值计算新的交互项。 Amelia的开发人员建议通过' transform'来实现这一点,如果应用于整个Amelia对象,则可以在所有的估算中使用。
所以从本质上讲,我的问题是这个。我有一个数据帧,df和两个变量向量:
a <- c("var1","var2","var3")
b <- c("varA","varB","varC","varD","varE","varF")
我可以使用&#39; transform&#39;手动创建18个互动术语,如:
df <- transform(df, var1.A = var1*varA)
df <- transform(df, var2.A = var2*varA)
df <- transform(df, var1.B = var1*varB)
df <- transform(df, var2.B = var1*varB)
依此类推。但是,我宁愿使用&#39; apply&#39;家人一气呵成,避免错误。
有任何建议吗?
答案 0 :(得分:0)
目前尚不清楚“Amelia”会解析哪些功能。一个选项是创建一个将在for
循环中解析的表达式,并将输出分配给初始对象'df'
#create combination of variables as a 2 column dataset
ab <- expand.grid(a, b, stringsAsFactors = FALSE)
#create the column names of the new columns
nm1 <- sub("\\.var", ".", do.call(paste, c(ab, sep=".")))
#create a pasted expression
ab1 <- sprintf("transform(df, %s = %s*%s)", nm1, ab[,1], ab[,2])
#evaluate the expression within for loop and assign it back to 'df'
for(i in seq_along(ab1)) df <- eval(parse(text = ab1[i]))
-output
df
# var1 var2 var3 varA varB varC varD varE varF var1.A var2.A var3.A var1.B var2.B var3.B var1.C var2.C var3.C var1.D var2.D var3.D var1.E var2.E
#1 3 9 6 9 1 7 3 2 5 27 81 54 3 9 6 21 63 42 9 27 18 6 18
#2 3 3 4 2 5 1 3 7 4 6 6 8 15 15 20 3 3 4 9 9 12 21 21
#3 7 7 7 1 7 6 4 6 3 7 7 7 49 49 49 42 42 42 28 28 28 42 42
#4 5 8 7 5 2 6 2 7 2 25 40 35 10 16 14 30 48 42 10 16 14 35 56
#5 6 3 3 2 3 1 9 9 1 12 6 6 18 9 9 6 3 3 54 27 27 54 27
# var3.E var1.F var2.F var3.F
#1 12 15 45 30
#2 28 12 12 16
#3 42 21 21 21
#4 49 10 16 14
#5 27 6 3 3
set.seed(24)
df <- as.data.frame(matrix(sample(1:9, 5 * 9, replace = TRUE),
5, 9, dimnames = list(NULL, c(a, b))))