如何使用计算机来线性拟合,如何在给定协方差矩阵和拟合系数的情况下计算线性回归的p值(How do I calculate p values of a linear regression given t...

如何在给定协方差矩阵和拟合系数的情况下计算线性回归的p值(How do I calculate p values of a linear regression given the covariance matrix and fit coefficients)

我使用GSL库在C中执行了线性回归。 我在R中执行了相同的回归。我可以使用“summary”命令在R中访问此回归的p值。

在C中,我有协方差矩阵,残差平方和值和拟合系数。 使用这些,我如何计算p值?

任何人都可以确认它的有效性吗? 与R相比,它给出的结果有所不同。

我已经将这行C代码隔离为不正确,但我不明白为什么:

double pv0=t0<0?2*(1-gsl_cdf_tdist_P(-t0,n-2)):2*(1-gsl_cdf_tdist_P(t0,n-2));//This is the p-value of the constant term

R给出的结果:

系数:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -700.000 226.569 -3.090 0.05373 .

x 60.000 6.831 8.783 0.00311 **

C给出的结果:

Coefficients Estimate Std. Error t value Pr(>|t|)

(Intercept) -700.000000 226.568606 -3.089572 -550099700.000000

x 60.000000 6.831301 8.783101 -4.000000

I have performed a linear regression in C using the GSL library. I've performed the same regression in R. I can access the p values for this regression in R using the "summary" command.

In C, I have the covariance matrix, sum of squared residuals value and fit coefficients. Using these, how do I calculate the p values?

Can anyone confirm it's validity? The results it gives differ for me compared to R.

I have isolated this line of C code as incorrect, but I can't see why:

double pv0=t0<0?2*(1-gsl_cdf_tdist_P(-t0,n-2)):2*(1-gsl_cdf_tdist_P(t0,n-2));//This is the p-value of the constant term

Results given by R:

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -700.000 226.569 -3.090 0.05373 .

x 60.000 6.831 8.783 0.00311 **

Results given by C:

Coefficients Estimate Std. Error t value Pr(>|t|)

(Intercept) -700.000000 226.568606 -3.089572 -550099700.000000

x 60.000000 6.831301 8.783101 -4.000000

原文:https://stackoverflow.com/questions/26289968

更新时间:2019-10-15 02:51

最满意答案

gsl_cdf_tdist_P应该有两个double参数,并在0和1之间返回一个double 。

首先检查所有类型。

如果在所有类型都正确的情况下它返回0-1之外的值,则某处存在非常严重的问题。

gsl_cdf_tdist_P should expect two double arguments and return a double between 0 and 1.

Check all your types first.

If it's returning values outside 0-1 when all the types are correct, there's a very serious problem somewhere.

相关问答

这在实施上有所不同。 R中的lm使用基于QR分解的基础C代码。 模型矩阵被分解为正交矩阵Q和三角矩阵R.这引起了其他人称之为“共线性检查”的情况。 R没有检查,QR分解的性质确保最小共线变量在拟合算法中变得“优先”。 有关线性回归背景下QR分解的更多信息: https : //www.stat.wisc.edu/~larget/math496/qr.html sklearn的代码基本上是numpy.linalg.lstsq的一个包装,它使欧几里德二次规范最小化。 如果你的模型是Y = AX ,它将

...

如果您不知道错误之间的协方差,您可以采用迭代方法。 您将首先使用普通最小二乘法,计算错误以及错误之间的协方差。 然后,您将使用计算的协方差矩阵应用GLS并重新估计协方差矩阵。 您将继续使用带有新协方差矩阵的GLS进行迭代,直到您收敛为止。 这里有一个链接 (.pdf警告)给这个方法的例子,以及加权和迭代加权最小平方的相关讨论,其中你在GLS中假设的误差之间没有相关性。 If you do not know the covariance between the errors you can take

...

glht(ct1, linfct = 'cyl + hp = 0')将不起作用,因为ct1不是glht对象,不能通过as.glht强制转换为glht对象。 我不知道是否有一个包或现有的功能来做这个,但这不是一个困难的工作自己。 以下小功能: LinearCombTest

## if `.vcov` missing, use the one returned by `lm`

if (is.null(.v

...

我可以看到你正在做中心回归: sandipan的答案并不是你想要的,因为它通过通常的常规方程来估算: 后者已经存在一个问题: 求解正规方程会给出与使用lm不同的系数? 在这里,我专注于前者。 其实你已经很接近了。 您已获得混合协方差C : # y x1 x2

#y 10.4 -2.0 -0.6

#x1 -2.0 10.5 3.0

#x2 -0.6 3.0 4.4

根据您对E和F定义,您知道需要子矩阵才能继续。 实际上,您可以执行矩阵子集而不是手动输入: E

...

首先,从统计上来说,这可能不是分析时态数据的最佳方法。 虽然,关于你提出的方法,构建一个循环来获得这个非常简单: Coefs

for(i in 1:ncol(Data)){

Coefs[i,]

}

First of all, statisti

...

看起来你只有一个X和一个Y,所以输出是正确的。 尝试这个: #coef_ : array, shape (n_features, ) or (n_targets, n_features)

print(regr.coef_)

#intercept_ : array Independent term in the linear model.

print(regr.intercept_)

http://scikit-learn.org/stable/modules/genera

...

你这么说 I added a column of 1's in x for constant term when using both methods

但是LinearRegression的文档说明了这一点 LinearRegression(fit_intercept=True, [...])

它默认适合拦截。 这可以解释为什么你在常数项中有差异。 现在对于其他系数,当两个变量高度相关时,可能会出现差异。 让我们考虑两个列完全相同的极端情况。 然后,通过增加另一个,可以补偿减小两者中任何一个前

...

首先, summary(full_lm)$coefficients[,4]返回p-values而不是系数。 现在,为了真正回答你的问题,我相信你的一些变量会退出估计,因为它们与其他一些变量是完全一致的。 如果运行summary(full_lm) ,则会看到对这些变量的估计在所有字段中都返回NA 。 因此,它们不包含在summary(full_lm)$coefficients 。 举个例子: x

x1

x2

eps

...

gsl_cdf_tdist_P应该有两个double参数,并在0和1之间返回一个double 。 首先检查所有类型。 如果在所有类型都正确的情况下它返回0-1之外的值,则某处存在非常严重的问题。 gsl_cdf_tdist_P should expect two double arguments and return a double between 0 and 1. Check all your types first. If it's returning values outside 0-1

...

Dirk的答案会更快,但如果方便的话,这里是纯R的实现(从summary.lm提取你需要的位,并假设非全级模型矩阵没有问题等) 例: set.seed(101)

X

y

m

p值计算: rss

rdf

resvar

R

se

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值