研究データは既にダウンロードされており、オブジェクトの名前は変更されていません。
人間の価値に関する質問に対応する研究ベースの変数の名前をリストします
human.values <- c("ipcrtiv", "imprich", "ipeqopt", "ipshabt", "impsafe", "impdiff", "ipfrule", "ipudrst", "ipmodst", "ipgdtim", "impfree", "iphlppl", "ipsuces", "ipstrgv", "ipadvnt", "ipbhprp", "iprspot", "iplylfr", "impenv", "imptrad", "impfun")
データベースに論理変数を追加し、数値型に変換し、回答者の重みを掛けます
weighted.human.values<-paste(human.values,"w",sep="_") add.binary.human.values<-function(){ adding.variables<-paste("srv.data[,c('", paste(weighted.human.values, collapse = "','"), "'):=list(", paste("as.numeric(",human.values, " %in% c( 'Very much like me', 'Like me' )) *dweight", collapse = ", " ), ")]", sep="") eval(parse(text=adding.variables)) return(T) } add.binary.human.values()
必要なテーブルを作成します(cntry.human.valuesで示されます)
target.audience.data <- srv.data[gndr == 'Male' & agea >= 25 & agea<=40, c(weighted.human.values,'dweight', 'cntry'), with=FALSE] cntry.human.values <- t(sapply(unique(target.audience.data[,cntry]), function(x) colSums(target.audience.data[J(x)][,weighted.human.values,with=FALSE]))) cntry.pop.sizes <- target.audience.data[,list(W.Total=sum(dweight)),by=cntry] cntry.human.values <- cntry.human.values/cntry.pop.sizes[,W.Total]*100 rownames(cntry.human.values) <- c("Albania", "Belgium", "Bulgaria", "Switzerland", "Cyprus", "Czech Republic", "Germany", "Denmark", "Estonia", "Spain", "Finland", "France", "United Kingdom", "Hungary", "Ireland", "Israel", "Iceland", "Italy", "Lithuania", "Netherlands", "Norway", "Poland", "Portugal", "Russia", "Sweden", "Slovenia", "Slovakia", "Ukraine", "Kosovo") colnames(cntry.human.values) <- sub(srv.variables[J(human.values)][,title], pattern = "Important to |Important that ", replacement = "")
そして、非負のランク5行列を因数分解します
nmf.fit <- nmf(cntry.human.values, 5, method = "brunet", seed=123456, nrun=100)