我有多个线性回归形式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
(包含vb
和vc
作为列),然后使用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
答案 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
都应该在这种情况下引发错误。您可以通过向参数添加R
来R
给您一个错误。此外,尽管在这种情况下您的截距为零,但您的回归方程式表明您并不希望适合其中一个。要在singular.ok = FALSE
中拟合没有截距的线性模型,请使用以下形式的公式:
R
因此,要(正确地)以这种单一的方式返回错误,您可以调用:
lm(vc ~ va + vb - 1)