R 从加权数据创建数据帧以实现数据可视化

R 从加权数据创建数据帧以实现数据可视化,r,survey,weighted,R,Survey,Weighted,我已经创建了一个带有分层后调查权重变量的数据框架。我的可视化团队需要一个数据框架,其中每一行都是一个观察值。他们希望用R以外的工具来可视化数据 当然,我的未加权数据是每行观察一次。但是,这是一个未加权的数据,它在给定变量上的答案分布与加权数据的答案分布不同 我查看了“synthpop”软件包,但它似乎没有满足我的需要。我不知道是否有另一个软件包可以提供帮助,或者使用什么其他代码。我可以手动计算其中的一些,但这是一个痛苦的过程,不容易复制 目前没有任何 预期的数据框每行有一个观察值,但每个变量都有

我已经创建了一个带有分层后调查权重变量的数据框架。我的可视化团队需要一个数据框架,其中每一行都是一个观察值。他们希望用R以外的工具来可视化数据

当然,我的未加权数据是每行观察一次。但是,这是一个未加权的数据,它在给定变量上的答案分布与加权数据的答案分布不同

我查看了“synthpop”软件包,但它似乎没有满足我的需要。我不知道是否有另一个软件包可以提供帮助,或者使用什么其他代码。我可以手动计算其中的一些,但这是一个痛苦的过程,不容易复制

目前没有任何


预期的数据框每行有一个观察值,但每个变量都有我使用调查权重进行加权单变量分析得到的分布。

这是一个有趣的问题,特别是在区分如何从加权数据创建新的数据帧以实现可视化的技术问题和加权数据如何以图形方式表示的一般问题时(首先)

我知道您已经回答了后一个问题,结果是从加权数据生成新的数据帧。在该加权数据中,每一行代表一个实际观察值,例如,实际参与调查的参与者。一个新的“未加权”数据框需要包含更多的行,根据每个参与者的权重给出类似的答案

在生成一些数据和查看一些示例之前,应注意,加权调查数据的图形表示不是问题,只要它基于聚合度量/项目。例如,显示某个度量X的平均值(平均值)的条形图可以用图形表示,其表示方式与未加权数据的表示方式几乎相同。唯一的区别是聚合值的计算方式不同(我们将使用加权平均值,而不是R中的正态平均值函数)

因此,生成用于可视化加权数据的新数据框的问题只会出现在某些特定类型的图中。这里的散点图很快就浮现在脑海中,因为它显示了所有的实际数据点

让我们考虑一下如何为加权数据绘制散点图

首先,让我们生成一些数据

library(dplyr)
library(tidyr)
library(ggplot2)

# Function to randomly generate weights
set.seed(7)
rtnorm <- function(n, mean, sd, a = -Inf, b = Inf){
  qnorm(runif(n, pnorm(a, mean, sd), pnorm(b, mean, sd)), mean, sd)
}

n <- 1000
data <- data.frame(  age = round(runif(n, min = 18, max = 80), 0),
                   score = round(runif(n, min = 0, max = 100), 0),
                  weight = round(rtnorm(n = n, mean = 1, sd = 1, a = 0.05, b = 10), 1))
散点图显示所有数据点,其中每个点代表参与调查的参与者。然而,散点图并没有揭示数据在底层人群中的样子

现在,我们可以通过生成更多权重更大的参与者行来改变数据帧

data %>% 
  mutate(weight2 = weight * (1/min(weight))) %>% 
  uncount(weight2) %>% 
  ggplot(., aes(x = age, y = score)) +
  geom_point()
然而,这个散点图看起来和第一个完全一样。想一想,虽然产生了更多的观测,但它们位于完全相同的x和y坐标

为了获得更好的感觉,哪些点更能代表潜在的人口,建议考虑重量是我们情节的另一个维度。我们只需在ggplot调用的
aes()
语句中添加变量,而无需基于权重创建新的数据帧

data %>% 
  ggplot(., aes(x = age, y = score, alpha = weight)) +
  geom_point()
我们可以根据权重转换数据帧,并使用ggplot alpha使重叠点可见,而不是将权重视为绘图的另一个维度

data %>% 
  mutate(weight2 = weight * (1/min(weight))) %>% 
  uncount(weight2) %>% 
  ggplot(., aes(x = age, y = score)) +
  geom_point(alpha = 0.035)
正如你所看到的,结果是一样的


我不知道你的可视化团队试图开发哪种绘图类型,但是我建议把重量考虑为你的情节的另一个维度,避免创建新的数据。

< P>这是一个有趣的问题,特别是在区分如何从加权数据创建新的数据帧以实现可视化的技术问题和加权数据如何以图形方式表示的一般问题时(首先)

我知道您已经回答了后一个问题,结果是从加权数据生成新的数据帧。在该加权数据中,每一行代表一个实际观察值,例如,实际参与调查的参与者。一个新的“未加权”数据框需要包含更多的行,根据每个参与者的权重给出类似的答案

在生成一些数据和查看一些示例之前,应注意,加权调查数据的图形表示不是问题,只要它基于聚合度量/项目。例如,显示某个度量X的平均值(平均值)的条形图可以用图形表示,其表示方式与未加权数据的表示方式几乎相同。唯一的区别是聚合值的计算方式不同(我们将使用加权平均值,而不是R中的正态平均值函数)

因此,生成用于可视化加权数据的新数据框的问题只会出现在某些特定类型的图中。这里的散点图很快就浮现在脑海中,因为它显示了所有的实际数据点

让我们考虑一下如何为加权数据绘制散点图

首先,让我们生成一些数据

library(dplyr)
library(tidyr)
library(ggplot2)

# Function to randomly generate weights
set.seed(7)
rtnorm <- function(n, mean, sd, a = -Inf, b = Inf){
  qnorm(runif(n, pnorm(a, mean, sd), pnorm(b, mean, sd)), mean, sd)
}

n <- 1000
data <- data.frame(  age = round(runif(n, min = 18, max = 80), 0),
                   score = round(runif(n, min = 0, max = 100), 0),
                  weight = round(rtnorm(n = n, mean = 1, sd = 1, a = 0.05, b = 10), 1))
散点图显示所有数据点,其中每个点代表参与调查的参与者。然而,散点图并没有揭示数据在底层人群中的样子

现在,我们可以通过生成更多权重更大的参与者行来改变数据帧

data %>% 
  mutate(weight2 = weight * (1/min(weight))) %>% 
  uncount(weight2) %>% 
  ggplot(., aes(x = age, y = score)) +
  geom_point()
然而,这个散点图看起来和第一个完全一样。想一想,虽然产生了更多的观测,但它们位于完全相同的x和y坐标

为了获得更好的感觉,哪些点更能代表潜在的人口,建议考虑重量是我们情节的另一个维度。我们