标签: linear-regression

当预测值没有变化时,为什么lm会返回值?

考虑以下R代码(我认为最终会调用一些Fortran):

X <- 1:1000
Y <- rep(1,1000)
summary(lm(Y~X))
Run Code Online (Sandbox Code Playgroud)

为什么值汇总返回?这个模型不应该适合,因为Y没有变化吗?更重要的是,为什么模型R ^ 2~ = .5?

编辑

我跟踪了从lm到lm.fit的代码,可以看到这个调用:

z <- .Fortran("dqrls", qr = x, n = n, p = p, y = y, ny = ny,
   tol = as.double(tol), coefficients = mat.or.vec(p, ny), residuals = y,
   effects = y, rank = integer(1L), pivot = 1L:p, qraux = double(p),
   work = double(2 * p), PACKAGE = "base")
Run Code Online (Sandbox Code Playgroud)

这就是实际情况似乎发生的地方.看http://svn.r-project.org/R/trunk/src/appl/dqrls.f)并没有帮助我理解发生了什么,因为我不知道fortran.

statistics r linear-regression lm

6
推荐指数
1
解决办法
421
查看次数

如何使用 R 对两个回归的斜率进行韦尔奇 t 检验?

我对具有相同自变量的两组进行回归。然后,我想测试两个回归的斜率是否显着不同。

我读到,当两组之间的样本量和方差不相等时,建议进行韦尔奇 t 检验。我发现了这个t.test()功能,但是我没有在斜坡上应用它。

Data <- data.frame(
  gender = sample (c("men", "women"), 2000, replace = TRUE),
  var1 = sample (c("value1", "value2"), 2000, replace = TRUE),
  var2 = sample (c("valueA", "valueB"), 2000, replace = TRUE),
  var3 = sample (c("valueY", "valueZ"), 2000, replace = TRUE),
  y = sample(0:10, 2000, replace = TRUE)
)
Run Code Online (Sandbox Code Playgroud)

我的两个回归:

lm.male <- lm(y ~ var1 + var2 + var3, data = subset(Data, gender == "men"))
summary(lm.male)

