来自非正态数据的正常/排名得分与[R]中的回归关系

时间:2016-05-30 11:49:22

标签: r

我想看看病原体水平是否会影响某些大黄蜂群体的发育参数,例如产生的蛹蛹的数量。

由于数据不正常,我想按照Bishara & Hittner (2012)的建议对数据进行排名转换。

  

要定义此转换,请将x_r设为x的升序,例如   对于x的最低值,x_r = 1。 RIN转换功能   这里使用的是

     

f(x)=Φ^( - 1)((x_r-0.5)/ n)

     

其中Φ^( - 1)是逆正态累积分布函数和   n是样本量(Bliss,1967)。

我无法弄清楚如何在R中进行排名转换。我试过这个:

my.df$queen.pupae_rankit = qnorm((rank(my.df$queen.pupae)-0.5)/length(my.df$queen.pupae))

然而,这种联系似乎阻止了Rankit分数的正常分布:

qqnorm(my.df$queen.pupae_rankit)

enter image description here

因此,我想知道

  1. 如何从R?
  2. 中的关系数据中获得排名得分
  3. qnorm函数实际上是获得逆累积分布函数的正确函数吗?
  4. Bishara & Hittner (2012)使用Pearson相关性中的rankit分数而不是回归。我只知道回归 自变量必须是正态分布的。我是不是该 无论如何,正如Bishara & Hittner (2012)所做的那样 因变量?
  5. PS。我也调查了一下 rntransform {GenABEL},rankInverseNormalDataFrame {FRESA.CAD}和qNormScore {SuppDists},但我无法弄清楚如何使用它们来获得我想要的rankit分数。数据如下所示:

    structure(list(queen.pupae = c(0L, 0L, 131L, 9L, 0L, 0L, 24L, 
    0L, 141L, 1L, 0L, 0L, 0L, 0L, 11L, 45L, 0L, 1L, 0L, 5L, 84L, 
    5L, 5L, 1L, 0L, 0L, 116L, 0L, 0L, 0L, 0L, 0L, 13L, 92L, 1L, 45L, 
    120L, 137L, 40L, 100L, 119L, 74L, 8L, 41L, 19L, 1L, 52L, 32L, 
    123L, 0L, 0L, 5L, 162L, 68L, 10L, 0L, 20L, 229L, 2L, 87L, 219L, 
    143L, 82L, 1L), worker.adults = c(146L, 185L, 181L, 145L, 244L, 
    185L, 152L, 114L, 254L, 337L, 210L, 290L, 162L, 186L, 84L, 166L, 
    295L, 107L, 229L, 203L, 125L, 183L, 246L, 217L, 22L, 106L, 150L, 
    112L, 45L, 116L, 120L, 152L, 66L, 78L, 65L, 160L, 149L, 247L, 
    60L, 193L, 255L, 184L, 300L, 41L, 96L, 101L, 37L, 45L, 291L, 
    353L, 158L, 243L, 146L, 128L, 40L, 390L, 129L, 59L, 77L, 663L, 
    295L, 498L, 254L, 449L), pathogen1.dna = c(0, 318111.127271693, 
    0, 68623.2739754326, 1574.45287019555, 34424.6122347574, 2400.58041860919, 
    43515.3059302234, 4832293.58571446, 8799.05541479988, 0, 28825.2443389828, 
    0, 1523.13350414953, 8865474.42623986, 0, 0, 521807.198120121, 
    5174641.18054382, 0, 15904014.4954482, 43560.4440044516, 0, 25389.0067977301, 
    388996.478514811, 95206.2277317915, 11828659.0129974, 807202.672709897, 
    5359061.63083682, 0, 21041.1231283436, 31817666.6056002, 4545923.10675542, 
    10685.8600591283, 16115.7029438609, 0, 67887826.6688623, 16943.6858267549, 
    1492919.02988919, 49436.4613189687, 711743.102574896, 0, 23651052.7433696, 
    76175.2980832307, 21563.8738983475, 76520.1382493025, 164861.507683675, 
    2203260.57078847, 24348427.1595032, 134749.527642678, 276476.323303274, 
    10329030.0039368, 93822.2696353729, 12872122.4242484, 31680707.4838652, 
    6701547.09356281, 2369578.88255313, 1413650.78332731, 522467.993244771, 
    989515.406542198, 3837021.29623798, 1020067.61286839, 37534060.9859563, 
    43371163.4363934)), .Names = c("queen.pupae", "worker.adults", 
    "pathogen1.dna"), class = "data.frame", row.names = c(NA, -64L
    ))
    

2 个答案:

答案 0 :(得分:2)

  1. 您可以使用不同的方法来处理排名中的关系。例如: rank(my.df$queen.pupae, ties.method = "random")。有关更多选项,请查看?rank

  2. 是的,我相信qnorm是正确的功能!

  3. 我不这么认为,但我不确定。您可以尝试Cross Validated询问。

答案 1 :(得分:2)

  1. 您问题中的代码已经产生了排名分数。如果你随意断开关系,就像使用rank(...,ties.method="random")一样,这会在转换结果中引入随机错误。不幸的是,任何不引入随机错误的单变量转换方法都会保留关系,并导致类似的非线性QQ图。
  2. 只应转换因变量,而不是独立变量。转换因变量通常有助于对残差进行归一化,这是回归依赖的特定正态假设。