首页 > 解决方案 > 根据来自同一列的先前值和 R 中的周围数据预测值

问题描述

我有一个法律项目数据库,其中有 20 个列,分类和数字,关于法律项目本身(政治家、它来自的商会、主题、所涉及的各方、政治背景、赞助商的性别分布等)。其中一列也是项目的创建日期。

一些项目已经被投票并作为法律公布,因此我知道它们需要多长时间才能获得批准(以天计)。

我想根据周围的数据预测发布未发布的项目需要多长时间。

换句话说,我需要将已发布的项目用作训练数据,将未发布的项目用作我需要预测的数据,这是基于已发布的项目在“天数”(用于发布)列上有数字这一事实,而非发表不。

我怎样才能做出这个预测?

下面是一个 20 行的示例数据框,10 行published == TRUE和 10行,published == FALSE我需要预测的列是days


data.frame(
   stringsAsFactors = FALSE,
               date = c("1992-09-16","2006-07-12",
                        "2016-06-02","2015-11-25","2017-04-06","1993-07-08",
                        "2001-04-04","2012-03-14","2014-11-17","2020-03-18",
                        "2011-11-24","2006-07-20","2016-08-11","2019-01-25",
                        "2007-12-17","2015-08-13","2008-12-18","2012-08-14",
                        "2017-10-17","2014-05-14"),
         project_id = c("799-15","4332-15",
                        "10728-07","10422-06","11188-17","1034-15","2686-15",
                        "8201-09","9729-03","13318-07","8062-07","4357-15",
                        "10856-11","12434-07","5583-07","10259-18","6285-07",
                        "8525-18","11481-07","9352-11"),
      project_title = c("Sustituye el Artí­culo 18 de la Nº 18.290, de Tránsito, en lo relativo a la duración de la licencia de conducir.",
                        "Concede permiso para trabajadores al interior de la locomoción colectiva.",
                        "Modifica la Carta Fundamental con el objeto de cambiar la fecha de la cuenta que efectúa la Presidenta de la República sobre el estado administrativo y polí­tico de la Nación",
                        "Reemplaza el artí­culo 111 de la Carta Fundamental, en materia de gobierno regional e instituye la elección de los intendentes mediante sufragio universal.",
                        "Modifica la ley Nº19.253, que Establece normas sobre protección, fomento y desarrollo de los indí­genas, y crea la Corporación Nacional de Desarrollo Indí­gena, para reconocer al pueblo chango como etnia indí­gena de Chile",
                        "Modifica la Ley Nº 18.290, con la finalidad de establecer la obigatoriedad de realizar licitaciones públicas de establecimientos que practiquen revisiones técnicas de vehí­culos motorizados en todas las comunas del paí­s.",
                        "Establece un seguro obligatorio de accidentes personales causados por circulación de vehí­culos motorizados.",
                        "Sobre medidas de seguridad en pasarelas, pasos sobre nivel y puentes que cruzan carreteras.",
                        "Modifica la ley Nº 19.496, que establece normas sobre protección de los derechos de los consumidores, con el objeto de regular el cobro del servicio de parquí­metros y estacionamientos en los lugares que indica.",
                        "Proyecto de reforma constitucional que autoriza al Congreso Nacional a sesionar por medios telemáticos en los casos que indica",
                        "Reforma Constitucional que restablece obligatoriedad del voto.",
                        "Agrega nuevo inciso al artí­culo 46 de la ley Nº 18.290, referido a los colores, forma y dimensiones de las placas únicas contempladas en la ley de tránsito.",
                        "Modifica la ley Nº19.925, Sobre expendio y consumo de bebidas alcohólicas, para sancionar con mayor severidad las infracciones a la prohibición establecida en protección de los menores de edad",
                        "Modifica la ley Nº 18.918, orgánica constitucional del Congreso Nacional, para regular los efectos del permiso por paternidad en el cómputo de quórum y mayorí­as",
                        "Regula el ejercicio del derecho a reunirse pací­ficamente.",
                        "Crea el Registro Nacional de Deudores de Pensiones Alimenticias.",
                        "Modifica el Código Civil respecto de los delitos y cuasidelitos civiles cometidos por menores de edad.",
                        "Establece efectos civiles y penales por la comisión del delito de maltrato habitual de la ley Nº20.066.",
                        "Modifica el Código Procesal Penal, para regular la revocación del acuerdo reparatorio.",
                        "Modifica Código Sanitario, a fin de sancionar a quien administre o posea, vertedero clandestino."),
             status = c("Publicado","Publicado",
                        "Publicado","Publicado","Publicado","Publicado",
                        "Publicado","Publicado","Publicado","Publicado",
                        "En tramitación","En tramitación","En tramitación",
                        "En tramitación","Archivado","En tramitación","En tramitación",
                        "En tramitación","En tramitación","Archivado"),
              topic = c("Obras Públicas, Transportes y Telecomunicaciones.",
                        "Obras Públicas, Transportes y Telecomunicaciones.",
                        "Constitución, Legislación, Justicia y Reglamento",
                        "Gobierno Interior, Nacionalidad, Ciudadanía y Regionalización",
                        "Derechos Humanos, Nacionalidad y Ciudadanía",
                        "Obras Públicas, Transportes y Telecomunicaciones.",
                        "Obras Públicas, Transportes y Telecomunicaciones.","Recursos Hídricos, Desertificación y Sequía",
                        "Economía, Fomento, Micro, Pequeña y Mediana Empresa, Protección de los Consumidores y Turismo",
                        "Constitución, Legislación, Justicia y Reglamento",
                        "Constitución, Legislación, Justicia y Reglamento",
                        "Obras Públicas, Transportes y Telecomunicaciones.","Salud",
                        "Constitución, Legislación, Justicia y Reglamento",
                        "Constitución, Legislación, Justicia y Reglamento","De la Familia",
                        "Constitución, Legislación, Justicia y Reglamento",
                        "De la Familia",
                        "Constitución, Legislación, Justicia y Reglamento","Salud"),
          published = c(TRUE,TRUE,TRUE,TRUE,TRUE,
                        TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,
                        FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE),
               days = c("4833","1214","336","407",
                        "1290","4538","866","817","731","8",NA,NA,NA,
                        NA,NA,NA,NA,NA,NA,NA),
              cargo = c("Senador","Senador",
                        "Diputado","Senador","Diputado","Senador","Senador",
                        "Senador","Diputado","Senador","Diputado","Senador",
                        "Diputado","Senador","Senador","Diputado","Diputado",
                        "Diputado","Senador","Senador"),
             genero = c("M","M","M","M","F","M",
                        "M","M","M","M","M","F","F","F","M","F","M",
                        "M","M","M"),
            partido = c("UDI","Independiente","UDI",
                        "RN","PC","UDI","RN","UDI","DC","PS","DC","DC",
                        "PC","PPD","Pais Progresista","PC","PPD","RN",
                        "Independiente","Independiente"),
             region = c("Región del Maule",
                        "Región de Antofagasta","Región Metropolitana de Santiago",
                        "Región de la Araucanía","Región Metropolitana de Santiago",
                        "Región del Maule","Región de la Araucanía",
                        "Región del Libertador General Bernardo O'Higgins",
                        "Región de Los Ríos","Región del Maule","Región de Ñuble",
                        "Región de Magallanes y la Antártica Chilena",
                        "Región Metropolitana de Santiago","Región del Biobío",
                        "Región del Biobío","Región Metropolitana de Santiago",
                        "Región de Valparaíso","Región de Ñuble","Región de Antofagasta",
                        "Región de Magallanes y la Antártica Chilena"),
           distrito = c(9,3,14,11,9,9,11,8,24,
                        9,19,15,9,10,10,9,7,19,3,15),
          ideologia = c(3,0,3,3,-3,3,3,3,1,
                        -2,1,1,-3,0,-1,-3,0,3,0,0),
      fecha_ingreso = c("1992-09-16","2006-07-12",
                        "2016-06-02","2015-11-25","2017-04-06","1993-07-08",
                        "2001-04-04","2012-03-14","2014-11-17","2020-03-18",
                        NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
         iniciativa = c("Moción","Moción","Moción",
                        "Moción","Moción","Moción","Moción","Moción",
                        "Moción","Moción",NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
              n_ley = c("Ley Nº 20.068",
                        "Ley Nº 20.388","Ley N° 21.011","Ley N° 20.990","Ley N° 21.273",
                        "Ley Nº 20.068","Ley Nº 19.887","Ley N° 20.753",
                        "Ley N° 20.967","Ley N° 21.219",NA,NA,NA,NA,NA,NA,NA,
                        NA,NA,NA),
  fecha_publicacion = c("2005-12-10","2009-11-07",
                        "2017-05-04","2017-01-05","2020-10-17","2005-12-10",
                        "2003-08-18","2014-06-09","2016-11-17","2020-03-26",
                        NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
            aprueba = c(NA,0.588609625988215,
                        0.239293203926262,0.239293203926262,0.198232587727645,NA,
                        0.486342468349014,0.227811246640991,0.378658817614279,
                        0.0602900629256258,0.263274470108713,0.45791429449014,
                        0.239293203926262,0.365168783759783,0.388320501421412,
                        0.28639908396031,0.429509630187767,0.235967915643678,
                        0.225057300910334,0.342202303911118),
         desaprueba = c(NA,0.226933127280144,
                        0.580545109188936,0.580545109188936,0.600041245494515,NA,
                        0.262920553958243,0.619839921565968,0.430880155305093,
                        0.822159297111715,0.525507754836235,0.305382056498538,
                        0.580545109188936,0.391162345818584,0.421119293586968,
                        0.556417403359417,0.38144207967139,0.592325472064253,
                        0.534274514219923,0.462000911671922),
         alineacion = c("Oposición","Independiente",
                        "Oposición","Oposición","Oficialismo","Oposición",
                        "Oposición","Oficialismo","Oficialismo","Oposición",
                        "Oposición","Oficialismo","Oficialismo","Oposición",
                        NA,"Oficialismo","Oficialismo","Oficialismo",
                        "Independiente","Independiente"),
           personas = c(2L,3L,7L,2L,5L,2L,1L,
                        1L,4L,1L,5L,2L,5L,9L,1L,7L,3L,1L,1L,2L),
          oposicion = c(1,NA,1,1,0,1,1,0,0,1,
                        NA,0,0.2,0.444444444444444,NA,NA,0,0,0,0.5),
        oficialismo = c(0,NA,0,0,1,0,0,1,0.75,
                        0,NA,0.5,0.8,0.444444444444444,NA,NA,1,1,0,0),
         diversidad = c(0.5,1,0.142857142857143,1,
                        0.8,0.5,1,1,0.5,1,0.6,1,1,0.777777777777778,1,
                        0.857142857142857,0.333333333333333,1,1,1),
        transversal = c(0,0.666666666666667,0,0,0,
                        0,0,0,0.25,0,0.4,0.5,0.2,0.222222222222222,0,
                        0.142857142857143,0,0,0,0.5),
            paridad = c(0,0.33,0.14,0.5,0.6,0,0,
                        0,0,0,0.2,0.5,0.4,1,0,0.71,0.33,0,0,0),
        centralismo = c(0.5,0,0.43,0,0.4,0.5,0,
                        0,0,0,0,0,0.2,0.44,0,0.29,0,0,0,0),
              apoyo = c(0.857142857142857,
                        0.937134909596662,1.40637813211845,0.397354974451458,
                        0.92295526434704,0.909090909090909,0.484162895927602,
                        0.221837549933422,0.807683716774626,0.133712528823982,
                        1.15158564956532,0.624756606397775,1.00455580865604,
                        1.15672464313557,0.312020460358056,1.3907424105801,
                        0.883169462116831,0.221837549933422,0.184591052869408,
                        0.403841858387313)
)

标签: r

解决方案


要将已发布的项目用作训练数据,您可以按 筛选published == TRUE。例如:

trainset <- data %>% filter(published == TRUE)
testset <- data %>% filter(published == FALSE)

或者,如果要使用days列拆分训练和测试数据集,可以使用:

trainset <- data[!is.na(data$days),]
testset <- data[is.na(data$days),]

您可以使用以下方法创建线性回归模型并查看模型输出:

linear_model <- lm(days ~ [chosen variable/s here], data = trainset)
summary(linear_model)

请参阅此处的文档 ( https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/predict.lm ) 以使用 predict.lm 函数对新数据进行预测。


推荐阅读