【问题标题】:How to create a gender dummy variable in R?如何在 R 中创建性别虚拟变量?
【发布时间】:2020-04-03 10:31:35
【问题描述】:

我正在对一项作业进行小型统计分析,其中我正在处理成年女性和男性的双变量正态分布以及每种性别的 100 个身高和体重的模拟。我将男性和女性的身高组合成一个名为“身高”的变量。我在体重方面也做过同样的事情。我想创建一个与身高和体重相匹配的虚拟变量(女性为 1,男性为 0),但我不知道该怎么做。

这是我目前的代码:

BivNormDist = function(n,m1,m2,s1,s2,r) {
  y = rnorm(n,m2,s2)
  x = rnorm(n,m1+r*s1*(y-m2)/s2,s1*sqrt(1-r^2))
  data.frame(x,y)
}

males = BivNormDist(100,167,60,7,9,0.60)
females = BivNormDist(100,177,76,8,11,0.55)

height = c(males$x, females$x)
weight = c(males$y, females$y)
gender = 

有什么想法吗?提前致谢!

【问题讨论】:

  • 请注意,在 R 中使用数字作为虚拟变量并不是一个好主意,因为默认情况下它们被许多函数认为是连续的。相反,使用因子,它们是专门为表示类别而设计的。它还使代码更具可读性,因为因子是由字符串表示的——例如"male""female" — 而不是任意数字。

标签: r


【解决方案1】:

您可以向您的函数添加一个新参数 gender,如下所示:

BivNormDist = function(n,m1,m2,s1,s2,r, gender) {
  y = rnorm(n,m2,s2)
  x = rnorm(n,m1+r*s1*(y-m2)/s2,s1*sqrt(1-r^2))
  data.frame(x,y, gender)
}

males = BivNormDist(100,167,60,7,9,0.60, 0) #or 'male' instead of 0
females = BivNormDist(100,177,76,8,11,0.55, 1) #or 'female' instead of 1

head(males)
         x        y gender
1 174.5967 59.03692      0
2 166.8004 60.02427      0
3 166.3787 59.50217      0
4 171.4384 51.33848      0
5 165.3641 74.49850      0
6 169.6654 61.11999      0

head(females)
         x        y gender
1 172.0648 58.26547      1
2 173.0113 85.16080      1
3 200.1335 86.59496      1
4 184.2423 79.49594      1
5 183.0516 74.51125      1
6 196.1978 81.20334      1


height = c(males$x, females$x)
weight = c(males$y, females$y)
gender = c(males$gender, females$gender)

希望这能解决您的问题。

【讨论】:

  • 正如我在上面的评论中所指出的,使用数字作为虚拟变量并不是一个好主意,特别是在您的代码中,它与使用因子相比没有优势。
猜你喜欢
  • 2023-03-24
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多