这是有点不清楚你在找什么(这应该可能在交叉验证),但这里有一个开始和线性回归的近似描述。
比方说,我有一些三维数据点(Noise
,PC1
,PC2
),你说他们有45个。
x=data.frame(matrix(rnorm(3*45),ncol=3))
names(x)<-c('Noise','PC1','PC2')
这些数据是围绕这个3维空间随机分布的。现在我们想象还有另一个我们特别感兴趣的变量,叫做Trait
。我们认为Noise
,PC1
和PC2
各自的变化可以解释在Trait
中观察到的一些变化。特别是,我们认为每个变量都与Trait
成线性比例关系,所以它只是您以前见过的基本旧的y=mx+b
线性关系,但对于每个变量都有一个不同的斜率m
。所以总的来说,我们想象得到Trait = m1*Noise + m2*PC1 + m3*PC2 +b
加上一些额外的噪音(这是一个耻辱你的变量之一被命名为Noise
,这是令人困惑的)。因此,要回过头来模拟一些数据,我们将为这些斜率选择一些值,并将它们放入一个名为beta
的向量中。
beta<-c(-3,3,.1) # these are the regression coefficients
因此模型Trait = m1 Noise + m2 PC1 + m3 PC2 +b
也可能用简单的矩阵乘法表示,我们可以做到这一点在R,
trait<- as.matrix(x)%*%beta + rnorm(nrow(x),0,1)
,我们已经添加了等于1个标准差的高斯噪声。
因此,这是线性回归模型的“模拟数据”。正如一个全面的检查,让我们尝试
l<-lm(trait~Noise+PC1+PC2,data=x)
summary(l)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.13876 0.11159 1.243 0.221
Noise -3.08264 0.12441 -24.779 <2e-16 ***
PC1 2.94918 0.11746 25.108 <2e-16 ***
PC2 -0.01098 0.10005 -0.110 0.913
所以注意到,我们挑选了PC2
斜率很小(0.1
)相对于数据的总体变化是,它没有被检测为一个统计显著预测。另外两个变量对Trait
有相反的影响。因此,在模拟数据时,您可以调整变量的观察范围,以及回归系数的大小beta
。
您究竟想要如何创建这些模拟数据集?你是在寻求统计建议,还是真的是一个特定的编程问题。如果前者,可能会在[stats.se]中提问;如果是后者,则用样本输入和期望的输出创建一个[可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – MrFlick 2014-11-24 21:56:17
您似乎没有意识到可能会担心这些预测变量之间的相关性,我没有看到您已经检查过非线性函数关系的可能性。如果你遵循下面的关于keegans的建议,你不会对你的关系有任何洞见,因为他只提供最简单的数据关系,可能会产生你所看到的边际估计。 – 2014-11-24 22:48:08