【问题标题】:R: correlation after aggregationR:聚合后的相关性
【发布时间】:2018-07-14 19:14:08
【问题描述】:

这个问题让我困惑了一段时间,我会尽量描述清楚:

我想计算每对酒店之间的销售额相关性,这是我的数据:

hotel = c("A","A","B","C","C","D") 
Staydate = c(1:6)
cbind(hotel, Staydate, sales)

由于入住日期不同,每家酒店可能会有多次销售。我想创建一个矩阵来计算酒店之间的相关性。

我要先将 data.frame 分解到每家酒店吗?或者有什么方法可以先按酒店汇总,再计算相关性?

我的预期结果是每对酒店之间的相关性。矩阵可视化将非常有帮助!例如下图中,将萼片长度、萼片宽度、花瓣长度、花瓣宽度更改为酒店A、B、C、D。

enter image description here

谢谢!!

【问题讨论】:

  • 我不确定你想在这里问什么。您只是想汇总还是询问这样做的理论(关于相关性)?
  • 请显示所需的输出。

标签: r correlation


【解决方案1】:

下面的代码只是对this question 的交叉验证答案中代码的重复。

首先,您已经使用cbind 创建了数据集。不要那样做。正如您在图像中看到的,所有变量都属于character 类。这是因为cbind 输出一个matrix,你想要的是一个data.frame

hotel = c("A","A","B","C","C","D")
Staydate = c(1:6)
sales <- c(209.134, 191.832, 225.115, 172.442, 189.457, 214.521)

dat <- data.frame(hotel, Staydate, sales)

现在是相关性。

model <- lm(sales ~ hotel, dat)

rsq <- summary(model)$r.squared
rsq
sqrt(rsq)
#[1] 0.9175044

cor(dat$sales, model$fitted)
#[1] 0.9175044

就像上面链接的 CV 问题中解释的那样,由于您试图将连续变量和分类变量相关联,因此步骤如下:

  1. 在因子 hotel 上拟合回归连续变量 sales 的线性模型。
  2. 然后您可以通过两种方式计算相关性。
    • 取 R² 的平方根。
    • 计算sales 与模型拟合值之间的相关性。

【讨论】:

  • 你好锐,谢谢你的回答!我可能无法正确表达我的问题,但我想知道酒店之间销售的确切相关性是什么。假设 A 和 B 之间的销售额相关性为 0.9,B 和 C 之间的相关性为 0.8,类似这样。谢谢!
  • @RachelZhang 我认为这样提出的问题没有多大意义。你能提供一个如何计算这种相关性的参考吗?
  • 有一个问题,你的数据集是长格式的。如果我reshape data from long to wide in R 会有很多NA 值,cor 将是NA 的矩阵。
【解决方案2】:

如果您询问如何聚合,那么这是 R - Aggregate (sum) totals for grouped data using dplyr 的副本

require(dplyr) # For the group_by and summarise functions
require(magrittr) # To pipe all this together
hotel = c("A","A","B","C","C","D")
Staydate = c(1:6)
sales = c(209,191,225,172,189,214)

# Store it as a data frame in order to perform aggregation
df <- data.frame(hotel, Staydate, sales)
df[,c("Staydate","sales")] <- as.numeric(as.factor(unlist(df[,c("Staydate","sales")]))) # To convert the columns from factors to numeric

df_agg <- df %>% group_by(hotel) %>% summarise(Avg_sales = mean(sales))

输出是一个聚合的数据框

# A tibble: 4 x 2
hotel Avg_sales
<fct>     <dbl>
1 A           9.5
2 B          12  
3 C           7.5
4 D          11  

只需转换回矩阵来执行相关性

matrix <- as.matrix(df_agg)

【讨论】:

  • 您好,尼克,感谢您的回答!是的,我的部分问题是如何汇总我的数据,因为我想计算每对酒店之间的相关性。您正在使用 group_by 和 summarise 函数来获取每家酒店的平均销售额,但我想知道是否可以保留原始销售额,然后获得相关性?例如,酒店 A 可能有 4 个销售观察值,我想计算它与酒店 B 的 4 个销售观察值的相关性。谢谢!!
  • 嗨,Rachel,您需要将数据框从长格式重组为宽格式。这样,您将拥有 A、B、C 和 D 列,其中将包含每列中的销售额。如果您不关心矩阵中的 Staydate,我会将其子集化,然后使用仅包含 A、B、C 和 D 列的矩阵运行您的相关性。stackoverflow.com/questions/5890584/…。附言如果提供的答案对您有所帮助,请务必接受其中一个。
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 2010-11-30
  • 2020-03-20
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多