R的等价于numpy.linalg.lstsq

时间:2016-06-05 22:59:28

标签: r numpy

我有多个线性回归形式vc = x1 * va + x2 * vb。

(现在,下面是一个非常小的例子 - 它有相同的值,导致R中出现警告。下面的第二个数据集说明了我的问题)

在Python中,我编写了

#!/usr/bin/env python3
import numpy as np

va = np.array([1, 2, 3, 4, 5])
vb = np.array([1, 2, 3, 4, 5])
vc = np.array([1, 2, 3, 4, 5])

A = np.vstack([va, vb]).T

print(A)

result = np.linalg.lstsq(A, vc)

print(result)

输出:

(array([ 0.5,  0.5]), array([], dtype=float64), 1, array([  1.04880885e+01,   3.14018492e-16]))

我想,下面的代码会是相同的:

#!/usr/bin/Rscript

va <- c(1, 2, 3, 4, 5)
vb <- c(1, 2, 3, 4, 5)
vc <- c(1, 2, 3, 4, 5)

reg <- lm(vc ~ va + vb)

reg

summary(reg)

但是,我得到以下输出(摘录):

Coefficients:
A1  A2  
 1  NA  

esidual standard error: 7.022e-16 on 4 degrees of freedom

In summary.lm(reg) : essentially perfect fit: summary may be unreliable

即使我以某种方式调整数字,R仍然会抱怨。

我认为,我做了一些基本错误,但我无法弄明白。我还尝试构建矩阵A(包含vbvc作为列),然后使用reg <- lm(vc ~ 0 + A)。在那里,我得到3个自由度,但具有相同的系数。

第二个数据集

va = np.array([1, 2, 3, 4, 5])
vb = np.array([2, 2, 2, 2, 2])
vc = np.array([3.1, 3.2, 3.3, 3.4, 3.5])

va <- c(1, 2, 3, 4, 5)
vb <- c(2, 2, 2, 2, 2)
vc <- c(3.1, 3.2, 3.3, 3.4, 3.5)

如果我添加0 +(导致lm(vc ~ 0 + va + vb)),我会获得3个自由度和相同的结果。看起来不错。

0 +删除了&#34;隐含的拦截术语&#34; (无论如何)。 Source

1 个答案:

答案 0 :(得分:1)

问题是你有一个单一的拟合,多个系数组合将同样很好地代表它。默认情况下,恕我直言,{ "PersonIds": [ "001", "002" ], "Subjects": [ { "Name": "Maths", "Marks": 90 }, { "Name": "Science", "Marks": 70 }, ] } $(document).ready(function (){ //Start the graph marksGraph(); var marks = []; //Contains marks var names = []; var rg, // Storesstartdate and end date range startDt, // Stores start Date endDt; // Stores end Date //Calling the Range API d3.json('url', function(error,data) { if(rg != null || rg!= undefined || !error){ rg = data; startDt = new Date(data.startDt); endDt = new Date(data.endDt); //Set Count to zero var count = 0; var interval = setInterval(function process(){ if (startDt > fromDt) { clearInterval(interval); return } console.log("I am coming inside Interval"); var startDate = startDt.toISOString(); var endDate = new Date(startDt.setMinutes(startDt.getMinutes() + 10)).toISOString(); //Calling the API d3.json("url", function(error,datum) { if(datum != null){ names = datum.name; marks = datum.marks; } }); count++; },2500); console.log(marks); } }); console.log(names); console.log(marks); numpy都应该在这种情况下引发错误。您可以通过向参数添加RR给您一个错误。此外,尽管在这种情况下您的截距为零,但您的回归方程式表明您并不希望适合其中一个。要在singular.ok = FALSE中拟合没有截距的线性模型,请使用以下形式的公式:

R

因此,要(正确地)以这种单一的方式返回错误,您可以调用:

lm(vc ~ va + vb - 1)