【发布时间】:2020-06-12 09:31:51
【问题描述】:
这是我的数据集 (df8) 的摘录,其中包含 194 个国家/地区从 2000 年到 2018 年的时间序列。
iso3 year anc4 median
<chr> <dbl> <dbl> <dbl>
1 BIH 2000 NA 0.739
2 BIH 2001 NA 0.746
3 BIH 2002 NA 0.763
4 BIH 2003 NA 0.778
5 BIH 2004 NA 0.842
6 BIH 2005 NA 0.801
7 BIH 2006 NA 0.819
8 BIH 2007 NA 0.841
9 BIH 2008 NA 0.845
10 BIH 2009 NA 0.840
11 BIH 2010 0.842 0.856
12 BIH 2011 NA 0.873
13 BIH 2012 NA 0.867
14 BIH 2013 NA 0.889
15 BIH 2014 NA 0.879
16 BIH 2015 NA 0.883
17 BIH 2016 NA 0.854
18 BIH 2017 NA 0.891
19 BIH 2018 NA 0.920
20 BWA 2000 NA 0.739
21 BWA 2001 NA 0.746
22 BWA 2002 NA 0.763
23 BWA 2003 NA 0.778
24 BWA 2004 NA 0.842
25 BWA 2005 NA 0.801
26 BWA 2006 0.733 0.819
27 BWA 2007 NA 0.841
28 BWA 2008 NA 0.845
29 BWA 2009 NA 0.840
30 BWA 2010 NA 0.856
31 BWA 2011 NA 0.873
32 BWA 2012 NA 0.867
33 BWA 2013 NA 0.889
34 BWA 2014 NA 0.879
35 BWA 2015 NA 0.883
36 BWA 2016 NA 0.854
37 BWA 2017 NA 0.891
38 BWA 2018 NA 0.920
我想做的是使用基于区域中位数(中位数)的线性回归的斜率来估算变量 anc4 的缺失数据。我想在国家一级这样做,因为每个国家不属于同一个地区。
这是我尝试过的..
df_model <- df8
predictions <- vector()
for(i in unique(df_model$iso3)) {
temp <- df_model[df_model[,2]==i,]
predictions <- c(predictions,predict(lm(median~year,temp),df8[is.na(df8$anc4) & df8$iso3==i,]))
}
df8[is.na(df8$anc4),]$anc4 <- predictions
我使用了我在使用观察到的 anc4 数据点的线性回归来估算缺失的 anc4 数据时一直使用的代码,并尝试使用中位数对其进行调整..但效果不佳!
非常感谢!
【问题讨论】:
-
值得注意的是,
lm(median~year+iso3, data=df_model) %>% summary似乎说该区域在这里不是很相关,但这可能是示例绑定。 -
我只想根据中值画一条线并检索斜率并用它来估算国家/地区的缺失数据..
-
在您的示例中,每个区域只有 1 个非缺失值,是否总是如此?否则,您可能想多描述一下当有多个时会发生什么,因为斜率可能无法完美地连接它们。
-
1/ 当一个国家没有任何数据时,我们用区域中位数进行估算。 2/ 当一个国家至少有 2 个数据点时,我们根据该国观察到的数据使用线性回归进行估算。 3/ 但是当一个国家只有一个数据点时,我们需要使用基于区域中位数的线性回归的斜率。我已经做了前两个,现在我必须做第三个,所以这意味着所有的数据都已经为其他国家进行了估算。唯一没有估算数据的国家是只有一个数据点的国家(每个国家,而不是每个地区)。
标签: r linear-regression missing-data