パネル データを取得し、k-means クラスタリングをいじっています。これで、ほぼ安定したファクター値のパネルができましたが、これをもう少し滑らかにして、(たとえば) データが「ワイオミング州は以前はグループ 1 にあり、グループ 2 に移動しました。 、その後、「ワイオミングはグループ 1、1、1、2、3、2、2、5、5、5 でした」ではなく、グループ 5 に移動しました。
したがって、私が取っているアプローチは、rollapply() を使用してモーダル値を計算することです。以下は、モードを計算するコード ("Mode()") と、そのラッパー ("ModeR()") であり、モードをランダムに選択することでマルチモーダル ウィンドウの問題を (おそらくぎこちなく) 解決します。それはすべて問題ありませんが、それを rollapply() に入れると問題が発生します。
Mode <- function(vect){ # take a vector as input
temp <- as.data.frame(table(vect))
temp <- arrange(temp,desc(Freq)) # from dplyr
max.f <- temp[1,2]
temp <- filter(temp,Freq==max.f) # cut out anything that isn't modal
return(temp[,1])
}
ModeR <- function(vect){
out <- Mode(vect)
return(out[round(runif(1,min=0.5000001,max=length(out)+0.499999999))])
}
temp <- round(runif(20,min=1,max=10)) # A vector to test this out on.
cbind(temp,rollapply(data=temp,width=5,FUN=ModeR,fill=NA,align="right"))
返された:
temp
[1,] 5 NA
[2,] 6 NA
[3,] 5 NA
[4,] 5 NA
[5,] 7 1
[6,] 6 1
[7,] 5 1
[8,] 5 1
[9,] 3 2
[10,] 1 3
[11,] 5 3
[12,] 7 3
[13,] 5 3
[14,] 4 3
[15,] 3 3
[16,] 4 2
[17,] 8 2
[18,] 5 2
[19,] 6 3
[20,] 6 3
それを次のものと比較してください。
> ModeR(temp[1:5])
[1] 5
Levels: 5 6 7
> ModeR(temp[2:6])
[1] 6
Levels: 5 6 7
したがって、rollapply() での ModeR の適用方法に問題があるようです。何か案は?
ありがとう!リック