gpt4 book ai didi

r - 在 R 中使用因果包

转载 作者:行者123 更新时间:2023-12-04 07:28:54 27 4
gpt4 key购买 nike

我正在使用一个名为“因果重量”的 r 包,更具体地说是“duntreatDML”
该示例可在此处获得(https://github.com/cran/causalweight/blob/master/R/JC.R)
我正在使用不同的数据集,但使用相同的包:
我的数据的演示版:

id <- c('1', '2', '3')
ac <- c(23, 41, 32)
ff <- c(1,0,1)
ac1 <- c(34, 21, 11)
air <- c(10,20,20)
d1 <- c(1,0,1)
d2 <- c(1,1,0)
y2 <- c(100,200,300)

mydata <- data.frame(id, ac,ff,ac1,air,d1,d2,y2)
x0 = mydata[,3:4];x1 = mydata[,5:6]

d1 = mydata[,7];d2 = mydata[,8]

y2=mydata[,9]

output=dyntreatDML(y2=y2,d1=d1,d2=d2,x0=x0,x1=x1,
d1treat=1,d2treat=1,d1control=0,d2control=0)
我收到以下错误:
Error in split.default(sample(1:N), rep(1:V, length = N)) : 
group length is 0 but data length > 0

我无法理解上述错误的含义,因此我可以修复它。
my actual dataset : https://github.com/juisen/dyntreat/blob/main/for_dyn.csv                                                               

mydata4<- read.csv(file = "D:/New folder (2)/for_dyn.csv")
head(mydata4)

x0 = mydata4[,5:8];x1 = mydata4[,11:13]

d1 = mydata4[,19];d2 = mydata4[,20]

y2=mydata4[,14]



output4 =dyntreatDML(
y2=y2,
d1=d1,
d2=d1,
x0=x0,
x1=x1,
fewsplits = TRUE,
normalized = TRUE
)
cat("dynamic ATE: ",round(c(output4$effect),3),", standard error: ",
round(c(output4$se),3), ", p-value: ",round(c(output4$pval),3)) ```


最佳答案

编辑
感谢您上传您的实际数据集 - 它使故障排除变得更加容易。我相信问题源于“d1”和“d2”变量。在您的数据集中,这两个变量的每个观察值都为零。如果您为这两个变量(即零和一)创建假数据,则运行在我的系统上没有错误地完成(如果您仍然遇到错误,请告诉我)。
另一个潜在问题是名为“”的列 - 我不确定如何计算此变量(第一个/最后一个),因为它没有名称,因此您选择的变量可能会减少一个。为了防止这成为一个潜在的问题,将该变量重命名为“rownames”或其他名称:

library(causalweight)
library(naniar)

# Load the data
mydata4 <- read.csv("for_dyn.csv", check.names = FALSE)

# Rename the potentially-problematic variable `""`
colnames(mydata4)[1] <- "rownumber"

# Check for missing values
naniar::any_miss(mydata4)

# Select your variables
x0 = mydata4[,4:7]
x1 = mydata4[,10:12]

# Create fake data (either "0" or "1") for these two variables
d1 = sample(x = c(0,1), size = nrow(mydata4), replace = TRUE)
d2 = sample(x = c(0,1), size = nrow(mydata4), replace = TRUE)

y2 = mydata4[,13]

# Run the function
output=dyntreatDML(y2=y2, d1=d1, d2=d2, x0=x0, x1=x1, fewsplits = TRUE, normalized = TRUE)
cat("dynamic ATE: ",round(c(output$effect),3),", standard error: ",
round(c(output$se),3), ", p-value: ",round(c(output$pval),3))
如果完成且没有错误,解决方案是从您的实际数据集中选择具有离散、二项式结果的变量作为您的 d1/d2 值,以便将其拆分为训练/测试分区。
--
原始评论
澄清一下:当您从小插图运行代码时,您是否收到“split.default 中的错误”错误?
例如。
#install.packages("causalweight")
library(causalweight)
data(JC)

x0=JC[,2:29]
x1=JC[,30:36]
d1=JC[,37]
d2=JC[,38]
y2=JC[,44]
output=dyntreatDML(y2=y2, d1=d1, d2=d2, x0=x0, x1=x1)
cat("dynamic ATE: ",round(c(output$effect),3),", standard error: ",
round(c(output$se),3), ", p-value: ",round(c(output$pval),3))
output$ntrimmed
你能发布你的数据集来帮助我们解决问题吗?或者你能做一个 minimal reproducible example使我们能够复制错误?
看着 source code ,问题可能出在对 hddyntreat function 的调用上。在第 75 行。此函数使用交叉拟合程序将数据拆分为训练/测试分区。如果您的数据集中没有足够的样本,或者您的数据集不平衡,这可能会导致您看到的错误。如果无法重现该问题,我无法确定,但我的猜测是您的数据集不符合函数所需的“标准”。

关于r - 在 R 中使用因果包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68061226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com