值改变的指数平滑

时间:2016-04-05 12:44:38

标签: r

我有一个指数平滑函数,用于预测分析。我需要将它分组到其他变量并且滞后一行。

这是功能:

exp1 = function(x) {if (NROW(x) < 4) {res <- x} else {res <- fitted(ses(x, alpha = 0.1))}
return(res)}

我在下面的数据集中运行它:

school <- c('I','B','B','B','B','I','I','I','I','B','I','I','B','I','B','I','B','B','I','I','B','I','B','I','B','B','I')
Student <- c('S','S','S','O','O','O','O','S','O','S','S','O','S','O','O','S','S','O','S','O','S','O','O','S','S','O','J')
area <- c('A','A','A','A','B','A','B','A','A','A','A','A','A','A','A','A','A','A','A','B','A','A','A','A','A','A','A')
Score <- c(5,2,7,3,9,6,3,7,1,7,3,8,3,4,1,9,4,6,3,8,3,4,1,9,4,6,6)
match1 <- data.frame(school, Student, area,  Score)

expsmooth1 = ave(match1$Score, match1$area, match1$Student, FUN = exp1)

但是,当我将新数据附加到原始数据集的底部并再次运行该函数时,某些先前值会更改,而某些值保持不变。我需要函数为先前保留相同的值而不更改它们!

这是相同的数据集,但底部附有四个新读数:

school <- c('I','B','B','B','B','I','I','I','I','B','I','I','B','I','B','I','B','B','I','I','B','I','B','I','B','B','I','I','I','I','I')
Student <- c('S','S','S','O','O','O','O','S','O','S','S','O','S','O','O','S','S','O','S','O','S','O','O','S','S','O','J','J','J','J','S')
area <- c('A','A','A','A','B','A','B','A','A','A','A','A','A','A','A','A','A','A','A','B','A','A','A','A','A','A','A','A','A','B','A')
Score <- c(5,2,7,3,9,6,3,7,1,7,3,8,3,4,1,9,4,6,3,8,3,4,1,9,4,6,6,0,0,0,0)
match2 <- data.frame(school, Student, area,  Score)
expsmooth2 = ave(match2$Score, match2$area, match2$Student, FUN = exp1)

以下是跨两个数据集运行时的函数结果。你可以看到一些值保持不变(就像我想要的)和一些变化。

School    Student    Area    Score    expsmooth1     expsmooth2    Comparison
I         S           A        5        5.062012       4.803711      different
B         S           A        2        5.055811       4.823340      different
B         S           A        7        4.750229       4.541006      different
B         O           A        3        4.005469       4.005469      same
B         O           B        9        9.000000       9.000000      same
I         O           A        6        3.904922       3.904922      same
I         O           B        3        3.000000       3.000000      same
I         S           A        7        4.975207       4.786905      different
I         O           A        1        4.114430       4.114430      same
B         S           A        7        5.177686       5.008215      different
I         S           A        3        5.359917       5.207393      different
I         O           A        8        3.802987       3.802987      same
B         S           A        3        5.123926       4.986654      different
I         O           A        4        4.222688       4.222688      same
B         O           A        1        4.200419       4.200419      same
I         S           A        9        4.911533       4.787989      different
B         S           A        4        5.320380       5.209190      different
B         O           A        6        3.880377       3.880377      same
I         S           A        3        5.188342       5.088271      different
I         O           B        8        8.000000       8.000000      same
B         S           A        3        4.969508       4.879444      different
I         O           A        4        4.092340       4.092340      same
B         O           A        1        4.083106       4.083106      same
I         S           A        9        4.772557       4.691499      different
B         S           A        4        5.195301       5.122349      different
B         O           A        6        3.774795       3.774795      same
I         J           A        6        6.000000       6.000000      same
I         J           A        0                       0.000000
I         J           A        0                       0.000000
I         J           B        0                       0.000000
I         S           A        0                       5.010114

知道如何阻止这种情况发生吗?我需要保留所有先前的值,而不是在追加新值时进行更改。

感谢任何帮助。

0 个答案:

没有答案