synthetic_control data

本文介绍了UCI机器学习库中的合成控制数据集,该数据集主要用于时间序列分析和聚类算法的研究与验证。数据集中包含了600个样本,每个样本有56个特征值,这些特征值模拟了工业过程中的设备行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看地址:http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data.html 


 数据下载地址:   http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data   



# 1. 数据准备 data <- readxl::read_excel("C:\\Users\\ZhuSL\\Desktop\\罗\\PM2.5第二类.xlsx", sheet = "99") %>% mutate( PM2.5 = as.numeric(PM2.5), date = as.Date(date), treated = ifelse(encodings == 99 & date >= "2017-01-01", 1, 0) ) %>% filter( (year == 2016 & month >= 4) | (year == 2017 & month <= 6) ) # 2. 增强合成控制分析 syn <- augsynth( PM2.5 ~ treated, unit = encodings, time = date, data = data, progfunc = "ridge", scm = TRUE ) # 3. 可视化优化 plot_object <- plot(syn, inf_type = "jackknife+") + #ggtitle("PM2.5浓度合成控制分析") + scale_x_date( date_breaks = "3 months", date_labels = "%Y-%m", expand = c(0, 0) ) + theme_minimal() + theme( axis.title = element_blank(), plot.title = element_text(hjust = 0.5) ) syn_summary <- summary(syn) # 结果保存到变量 plot(syn_summary, type = "path") # 4. 保存图片 ggsave("C:\\Users\\ZhuSL\\Desktop\\罗\\synthetic_control_plot.png", plot_object, width = 10, height = 6, dpi = 300) # 保存完整模型对象 saveRDS(syn, "C:\\Users\\ZhuSL\\Desktop\\罗\\synthetic_control_model.rds") # 数据去重与行名设置 data <- data[!duplicated(data$encodings), ] rownames(weights) <- data$encodings[-1] # 按绝对值排序并提取前5行 sorted_weights <- weights[order(-abs(weights[, 1])), , drop = FALSE] # 导出到Excel(以 writexl 为例) write_xlsx( as.data.frame(sorted_weights), path = "权重.xlsx" ) # 创建Excel工作簿 wb <- createWorkbook() # 添加第一个工作表:syn_summary$att addWorksheet(wb, sheetName = "ATT_TimeSeries") # 工作表1名称 writeData( wb, sheet = "ATT_TimeSeries", x = syn_summary$att, rowNames = TRUE # 保留行名(日期) ) # 添加第二个工作表:syn_summary$average_att addWorksheet(wb, sheetName = "Average_ATT") # 工作表2名称 writeData( wb, sheet = "Average_ATT", x = syn_summary$average_att, rowNames = FALSE # 无行名(单行数据) ) # 保存Excel文件 saveWorkbook(wb, file = "C:\\Users\\ZhuSL\\Desktop\\罗\\syn_summary_results.xlsx", overwrite = TRUE) 整理代码
最新发布
03-25
<think>嗯,用户给了一段R代码,看起来是关于合成控制法的分析,特别是使用augsynth包来处理PM2.5的数据。用户的要求是整理这段代码,可能需要检查代码的结构、优化可读性,或者解决潜在的问题。首先,我需要仔细阅读代码,理解每一部分的功能,然后找出可能的问题或改进点。 首先看数据准备部分。用户用readxl读取Excel文件,然后进行mutate和filter。注意到在mutate中,treated是用encodings == 99来判断,并且日期从2017-01-01开始。但encodings是地区编码吗?可能这里是想将特定地区在某个时间点之后设为处理组。不过,encodings是数值型还是字符型?如果encodings是数值,那比较没问题,但如果是字符,可能需要用引号。不过代码里写的是encodings == 99,可能没问题。 接下来filter部分筛选了2016年4月及以后和2017年6月及以前的数据。这个时间范围是否正确?可能用户想分析政策干预前后的效果,时间窗口选的是干预前后各约一年?不过具体时间范围可能需要根据研究设计确认,但代码本身没有问题。 然后是增强合成控制分析,使用augsynth函数。参数是否正确?PM2.5 ~ treated,这里treated是处理变量,unit是encodings,time是date。数据是data,progfunc选的是ridge,scm=TRUE。这部分可能需要确认是否参数设置合理,比如是否应该包括其他协变量,但用户提供的代码可能已经满足需求。 可视化部分用plot函数,并调整了主题和日期格式。不过ggtitle被注释掉了,可能用户暂时不需要标题。scale_x_date的expand参数设为c(0,0)可能会去掉两端的空白,但需要确认图形显示是否合适。保存图片时,路径是否正确?用户桌面路径可能存在权限问题,但通常没问题。 保存模型对象到RDS,这部分没问题。数据去重部分,data去重后设置行名,但weights变量可能来自之前的合成控制结果?在代码中,weights可能是在augsynth的结果中,但用户之后直接使用了weights,可能需要从syn对象中提取,比如syn$weights。否则,当前代码中的weights变量可能未定义,会导致错误。这是一个潜在的问题,需要检查。 接下来按绝对值排序权重,并导出到Excel。这里可能的问题在于如何获取权重。正确的做法应该是从syn对象中提取权重,比如weights <- syn$weights,或者使用augsynth包中的方法。用户当前的代码中weights变量可能没有定义,会导致错误。此外,数据去重后的encodings可能和权重数量不匹配,特别是如果处理单元是99,可能在数据中被过滤掉了?需要确认。 最后,使用openxlsx包创建Excel工作簿,保存ATT和平均ATT。这部分代码正确,但需要确保syn_summary中包含这些元素。此外,保存路径是否正确,是否有写入权限。 总结问题点:1. weights变量未正确提取;2. 数据去重可能导致行名与权重不匹配;3. 需要确认时间范围和处理组的定义是否正确;4. 图形保存路径可能需要检查;5. 包是否加载,如readxl、augsynth、ggplot2、dplyr等是否已安装和加载。 可能的改进建议:添加注释说明代码各部分的功能;确保所有变量正确提取;处理包依赖问题;处理数据去重和权重匹配的问题;错误处理,比如文件是否存在等。 现在需要将这些思考整理成步骤,帮助用户优化代码,并指出潜在问题及解决方案。</think>以下是您提供的R代码的逐步整理说明及优化建议: ### 一、代码结构优化 ```r #------------------ 1.数据预处理 ------------------# library(readxl); library(dplyr); library(augsynth) data <- read_excel("C:/Users/ZhuSL/Desktop/罗/PM2.5第二类.xlsx", sheet = "99") %>% mutate( PM2.5 = as.numeric(PM2.5), date = as.Date(date), treated = ifelse(encodings == 99 & date >= "2017-01-01", 1, 0) # 编码99地区为处理组 ) %>% filter( (year == 2016 & month >= 4) | (year == 2017 & month <= 6) # 保留2016.4-2017.6数据 ) #------------------ 2.合成控制建模 ------------------# syn <- augsynth( PM2.5 ~ treated, unit = encodings, time = date, data = data, progfunc = "ridge", scm = TRUE ) #------------------ 3.结果可视化 ------------------# library(ggplot2) plot_object <- plot(syn, inf_type = "jackknife+") + scale_x_date( date_breaks = "3 months", date_labels = "%Y-%m", expand = c(0, 0) ) + theme_minimal() + theme(axis.title = element_blank()) #------------------ 4.结果保存 ------------------# # 保存图片 ggsave("C:/Users/ZhuSL/Desktop/罗/synthetic_control_plot.png", plot_object, width = 10, height = 6, dpi = 300) # 保存模型对象 saveRDS(syn, "C:/Users/ZhuSL/Desktop/罗/synthetic_control_model.rds") #------------------ 5.权重处理 ------------------# weights <- summary(syn)$weights # 正确提取权重 # 数据去重与权重匹配 data_unique <- data[!duplicated(data$encodings), ] rownames(weights) <- data_unique$encodings[-1] # 排除处理单元 # 权重排序导出 sorted
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值