R的新手,我有两个数据集 - 它们具有相同的x轴值,但y轴会有所不同。
我正试图找到两者之间的相关性。当我使用R在散点图中绘制abline
时,它给了我两条最佳拟合线,看起来使一个数据集高于另一个 - 但我真的很想知道这两个数据集之间的p值知道效果。
在查找之后,似乎我应该使用t.test
- 但我不确定如何相互对抗它们。
例如,如果我跑:
t.test(t1$xaxis,t1$yaxis1)
t.test(t2$xaxis,t2$yaxis2)
它给了我x和y的正确方法(t1:16.84,88.58和t2:14.79,86.14) - 但其余的,我不确定:
t1:t = -43.8061,df = 105.994,p值< 2.2E-16
t2:t = -60.1593,df = 232.742,p值< 2.2E-16
显然,给出的p值是(a)微观的,(b)我不知道如何让它告诉我关于数据集彼此之间的关系 - 而不是单独的。
非常感谢任何帮助 - 谢谢!
答案 0 :(得分:2)
既然你要求它,我就是这样理解你的问题。
您有两组y值对应于相同的x值。这里我假设y和x之间的关系是线性的。如果不是,您可以转换变量,使用非线性模型,加法模型,......
首先让我们模拟一些数据,因为你没有提供任何数据:
set.seed(42)
x <- 1:20
y1 <- 2.5 + 3 * x +rnorm(20)
y2 <- 4 + 2.5 * x +rnorm(20)
plot(y1~x, col="blue", ylab="y")
points(y2~x, col="red")
legend("topleft", legend=c("y1", "y2"), col=c("blue", "red"), pch=1)
现在,我们想知道两个样本是否不同。我们可以通过拟合模型找到答案:
DF <- cbind(stack(cbind.data.frame(y1, y2)), x)
names(DF) <- c("y", "group", "x")
fit <- lm(y~x*group, data=DF)
summary(fit)
Call:
lm(formula = y ~ x * group, data = DF)
Residuals:
Min 1Q Median 3Q Max
-2.2585 -0.4603 -0.1899 0.9008 2.2127
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.51769 0.55148 6.379 2.17e-07 ***
x 2.92136 0.04604 63.457 < 2e-16 ***
groupy2 0.67218 0.77991 0.862 0.394
x:groupy2 -0.46525 0.06511 -7.146 2.11e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.187 on 36 degrees of freedom
Multiple R-squared: 0.9949, Adjusted R-squared: 0.9945
F-statistic: 2333 on 3 and 36 DF, p-value: < 2.2e-16
截距没有显着差异,但是斜率是。如果group
具有重要影响,我们可以通过与不考虑group
的模型进行比较来进行最佳测试:
fit0 <- lm(y~x, data=DF)
anova(fit0, fit)
Analysis of Variance Table
Model 1: y ~ x
Model 2: y ~ x * group
Res.Df RSS Df Sum of Sq F Pr(>F)
1 38 300.196
2 36 50.738 2 249.46 88.498 1.267e-14 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
如您所见,样本不同。
答案 1 :(得分:1)
您是否考虑过基于x轴合并数据集,以便您的数据结构变为:
X Y1 Y2
然后,您可以找到所需的任何列之间的相关性。
答案 2 :(得分:1)
根据您上面的评论判断,看起来您正在进行2样本的手段测试。这就是你追求的吗?如果是的话,
set.seed(1)
y1 = rnorm(100)
y2 = rnorm(120, mean=0.1)
results = t.test(y1,y2)
results$p.value
答案 3 :(得分:1)
您可以使用cor
函数轻松找到变量之间的相关性。在这种情况下,我先使用数据帧,然后使用矩阵。我们可以很容易地看到变量之间关系的强弱。
> d <- data.frame(y1 = runif(10), y2 = rnorm(10), y3 = rexp(10))
> cor(d)
## y1 y2 y3
## y1 1.0000000 -0.3319495 -0.4013154
## y2 -0.3319495 1.0000000 0.1370312
## y3 -0.4013154 0.1370312 1.0000000
使用矩阵
> m <- matrix(c(runif(10), rnorm(10), rexp(10)), 10, 3)
> cor(m)
## [,1] [,2] [,3]
## [1,] 1.0000000 -0.1971826 0.3622307
## [2,] -0.1971826 1.0000000 0.4973368
## [3,] 0.3622307 0.4973368 1.0000000
有关详情,请参阅example(cor)
。