lm.women <- lm(y ~ var1 + var2 + var3, data …
Run Code Online (Sandbox Code Playgroud)

regression r linear-regression t-test

5
推荐指数
1
解决办法
2642
查看次数

为什么我必须在张量流中对输入数据进行洗牌以进行线性回归

我正在使用tensorflow构建线性回归模型,以下是我的代码。但根据我的实验,我必须对训练数据进行洗牌,否则权重和偏差将被估计为 na。谁能向我解释为什么我必须打乱数据?谢谢

train_X = np.linspace(1, 50, 100)
train_Y = 1.5 * train_X + 10.0 + np.random.normal(scale=10, size=1)
data = list(zip(train_X, train_Y))
random.shuffle(data) # have to shuffle data, otherwise w and b would be na

X = tf.placeholder(dtype=tf.float32, shape=[], name='X')
Y = tf.placeholder(dtype=tf.float32, shape=[], name='Y')
W = tf.Variable(0.0, name='weight')
b = tf.Variable(0.0, name='bias')
Y_pred = W * X + b

cost = tf.square(Y-Y_pred, name="cost")
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(cost)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(30):
        for x, y in data: …
Run Code Online (Sandbox Code Playgroud)

linear-regression tensorflow

5
推荐指数
1
解决办法
1020
查看次数

如何找到曲线的线性部分

如何自动提取曲线中R^2对整个曲线不理想的拟合良好的线性部分?

例如我有什么:

数据.lm

    x y
1   1 1
2   2 8
3   3 3
4   4 4
5   5 5
6   6 6
7   7 7
8   8 5
9   9 2
10 10 7
Run Code Online (Sandbox Code Playgroud)

rg.lm<- lm(y~x, data.lm) rg.lm

Coefficients:
(Intercept)            x  
     3.7333       0.1939  
Run Code Online (Sandbox Code Playgroud)

摘要(rg.lm)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4788 -1.1136  0.0061  1.2712  3.8788 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   3.7333     1.6111   2.317   0.0491 *
x             0.1939     0.2597   0.747   0.4765  

Residual standard error: 2.358 on 8 …
Run Code Online (Sandbox Code Playgroud)

r linear-regression lm

5
推荐指数
1
解决办法
3995
查看次数

如何计算python pandas数据框中行之间的相关性

我有大数据框,我需要有效地计算数据框行和给定值列表之间的相关性。例如:

dfa= DataFrame(np.zeros((1,4)) ,columns=['a','b','c','d'])
dfa.ix[0] = [2,6,8,12]
a   b   c   d
2.0 6.0 8.0 12.0
dfb= DataFrame([[2,6,8,12],[1,3,4,6],[-1,-3,-4,-6]], columns=['a','b','c','d'])
    a   b   c   d
0   2   6   8   12
1   1   3   4   6
2  -1  -3  -4  -6
Run Code Online (Sandbox Code Playgroud)

我希望得到:

0    1
1    0.5
2   -0.5
Run Code Online (Sandbox Code Playgroud)

我尝试了很多版本,例如:

dfb.T.corrwith(dfa.T, axis=0)
Run Code Online (Sandbox Code Playgroud)

但我得到的是很多南的

python performance linear-regression correlation pandas

5
推荐指数
1
解决办法
5879
查看次数

LinearRegression() :使用 cross_val_score 进行 R2 评分 - 奇怪的结果

我正在使用 cross_val_score() 函数来计算R2拟合系数。这是我的代码:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
X = data.iloc[:,0:13]
y = data.iloc[:,13]
lin = LinearRegression()

MSE = cross_val_score(lin,X,y,scoring = 'neg_mean_squared_error',cv = 10)
MSE
array([  -9.28694671,  -14.15128316,  -14.07360615,  -35.20692433,
    -31.88511666,  -19.83587796,   -9.94726918, -168.37537954,
    -33.32974507,  -10.96041068])
MSE.mean()
-34.705255944525462

R2= cross_val_score(lin,X,y,cv = 10)
R2
array([ 0.73376082,  0.4730725 , -1.00631454,  0.64113984,  0.54766046,
    0.73640292,  0.37828386, -0.12922703, -0.76843243,  0.4189435 ])
R2.mean()
0.20252899006052702
Run Code Online (Sandbox Code Playgroud)

我发现这些结果非常奇怪,特别是R2结果:

  • 0 < R2 < 1?
  • 我发现很奇怪的是均方结果和R2分数非常“分散”。

我执行相同的回归任务并使用“Rapidminer”计算分数,我得到了更多“逻辑”结果:

  • 均方误差 = 24.218 +/- 10.413 …

python scoring linear-regression scikit-learn

5
推荐指数
0
解决办法
2435
查看次数

Spark线性回归中获取协方差矩阵

我一直在研究 Spark 的文档,但仍然找不到如何在进行线性回归后获取协方差矩阵。

给定输入训练数据,我做了一个非常简单的线性回归,与类似:

val lr = new LinearRegression()
val fit = lr.fit(training)
Run Code Online (Sandbox Code Playgroud)

获取回归参数很简单fit.coefficients,但似乎没有关于如何获取协方差矩阵的信息。

为了澄清一下,我正在寻找类似于vcovR 中的函数。有了这个,我应该能够做一些类似vcov(fit)获取协方差矩阵的事情。任何其他有助于实现这一目标的方法也都可以。


编辑

这里详细讨论如何从线性回归得到协方差矩阵。标准差很容易获得,因为它是由 提供的fit.summary.meanSsquaredError。然而,参数(X'X) -1很难得到。看看这是否可以用来以某种方式计算协方差矩阵,这将是很有趣的。

scala covariance linear-regression apache-spark apache-spark-mllib

5
推荐指数
1
解决办法
1359
查看次数

在 R 的 lm() 中输入多个解释变量是否有捷径?

lm()我对R 中的函数有疑问。我知道lm()它用于回归建模,并​​且我知道可以这样做:

lm(response ~ explanatory1 + explanatory2 + ... + explanatoryN, data = dataset)
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:“假设它N很大,是否有一个我可以使用的捷径,不需要我编写所有N变量名称?”

提前致谢!

编辑:我遗漏了我真正需要答案的问题的很大一部分。假设我想删除1解释k变量并只包含n-k这些变量。

regression r shortcut linear-regression lm

5
推荐指数
1
解决办法
3260
查看次数

使用 python 线性拟合中的误差传播

假设我对某个因变量y相对于某个自变量进行了多次测量x。我还记录了每次测量的不确定度dy。作为一个例子,这可能看起来像

import numpy as np
x = np.array([1, 2, 3, 4])
y = np.array([4.1, 5.8, 8.1, 9.7])
dy = np.array([0.2, 0.3, 0.2, 0.4]) 
Run Code Online (Sandbox Code Playgroud)

现在假设我希望测量值遵循线性关系y = mx + b,并且我想确定y_umn某些未测量的 x 值的y 值x_unm。如果不考虑错误,我可以很容易地在 Python 中执行线性拟合:

fit_params, residuals, rank, s_values, rcond = np.polyfit(x, y, 1, full=True)
poly_func = np.poly1d(fit_params)

x_unm   # The unmeasured x value
y_unm = poly_func(x_unm)  # The unmeasured x value
Run Code Online (Sandbox Code Playgroud)

我对这种方法有两个问题。首先是np.polyfit没有包含每个点的错误。其次,我不知道不确定性y_unm是什么。

有谁知道如何使数据与不确定性相匹配,从而使我能够确定 的不确定性y_unm …

python statistics numpy linear-regression

5
推荐指数
1
解决办法
2937
查看次数

将所有因子水平与总平均值进行比较:我可以调整线性模型拟合中的对比度以显示所有水平吗?

我正在尝试调整线性模型上的对比编码,我想知道因子的每个级别是否与总平均值显着不同。

\n

让\xe2\x80\x99s 表示该因子具有级别“A”、“B”和“C”。最常见的对照治疗对比显然将“A”设置为参考水平,并将“B”和“C”与其进行比较。这不是我想要的,因为“A”级没有出现在模型摘要中。

\n

偏差编码似乎也没有给我想要的东西,因为它将级别“C”的对比矩阵设置为[-1,-1,-1],现在这个级别没有显示在模型摘要中。

\n
set.seed(1)\ny <- rnorm(6, 0, 1)\nx <- factor(rep(LETTERS[1:3], each = 2))\nfit <- lm(y ~ x, contrasts = list(x = contr.sum))\nsummary(fit)\n
Run Code Online (Sandbox Code Playgroud)\n

此外,报告的级别名称已从“A”、“B”更改为“1”和“2”。

\n
Call:\nlm(formula = y ~ x, contrasts = list(x = contr.sum))\n\nResiduals:\n     1      2      3      4      5      6 \n-0.405  0.405 -1.215  1.215  0.575 -0.575 \n\nCoefficients:\n            Estimate Std. Error t value Pr(>|t|)\n(Intercept) -0.02902    0.46809  -0.062    0.954\nx1          -0.19239    0.66198  -0.291    0.790\nx2           0.40885    0.66198   0.618    0.581\n\nResidual standard error: 1.147 on 3 degrees of freedom\nMultiple …
Run Code Online (Sandbox Code Playgroud)

regression r linear-regression lm categorical-data

5
推荐指数
1
解决办法
1185
查看次数