所以我有以下数据:
我有5个地区,1998 - 2009年。我喜欢做的是每年按地区对国家进行分类。我是R的新人,所以我到目前为止唯一的一步是:
finalData$Region = factor(finalData$Region, levels = c('Former Socialist Bloc', 'Independent', 'Western Europe','Scandinavia', 'Former Yugoslavia'), levels = c(1, 2, 3, 4, 5))
但是我收到了这个错误:
因子错误(finalData $ Region,levels = c(“前社会主义集团”, :形式参数“级别”由多个实际参数匹配
请告诉我如何解决这个问题以及如何进行分类的方法?谢谢!
答案 0 :(得分:0)
这是一个非常严谨的问题。但是我想你会想到这是你想要做的一个想法。
您有样本(行)是国家/地区,并且您有一些变量(列),这些变量是对这些样本的观察。您希望使用所有/多个变量(多变量分析)来聚类国家/地区。如果这是你想要做的,那么下面是一种方法。
我正在使用伪数据集创建 data.frame 。
dfr <- data.frame(Country=c("USA","UK","Germany","Austria","Taiwan","China","Japan","South Korea"),
Year=factor(c(2009,2009,2009,2010,2010,2010,2010,2011)),
Language=c("English","English","German","German","Chinese","Chinese","Japanese","Korean"),
Region=c("North America","Europe","Europe","Europe","Asia","Asia","Asia","Asia"))
> head(dfr)
Country Year Language Region
1 USA 2009 English North America
2 UK 2009 English Europe
3 Germany 2009 German Europe
4 Austria 2010 German Europe
5 Taiwan 2010 Chinese Asia
6 China 2010 Chinese Asia
您要做的第一件事是将国家/地区名称移至row names
,因为国家/地区名称是样本标签,而不是观察结果。
rownames(dfr) <- dfr$Country
dfr$Country <- NULL
现在您希望所有剩余的变量都是数字或因子。手动和仔细地做。我只有分类观察。最后我们想要 将所有因子重新编码为整数。这样我们的最终 data.frame 只包含数字。
dfr1 <- as.data.frame(sapply(dfr,as.numeric))
rownames(dfr1) <- rownames(dfr)
> head(dfr1)
Year Language Region
USA 1 2 3
UK 1 2 2
Germany 1 3 2
Austria 2 3 2
Taiwan 2 1 1
China 2 1 1
现在运行一些聚类算法。这里例如是PCA。
pc <- prcomp(dfr1)
pcval <- pc$x
> head(pcval)
PC1 PC2 PC3
USA -1.04369951 1.2743507 0.36120850
UK -0.87597336 0.5087910 -0.25990844
Germany 0.06243255 0.8258430 -0.39728520
Austria 0.36452903 0.2660249 0.37429849
Taiwan -1.34455665 -1.1336389 0.02793507
China -1.34455665 -1.1336389 0.02793507
将输出主成分与原始数据相结合。
pcval1 <- cbind(pcval,dfr)
rownames(pcval1) <- rownames(dfr)
> head(pcval1)
PC1 PC2 PC3 Year Language Region
USA -1.04369951 1.2743507 0.36120850 2009 English North America
UK -0.87597336 0.5087910 -0.25990844 2009 English Europe
Germany 0.06243255 0.8258430 -0.39728520 2009 German Europe
Austria 0.36452903 0.2660249 0.37429849 2010 German Europe
Taiwan -1.34455665 -1.1336389 0.02793507 2010 Chinese Asia
China -1.34455665 -1.1336389 0.02793507 2010 Chinese Asia
什么是PCA,这里发生的事情显然超出了这个答案的范围。简而言之,它会根据您观察到的所有变量创建一些新变量。
散点图主要成分1和2.颜色点由某个变量。说“地区”。将国家/地区名称添加为文本标签。
library(ggplot2)
pcval1$Country <- rownames(pcval1)
ggplot(pcval1,aes(x=PC1,y=PC2,colour=Region))+
geom_point(size=3)+
geom_text(aes(label=pcval1$Country),hjust=1.5)+
theme_bw(base_size=15)
现在我们看到国家已根据数据集中的观察结果聚集在一起。我们按国家/地区大致按国家/地区分组。显然,根据您的数据,可能会有也可能没有任何聚类。
这只是一个例子。如果你盲目地遵循这个,你可能会违反各种统计假设和什么不是。您必须考虑要处理的数据分发类型以及适合该数据的聚类算法等。